Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: По заданному числу и месяцу определить, какая дата (число и месяц) будут послезавтра

По заданному числу и месяцу определить, какая дата (число и месяц) будут послезавтра.

Входные данные:
Вводятся через пробел два целых числа, обозначающих число и месяц невисокосного года.

Выходные данные:
Вывести два числа - послезавтрашние число и месяц

Пример:
9 10 11 10
Ответ:
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  d,m:integer;
  t:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
  
begin
  repeat
    write('введите день и месяц:');readln(d,m);
  until (m in [1..12]) and (d in [1..t[m]]);
  d:=d+2;
  if d>t[m] then begin d:=d-t[m];m:=m+1;end;
  if m>12 then m:=1;
  writeln('послезавтра:',d,' ',m);
end.
Вопрос: Создать запрос, который выведет расходы по дате за неделю; месяц; год

Всем доброго времени суток. Подключаю базу данных Access к Delphi 7. Столкнулся с проблемой, а именно создать запрос, который выведет расходы по дате за неделю; месяц; год. Прошу вашей помощи, очень нужно!
Прикрепляю свою базу.
Ответ: Доход и Расход - это по сути одна и та-же операция, только доход с +, а расход с -, поэтому достаточно одной таблицы.
Выбрать весь доход или расход за любой период можно тогда такими запросами:
SQL
1
2
SELECT SUM(Сумма) AS Доход FROM Журнал WHERE Сумма > 0 AND DATE BETWEEN :BDate AND :EDate
SELECT SUM(Сумма) AS Расход FROM Журнал WHERE Сумма < 0 AND DATE BETWEEN :BDate AND :EDate
Но для получения корректного результата вам надо понимать как правильно задавать даты в Акцесе
Вопрос: Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти все весенние даты

Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти все весенние даты.
Ответ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
 
int main()
{
    std::ifstream ifs("input.txt");
    std::tm date;
    while (ifs >> std::get_time(&date, "%d.%m.%Y"))
        if (date.tm_mon > 1 && date.tm_mon < 5)
            std::cout << std::put_time(&date, "%d.%m.%Y") << std::endl;
}
Для справки:


Вопрос: имя, фамилия, дата рождения (число, месяц, год);

Написать программу, которая:
а) для группы людей создает записи - имя, фамилия, дата рождения (число, месяц, год);
б) выводит на экран имена и фамилии всех людей этой группы, родившихся в заданном
году;
в) выводит на экран все данные о людях этой группы с заданным именем.


начинаем изучать программирование!) РГЗ чтоб его (
Ответ: Спасибо огромное!!!!
Вопрос: MS Excel - макрос, который осуществляет автозаполнения строки клеток месяцами года

MS Excel - макрос, который осуществляет автозаполнения строки клеток месяцами года.
Ответ: В День народного единства Программист 123 предвосхитил эту тему — создал тред !

Сообщение от pashulka
Вариант не для студентов
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    If Target.Column > 1 Then Exit Sub
    
    Cancel = True
    With Application
        Target(1, 1).Resize(7) = .Transpose(.GetCustomListContents(2))
        Target(1, 2).Resize(7) = .Transpose(.GetCustomListContents(1))
        Target(1, 3).Resize(12) = .Transpose(.GetCustomListContents(3))
        Target(1, 4).Resize(12) = .Transpose(.GetCustomListContents(4))
    End With
 
    ActiveSheet.Cells.ShrinkToFit = True 'вписка содержимого в клетки
End Sub
Здесь по двойному щелчку в колонке A возникают аж 4 автоматических списка, причём на любом доступном языке.
Вопрос: Дата в строку с спряжением месяцев

Вопрос возможно, глупый, но мне очень интересно есть ли какая нибудь системная реализация.

Меня немного напрягает

1 август 2006 -> хочу 1 августа 2006
и так далее

июнь -> июня

написать непроблема
как вариает я бы зделал вот так
 LongMonthNames[1]:='января';
 // здесь другие месяцы
 // здесь другие месяцы
                      //ниже пример с январём
 Edit1.Text:=FormatDateTime('d MMMM yyyy', StrToDate('20.1.2006'));
 // здесь востанавливаю LongMonthNames


Я уверен что есть в системе стандартная фича или как или где , например наводя курсор на дату в ввинде я вижу всё в правильном падеже....
Ответ: Дата в родительном падеже.

function GetGenitiveDate(ADate: TDate): string;
var
  St: SystemTime;
  DateShotString: array[Byte] of Char;
begin
  DateTimeToSystemTime(ADate, St);
  GetDateFormat(LOCALE_USER_DEFAULT,DATE_USE_ALT_CALENDAR, @st, 'dd MMMM yyyy', @DateShotString, 255);
  Result := DateShotString;
end;
Вопрос: перевод строковой даты с именем месяца

Привет всем!

Потратил кучу времени на эксперименты, но так и не добился результата.
Есть такая строка: October 27 2018

Как, используя TFormatSettings и StrToDate, получить дату из этой строки в переменную типа TDate?

Спасибо
Ответ:
DimonJUVE
Если можно, с кодом который так делает.
Я пробовал так, и у меня не вышло.

Мдя. StrToDate оказалась более тупой, чем я предполагал. Она действительно не умеет читать имена месяцев. В таком случае придется поработать ручками - либо полностью конвертация всей даты, либо препроцессор, который например, обработает только имя месяца, заменит его на номер и скормит стандартной функции.
Вопрос: Получить номер недели месяца

получить номер недели месяца, и получить дату второго четверга месяца
при условии: что известна только DateTime.Now
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
 
namespace datetimetest
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime now = DateTime.Now;
            Console.WriteLine("{0}    {1}    {2}", WeekNumber(now), DateTime.Now.DayOfWeek, (int)DateTime.Now.DayOfWeek);
            Console.ReadKey();    
        }
        public static int WeekNumber(DateTime date)
        {
            GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
            return cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
        }
 
    }
}
номер недели в году, название дня недели и номер дня недели нахожу
как найти номер недели месяца, и получить дату второго четверга месяца?
Ответ: получаете первый день месяца
DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);
смотрите какой это день недели
DateTime.DayOfWeek, пусть это среда -3
вычитаете из дня недели четверг - 4 день недели начала месяца -3, прибавляете 7, прибавляете дату начала месяца и получаете дату второго четверга месяца
Вопрос: Определить дату (число и месяц) по заданному числу дней прошедших от начала года

Доброго времени суток. Прошу помочь с решением следующего задания. Пожалуйста, предельно просто.

Написать программу, которая по заданному числу дней, прошедших от начала года, определяет дату: число d и месяц m, если известно, что год - не високосный.

Заранее благодарю.
Ответ:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Program
    {
        static void Main(string[] args)
        {
            bool b = true;
            int dni;
            DateTime d = new DateTime(2015,01,01);
            do {
                Console.WriteLine("дата по умолчанию: "+d.ToString("dd.MM.yyyy")+"\n");
                Console.Write("введите дни: ");
                dni=Convert.ToInt32(Console.ReadLine());
                d=d.AddDays(dni);
                Console.WriteLine("дата после прибавления дней " + d.ToString("dd.MM.yyyy"));
                Console.WriteLine("число "+d.Day);
                Console.WriteLine("месяц "+d.Month+"\n");
                Console.WriteLine("____________________________"+"\n");
                d = new DateTime(2015,01,01);
            }while(b);
            Console.ReadKey();
        }   
    }
Вопрос: Количество месяцев между двумя датами

Вычисление разности двух дат в месяцах:
Рассмотрим сначала поочередно три примера разностей двух различных дат (различных как между собой, так и для каждого примера):
1) 01.04.2009 – 1.03.2008 = 1 месяц;
2) 05.04.2009 – 3.03.2008 = 1 месяц 2 дня;
3) 05.04.2009 – 13.02.2008 = -8.02.0001 ??
Третий пример имеет некоторую сложность. Разберем этот пример подробнее.
05.04.2009 – 13.02.2008.
Рассмотрим разницу годов:
2009 – 2008 = 1 год = 12 месяцев.
Рассмотрим месяца:
04 – 02 = 2 месяца.
В сумме с разницей годов в месяцах будем иметь:
12 + 2 = 14 месяцев.
Рассмотрим дни:
05 – 13 = -8 месяцев.
Итак, мы столкнулись с неоднозначностью. С одной стороны, понятно, что наличие «–» (минуса) толкает на заем одного месяца из 14-ти имеющихся. С другой стороны, как трактовать занятый месяц: 1 месяц = 28, 29, 30, 31 дней? Вдобавок, дело осложняется с високосностью годов.
Принятие стандартного значения избавляет многих от трудоемких вычислений. Но есть и существенный недостаток. Это допущение означает смириться с будущими (хоть и редкими) просчетами (ошибками) вычислений.
Есть один метод, который может помочь решить эту проблемную ситуацию. Идея такова: Полный (в смысле один) месяц считается тогда, когда номер дня в одной дате для любого месяца совпадает с номером дня в другой дате для любого месяца, номер которого на единицу отличается от номера месяца в первой дате.
Применим этот метод к нашей задаче. Разность в днях дала отрицательный результат. Это свидетельствует о неполном месяце. Произведем заем из имеющихся месяцев:
14 – 1 = 13 месяцев.
Теперь, следуя предложенному методу, трактуем полный месяц как совпадение номеров дней, т.е. это подобно тому, как нас учили вычитанию или сложению в школе:
15 – 7 = 15 – 5 – 2 = 10 – 2 = 8;
7 + 8 = 7 + 3 + 5 = 10 + 5 = 15.
Сколько не хватает 13 февраля до 1 марта? Для ответа на этот вопрос мы должны знать, сколько дней в данном феврале (такое рассуждение относится и к другим месяцам, ведь не во всех месяцах по 30 или 31 дню). В 2009 году в феврале 28 дней. Примечание: наверное многие задались вопросом, почему рассматривается февраль 2009 года, а не февраль 2008 года; поясню: количество дней в феврале 2008 года уже было учтено, когда сравнивались года у дат. Вычитав из 2009 года 2008, мы автоматически учли февраль 2008 года и перенесли свой анализ в 2009 год. Тем самым получаем дополнительное правило описываемого метода: в анализе месяцев берется в рассмотрение месяц в бóльшем (численно) году. Итак, до 1 марта (т.е. не включая само 1 марта) с 13 февраля в 2009 году не хватает 15 дней. Теперь добавим оставшиеся 5 дней марта и получим 5 марта.
Таким образом, мы имеем в итоге:
13 месяцев и 20 дней. Это и есть разница в месяцах.
Для большей наглядности рассмотрим еще один пример:
11.05.2009 – 23.08.2007.
Выполняем все по алгоритму:
1) 2009г – 2007г = 2 года = 24 месяца
2) 05м – 08м = -3 месяца
3) 24м – 3м = 21 месяц
4) 11д – 23д = -12 дней
5) 21м – 1м = 20 месяцев
6) 23.08 – 23 августа; в августе 31 день; 31д – 23д = 8 дней
8д + 11д = 19 дней.
Ответ: 11.05.2009 – 23.08.2007 = 20 месяцев и 19 дней.

Пример реализации в Delphi:
    // *****************************************************************************
    // Функция, которая возвращает разницу между двумя датами в месяцах.
    // Исходные данные: BeginDate, EndDate - начальная и конечная даты;
    //                  DaysCount - остаток разницы в днях (хотя скорее она исходная
    //                              данная, а выходная).
    // Выходные данные: возвращает разницу между датами в месяцах.
    // *****************************************************************************
    function GetMonthsCount(BeginDate, EndDate: TDateTime;
      var DaysCount: Byte):Integer;
    var
      Days1, Days2,             // количество дней начальной и конечной дат
      Months1, Months2,         // количество месяцев начальной и конечной дат
      Years1, Years2: Integer;  // количество лет начальной и конечной дат
      BufferDate: TDateTime;    // буфер для обмена значениями
    begin
      if BeginDate > EndDate then  // сравниваем даты, если начальная позднее
      begin                        // конечной, то меняем даты между собой
        BufferDate := BeginDate;
        BeginDate := EndDate;
        EndDate := BufferDate;
      end;
      Days1 := StrToInt(FormatDateTime('dd', BeginDate));     // считываем количе-
      Days2 := StrToInt(FormatDateTime('dd', EndDate));       // ство дней, месяцев
      Months1 := StrToInt(FormatDateTime('mm', BeginDate));   // и лет каждой из дат
      Months2 := StrToInt(FormatDateTime('mm', EndDate));     // и заносим в соот-
      Years1 := StrToInt(FormatDateTime('yyyy', BeginDate));  // ветствующие пере-
      Years2 := StrToInt(FormatDateTime('yyyy', EndDate));    // менные
      // Вычисляем суммарную разницу между датами по разницам в годах*12 и месяцах
      Result := (Years2 - Years1) * 12 + (Months2 - Months1);
      // Учитываем влияние разницы в днях на количество месяцев + остаток в днях в
      // переменной DaysCount
      if (Days2 - Days1) < 0 then
      begin  // если разница отрицательна, то
        Result := Result - 1;  // производим заем месяца из имеющихся
        // В зависимости от месяца в "меньшей" дате, вычисляем остаток в днях
        case Months1 of
          1, 3, 5, 7, 8, 10, 12: DaysCount := 31 - Days1 + Days2;
          4, 6, 9, 11: DaysCount := 30 - Days1 + Days2;
          // В случае февраля учитываем также високосность года
          2: if (Years2 mod 4 = 0) and (Years2 mod 100 <> 0) then
               DaysCount := 29 - Days1 + Days2
             else
               if (Years2 mod 100 = 0) and (Years2 mod 400 = 0) then
                 DaysCount := 29 - Days1 + Days2
               else
                 DaysCount := 28 - Days1 + Days2;
        end;
      end  // конец действий при отрицательной разнице дней
      else  // при положительной или нулевой разнице дней
        DaysCount := Days2 - Days1;  // банальная разность
    end;
    // *****************************************************************************
Сообщение отредактировано: ProESM -
Ответ:
ProESMЯ не пишу очень хорошо по русским, которую я извиняюсь. Я хотела бы обратиться к вам за алгоритм, который вычисляет ту же разность дат, но уже в формате X годов Y месяцев Z дней. Спасиба!