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

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

23.11.2017, 20:24. Показов 22375. Ответов 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
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,459
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
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru