С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/103: Рейтинг темы: голосов - 103, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52

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

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

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

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

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

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

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

12
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 21:23
Есть косяки, но в целом работает, можете уже сами довести до ума
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  [ТС]
Vyacheslav99, большое спасибо

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

Добавлено через 8 минут
Vyacheslav99, а такую программу,но только с использованием case можешь помочь составить?
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 22:25
Андрей2705, вы вообще не шарите что-ли)?
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 22:27  [ТС]
Vyacheslav99, да, плохо понимаю действие оператора case, более простые задачи с использованием этого оператора могу составить, а с этой задачкой возникли трудности. Буду благодарен если поможете)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 22:29
Лучший ответ Сообщение было отмечено Андрей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  [ТС]
Vyacheslav99, всё теперь до меня дошёл смысл, большое спасибо за помощь)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 22:37
Андрей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  [ТС]
Vyacheslav99, еще раз большое спасибо)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 22:50
Андрей2705, 15 и 23 строчки вам надо изменить только, справитесь?
0
0 / 0 / 0
Регистрация: 23.11.2017
Сообщений: 52
23.11.2017, 23:21  [ТС]
Vyacheslav99, буду благодарен если поможете мне завершить эту программу, а я постараюсь потом разобраться что и как тут работает)
0
15 / 16 / 15
Регистрация: 10.11.2017
Сообщений: 187
23.11.2017, 23:59
Я мало работал с оператором 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
Модератор
10383 / 5671 / 3399
Регистрация: 17.08.2012
Сообщений: 17,316
24.11.2017, 02:51
Ох, батюшки светы...

Вот, с проверкой ввода:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2017, 02:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru