1 / 1 / 2
Регистрация: 23.12.2013
Сообщений: 112
1

Вычислить дату следующего дня

25.02.2014, 17:51. Показов 11229. Ответов 6
Метки нет (Все метки)

Написать программу, которая вычисляет дату следующего дня. Ниже представлен рекомендуемый вид экрана во время работы программы(данные, введенные пользователем, выделены полужирном цветом)
Введите цифрами сегодняшнию дату( число месяц год) 31 .12. 1999
Последний день месяца!
С наступающим новым годом!
Завтра 1. 1 .2000
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2014, 17:51
Ответы с готовыми решениями:

Определить дату следующего дня
Есть такая задача...Определить дату следующего дня, например: 31.12.1985 01.01.1986 29.04.1985...

Определить дату следующего дня + день недели
Определить дату следующего дня + день недели (с использованием перечисляемого типа).

Определить дату следующего дня + квартал (с использованием перечисляемого типа)
Здравствуйте. Нужна помощь с написанием программы. Определить дату следующего дня + квартал (с...

По дате (число, месяц, год) определить дату следующего дня
1. По дате (число, месяц, год) определить дату следующего дня. Пользоваться оператором CASE ...

6
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
25.02.2014, 17:54 2
Цитата Сообщение от Gabdra Посмотреть сообщение
полужирном цветом
Это как?
Цитата Сообщение от Gabdra Посмотреть сообщение
Последний день месяца!
С наступающим новым годом!
И 12 раз в году новый год?
0
1 / 1 / 2
Регистрация: 23.12.2013
Сообщений: 112
26.02.2014, 16:59  [ТС] 3
Лучший ответ Сообщение было отмечено Gabdra как решение

Решение

полужирном цветом----это наверно скорее всего не надо

Последний день месяца!
С наступающим новым годом! ------ну это как бы пример

Добавлено через 34 минуты
Pascal
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
26
27
28
29
30
31
32
33
34
35
36
program z7;
var
  day:integer;
  month:integer;
  year:integer;
  last:boolean;
  r:real;
  l:integer;
begin
  writeln('Введите сегодняшнию дату');
  writeln('Число месяц год');
  readln(day,month,year);
  last:=FALSE;
  case month of
  1,3,5,7,8,10,12:if day=31
  then last:=TRUE;
  4,6,9,11: if day=30
  then last:=TRUE;
  2: if day = 28 then
  begin
  r:=year mod 4; if r <> 0
  then last:=TRUE;
  end;
  end; { case }
  if last
  then begin
  writeln('Последний день месяца');
  day:=l;
  if month=12
  then begin
  month:=1; year:=year + 1;
  writeln('С Новым Годом'); end
  else month:=month + 1; end
  else day:=day + 1; writeln('Завтра ',day,'.',month,'.' ,year );
  readln;
end.

вот так работает, ничего не надо изменить?
0
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 4
26.03.2021, 11:46 4
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Program data;
var
  ch,m,g:integer;
Begin
  writeln('Введите число месяц год ');
  read(ch);
  read(m);
  read(g);
 case m of
 01,03,05,07,08,10:if ch=31 then writeln('Следующий день:',01,'.', m+01,'.',g)
 else writeln('Следующий день:',ch+1,'.' ,m,'.' ,g);
 04,06,09,11: if ch=30 then writeln('Следующий день:',01,'.', m+01,'.',g)
 else writeln('Следующий день:',ch+1,'.' ,m,'.' ,g);
 12: if ch=31 then writeln('Следующий день:',01,'.', m-11,'.',g+1)
 else writeln('Следующий день:',ch+01,'.' ,m,'.' ,g);
 02: if((g mod 4=0)and(g mod 100<>0))or(g mod 400=0) then 
   begin
    if ch=29 then writeln('Следующий день:',01,'.',m+1,'.',g)
    else writeln('Следующий день:',ch+1,'.',m,'.',g);
   end
   else if ch=28 then writeln('Следующий день:',01,'.',m+1,'.',g)
   else writeln('Следующий день:',ch+1,'.',m,'.',g);
 end; 
end.
0
2834 / 1504 / 603
Регистрация: 19.03.2019
Сообщений: 5,000
26.03.2021, 15:51 5
Цитата Сообщение от Gabdra Посмотреть сообщение
вот так работает
ошибки есть, с последним днём месяца и связанная с високосным годом.
ты программу то сам запускал? Последнее число месяца вводил?

предлагаю такой вариант
Pascal
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program z7; 
 
const DaysInMonth : array[1..12] of integer =  
         (31,28,31,30,31,30,31,31,30,31,30,31);
 
var
  day:integer;
  month:integer;
  year:integer;
  Last:integer;
begin
  writeln('Введите сегодняшнию дату');
  writeln('Число месяц год');
  readln(day,month,year);
 
  if not (month in [1..12]) then begin
      WriteLn('Вы ввели неверную дату (месяц должен быть от 1 до 12)');  Halt(1)
  end;
 
  if (year<2000) or (year>2099) then begin
      WriteLn('Вы ввели неверную дату (год должен быть от 2000 до 2099)'); Halt(2)
  end;
 
  Last := DaysInMonth[month];
  if ((year mod 4) = 0) and (month=2) then Last := 29; {високосный год}
 
  if (day<1) or (day>Last) then begin
      WriteLn('Вы ввели неверную дату (в ',month,'-м месяце ',year,' года от 1 до ', Last,' дней)'); Halt(3)
  end;
 
  if day=Last then begin
    WriteLn('Последний день месяца!');
    day := 1;
    if month=12 then begin
         WriteLn('С наступающим новым годом!'); 
         month := 1;
         year := year + 1
    end
    else
      month := month + 1;    
  end
  else 
     day := day + 1; 
  
  writeln('Завтра ',day,'.',month,'.' ,year );
  readln;
end.
два замечания. Проверки даты на корректность можешь убрать/сократить.
второе. Проверка года на то, что они високосный, путём деления на 4 справедлива только для нашего времени (от 1901 года до 2099 года).
для любых других годов лучше использовать другую, полную формулу. см. википедию
Чтобы компенсировать накопившуюся ошибку и избежать подобного смещения в будущем, в 1582 году римский папа Григорий XIII провёл реформу календаря. Чтобы средний календарный год лучше соответствовал солнечному, было решено изменить правило високосных годов. По-прежнему високосным оставался год, номер которого кратен четырём, но исключение делалось для тех, которые были кратны 100. Такие годы были високосными только тогда, когда делились ещё и на 400.

Отсюда следует распределение високосных годов:

год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные (например, годы 1700, 1800, 1900, 2100, 2200, 2300);
остальные годы, номер которых кратен 4, — високосные.
например. на Паскале
Pascal
1
2
3
4
5
{ функция возвращает високосный ли год }
  function IsLeapYear(Year : Integer) : Boolean;
  begin
    IsLeapYear := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
  end;
0
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 4
26.03.2021, 20:03 6
Спасибо приму к сведению. Запускал проверку вроде все выдавало что нужно . Даже по ответам ввести то и это тоже совпадало. Не знал про високосный что не работает спс. Но надо было сделатьс оператором case
0
2834 / 1504 / 603
Регистрация: 19.03.2019
Сообщений: 5,000
29.03.2021, 11:24 7
Vitaels, ты извини, я твой код вообще не смотрел, ответил Gabdra, просто не обратил внимание на то, что пост от 2014 года.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2021, 11:24
Помогаю со студенческими работами здесь

Написать программу определить дату следующего дня + день недели
.Определить дату следующего дня +день недели (с использованием перечисляемого типа).

Определить дату следующего дня + день недели (с использованием перечисляемого типа)
Определить дату следующего дня + день недели (с использованием перечисляемого типа)

Написать программу определения времени года и даты следующего дня
Написать программу определения времени года и даты следующего дня, используя подпрограмму...

Заменить каждую дату сообщения на дату следующего дня
Слова сообщения разделяются пробелами и знаками препинания . В сообщении может содержаться дата в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru