0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
1

Получить номер дня и месяца и определить дату следующего дня (считая, что год невисокосный)

23.11.2017, 20:24. Показов 19637. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Буду очень благодарен если поможете составить программу в PascalABC. Условие звучит так: Напишите программу, которая получает номер месяца и определяет дату следующего дня, считайте, что год невисокосный (365 дней)
Пример:
Введите день и месяц: 25 12
Следующий день: 26 декабря

Пример:
Введите день и месяц: 28 2
Следующий день: 1 марта
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2017, 20:24
Ответы с готовыми решениями:

Вводим номер месяца M и дня D. Определить порядковый номер дня в году T соответствующий этой дате
Вводим номер месяца M и дня D. Определить порядковый номер дня в году T соответствующий этой дате....

Определить дату предыдущего дня и дату следующего дня
Условие 1::O_O: Дата некоторого дня определяется двумя натуральными числами m(порядковый номер...

Определить номер месяца M и дня недели D по порядковому номеру дня в году
Вводится число T-порядковый день в году.Определить номер месяца M и дня недели D, соответствующих...

Определить дату следующего дня
Определить дату следующего дня

12
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 21:23 2
Есть косяки, но в целом работает, можете уже сами довести до ума
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Var m,d:integer;
Begin 
 write('Введите день: ') ;  Readln(d);
 write('Введите месяц: '); Readln(m);
if (m = 2) and (d=28) then  writeln('Следующий день - 1',' марта');  
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12) then if (d>1) and (d<31) then begin d:=d+1;
if m=1 then writeln('Следующий день - ',d,' января ');
if m=3 then writeln('Следующий день - ',d,' марта ');
if m=5 then writeln('Следующий день - ',d,' мая ');
if m=7 then writeln('Следующий день - ',d,' июля ');
if m=8 then writeln('Следующий день - ',d,' августа ');
if m=10 then writeln('Следующий день - ',d,' октября ');
if m=12 then writeln('Следующий день - ',d,' декабря ');
end else if d=31 then begin m:=m+1; writeln('День - 1 ',' Месяц - ',m); end;
if (m=2) or (m=4) or (m=6) or (m=9) or (m=11) then if d<30 then begin d:=d+1;
if m=2 then writeln('Следующий день - ',d,' февраля ');
if m=4 then writeln('Следующий день - ',d,' апреля ');
if m=6 then writeln('Следующий день - ',d,' июня ');
if m=9 then writeln('Следующий день - ',d,' сентября ');
if m=11 then writeln('Следующий день - ',d,' ноября ');
 end else if  d=30 then begin m:=m+1; writeln('День - 1 ',' Месяц - ',m); end;
readln;
end.
1
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 22:18  [ТС] 3
Vyacheslav99, большое спасибо

Добавлено через 17 минут
а с использованием case можно составить программу?

Добавлено через 8 минут
Vyacheslav99, а такую программу,но только с использованием case можешь помочь составить?
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 22:25 4
Андрей2705, вы вообще не шарите что-ли)?
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 22:27  [ТС] 5
Vyacheslav99, да, плохо понимаю действие оператора case, более простые задачи с использованием этого оператора могу составить, а с этой задачкой возникли трудности. Буду благодарен если поможете)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 22:29 6
Лучший ответ Сообщение было отмечено Андрей2705 как решение

Решение

Вот так вот.
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
Var m,d:integer;
Begin 
 write('Введите день: ') ;  Readln(d);
 write('Введите месяц: '); Readln(m);
if (m = 2) and (d=28) then  writeln('Следующий день - 1',' марта');  
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12) then if (d>1) and (d<31) then begin d:=d+1; end;
case m of 
1: begin  writeln('Следующий день - ',d,' января '); end;
3: begin writeln('Следующий день - ',d,' марта '); end;
5: begin writeln('Следующий день - ',d,' мая '); end;
7: begin writeln('Следующий день - ',d,' июля '); end;
8: begin writeln('Следующий день - ',d,' августа '); end;
10: begin writeln('Следующий день - ',d,' октября '); end;
12: begin writeln('Следующий день - ',d,' декабря '); end
else if d=31 then begin m:=m+1; writeln('День - 1 ',' Месяц - ',m); end; end;
if (m=2) or (m=4) or (m=6) or (m=9) or (m=11) then if d<30 then begin d:=d+1;
case m of 
2: begin  writeln('Следующий день - ',d,' февраля '); end;
4: begin  writeln('Следующий день - ',d,' апреля '); end;
6: begin  writeln('Следующий день - ',d,' июня '); end;
9: begin  writeln('Следующий день - ',d,' сентября '); end;
11: begin writeln('Следующий день - ',d,' ноября '); end
else if  d=30 then begin m:=m+1; writeln('День - 1 ',' Месяц - ',m); end;
 readln;
end;
end;
end.
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 22:33  [ТС] 7
Vyacheslav99, всё теперь до меня дошёл смысл, большое спасибо за помощь)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 22:37 8
Андрей2705, да. Чтобы не писать кучу раз If then, можно использовать case, если m=1 тогда январь, 2 - февраль, 3 - март и т.д. Он удобен тем что пишешь цифру и действие к ней, вместо If then if then if then, так и код более удобен для чтения.
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 22:44  [ТС] 9
Vyacheslav99, еще раз большое спасибо)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 22:50 10
Андрей2705, 15 и 23 строчки вам надо изменить только, справитесь?
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 23:21  [ТС] 11
Vyacheslav99, буду благодарен если поможете мне завершить эту программу, а я постараюсь потом разобраться что и как тут работает)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 186
23.11.2017, 23:59 12
Я мало работал с оператором case... В колледже вообще его не учили.. не знаю как в него записать 2 переменные.
Так:
Delphi
1
2
3
case d=31 of 
1:writeln('Следующий день - 1 ','января ');
end;
или так:
Delphi
1
2
3
case (d=31) and (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12) then begin m:=m+1; 
writeln('Следующий день - 1 ','января ');
end;
Не вышло.. Жду ответы интеллектуалов как сделать case с двумя переменными.
Поэтому только так вышло..
Delphi
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
48
49
50
51
52
53
54
55
56
57
58
Var m,d:integer;
Begin 
 write('Введите день: ') ;  Readln(d);
 write('Введите месяц: '); Readln(m);
if  (m = 2) and (d=28) then  writeln('Следующий день - 1',' марта'); 
if (d=31) and (m=1)  then begin m:=m+1; 
writeln('Следующий день - 1 ','января ');
end;  
if (d=31) and (m=3)  then begin m:=m+1; 
writeln('Следующий день - 1 ','марта ');
end;  
if (d=31) and (m=5)  then begin m:=m+1; 
writeln('Следующий день - 1 ','мая ');
end;  
if (d=31) and (m=7)  then begin m:=m+1; 
writeln('Следующий день - 1 ','июля ');
end;  
if (d=31) and (m=8)  then begin m:=m+1; 
writeln('Следующий день - 1 ','августа ');
end;  
if (d=31) and (m=10)  then begin m:=m+1; 
writeln('Следующий день - 1 ','октября ');
end;  
if (d=31) and (m=12)  then begin m:=m+1; 
writeln('Следующий день - 1 ','декабря ');
end;   
 
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12) then begin if (d>1) and (d<31) then begin d:=d+1; end; end;
case m of 
1: begin  writeln('Следующий день - ',d,' января '); end;
3: begin writeln('Следующий день - ',d,' марта '); end;
5: begin writeln('Следующий день - ',d,' мая '); end;
7: begin writeln('Следующий день - ',d,' июля '); end;
8: begin writeln('Следующий день - ',d,' августа '); end;
10: begin writeln('Следующий день - ',d,' октября '); end;
12: begin writeln('Следующий день - ',d,' декабря '); end
end;
if (m=2) or (m=4) or (m=6) or (m=9) or (m=11) then if d<30 then begin d:=d+1; end;
case m of 
2: begin  writeln('Следующий день - ',d,' февраля '); end;
4: begin  writeln('Следующий день - ',d,' апреля '); end;
6: begin  writeln('Следующий день - ',d,' июня '); end;
9: begin  writeln('Следующий день - ',d,' сентября '); end;
11: begin writeln('Следующий день - ',d,' ноября '); end 
else if (d=30) and (m=4)  then begin m:=m+1; 
writeln('Следующий день - 1 ','апреля ');
end;  
if (d=30) and (m=6)  then begin m:=m+1; 
writeln('Следующий день - 1 ','июня ');
end;  
if (d=30) and (m=9)  then begin m:=m+1; 
writeln('Следующий день - 1 ','сентября ');
end;  
if (d=30) and (m=11)  then begin m:=m+1; 
writeln('Следующий день - 1 ','октября ');
end; 
end;
end.
Добавлено через 1 минуту
Вот стабильно работает, но в полном коде выше где-то я накосячил..
Delphi
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
48
49
50
51
52
53
54
55
56
57
58
Var m,d:integer;
Begin 
 write('Введите день: ') ;  Readln(d);
 write('Введите месяц: '); Readln(m);
if  (m = 2) and (d=28) then  writeln('Следующий день - 1',' марта'); 
if (d=31) and (m=1)  then begin m:=m+1; 
writeln('Следующий день - 1 ','января ');
end;  
if (d=31) and (m=3)  then begin m:=m+1; 
writeln('Следующий день - 1 ','марта ');
end;  
if (d=31) and (m=5)  then begin m:=m+1; 
writeln('Следующий день - 1 ','мая ');
end;  
if (d=31) and (m=7)  then begin m:=m+1; 
writeln('Следующий день - 1 ','июля ');
end;  
if (d=31) and (m=8)  then begin m:=m+1; 
writeln('Следующий день - 1 ','августа ');
end;  
if (d=31) and (m=10)  then begin m:=m+1; 
writeln('Следующий день - 1 ','октября ');
end;  
if (d=31) and (m=12)  then begin m:=m+1; 
writeln('Следующий день - 1 ','декабря ');
end;   
if (d=30) and (m=4)  then begin m:=m+1; 
writeln('Следующий день - 1 ','апреля ');
end;  
if (d=30) and (m=6)  then begin m:=m+1; 
writeln('Следующий день - 1 ','июня ');
end;  
if (d=30) and (m=9)  then begin m:=m+1; 
writeln('Следующий день - 1 ','сентября ');
end;  
if (d=30) and (m=11)  then begin m:=m+1; 
writeln('Следующий день - 1 ','октября ');
end;  
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12) then if (d>1) and (d<31) then begin d:=d+1; end;
case m of 
1: begin  writeln('Следующий день - ',d,' января '); end;
3: begin writeln('Следующий день - ',d,' марта '); end;
5: begin writeln('Следующий день - ',d,' мая '); end;
7: begin writeln('Следующий день - ',d,' июля '); end;
8: begin writeln('Следующий день - ',d,' августа '); end;
10: begin writeln('Следующий день - ',d,' октября '); end;
12: begin writeln('Следующий день - ',d,' декабря '); end
end;
if (m=2) or (m=4) or (m=6) or (m=9) or (m=11) then if d<31 then begin d:=d+1;
case m of 
2: begin  writeln('Следующий день - ',d,' февраля '); end;
4: begin  writeln('Следующий день - ',d,' апреля '); end;
6: begin  writeln('Следующий день - ',d,' июня '); end;
9: begin  writeln('Следующий день - ',d,' сентября '); end;
11: begin writeln('Следующий день - ',d,' ноября '); end; end;
 readln;
end;
end.
Добавлено через 5 минут
С begin end; наверно накосячил и выводит по несколько раз..
0
Модератор
9734 / 5071 / 3285
Регистрация: 17.08.2012
Сообщений: 15,616
24.11.2017, 02:51 13
Ох, батюшки светы...

Вот, с проверкой ввода:
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
var month, day, max: integer;
begin
  repeat //ввод месяца с проверкой
    write('Номер месяца = ');
    readln(month);
    if not (month in [1..12]) then writeln('Не бывает месяца с таким номером, повторите ввод.')
  until month in [1..12];
  case month of //вычисление максимального количества дней в месяце
    2: max := 28;
    4, 6, 9, 11: max := 30
    else max := 31
  end;
  repeat //ввод дня с проверкой
    write('День = ');
    readln(day);
    if not (day in [1..max]) then writeln('Не бывает столько дней в ', month, ' месяце, повторите ввод.')
  until day in [1..max];
  inc(day); //номер следующего дня
  if day > max //если номер следующего дня больше максимального
    then begin //то
      day := 1; //будет 1-е число следующего месяца
      if month < 12 //если не декабрь
        then inc(month) //то номер следующего месяца на 1 больше текущего
        else month := 1 //иначе следующий месяц январь
    end;
  write('Следующий день: ', day, ' '); //печатаем номер дня
  case month of //и название месяца
    1: writeln('января');
    2: writeln('февраля');
    3: writeln('марта');
    4: writeln('апреля');
    5: writeln('мая');
    6: writeln('июня');
    7: writeln('июля');
    8: writeln('августа');
    9: writeln('сентября');
    10: writeln('октября');
    11: writeln('ноября');
    12: writeln('декабря')
  end;
  readln
end.
0
24.11.2017, 02:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2017, 02:51
Помогаю со студенческими работами здесь

Определить дату следующего дня
Задачка из сборника Златопольского: Дата некоторого дня определяется тремя натуральными числами: g...

Определить дату следующего (предыдущего) дня
Написать программу, определяющую: -дату следующего(предыдущего) дня -дату которая наступит через...

Определить дату следующего дня + квартал (с использованием перечисляемого типа)
Помогите пожалуйста, все выводит, кроме кварталов, вот код: var d,m,g,k:integer; b:boolean;...

По порядковому номеру дня года определить дату, т.е. число и месяц (год не високосный)
Составить программу, которая бы реализовала следующий алгоритм: по порядковому номеру дня года...


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

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

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