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

Известна текущая дата и день недели. Вывести дату следующего дня

10.02.2022, 13:26. Показов 1974. Ответов 19

Студворк — интернет-сервис помощи студентам
Помогите сделать так чтобы выводилось словами, типо (mon, tues, wed, thur, fri, sat, sun)
сделал код который выводит цифрами, не понимаю как сделать чтобы выводило словами, требуют словами говорят надо добавить 2 перечисляемых типа.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program Hello;
Type den=1..31;
     mas=01..12;
     god=1..2022;
var    g:god;
       m:mas;
       h:den;
begin 
 Writeln('Введите дату число месяц год');
 readln(h,m,g);
 case m of
 01,02,03,04,05,06,07,08,09,10,11:if(h<>31) then writeln('Следующий день это ',h+1,'.',m,'.',g)
                                            else writeln('Следующий день это ',01,'.',m+1,'.',g);
 12:if(h<>31) then writeln('Следующий день это ',h+1,'.',m,'.',g)  
              else writeln('Следующий день это 01.01.',g+1);
 end
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2022, 13:26
Ответы с готовыми решениями:

Известна текущая дата и день недели. Определить дату следующего дня и день недели
Известна текущая дата и день недели. Определить дату следующего дня и день недели. Использовать два перечисляемых типа для названий...

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

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

19
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
10.02.2022, 14:44
Pascal
1
2
3
4
5
## var ds := ReadLnString('Введите дату в формате dd.mm.yyyy :');
var d : System.DateTime;
var w := |'sun', 'mon', 'tues', 'wed', 'thur', 'fri', 'sat'|;
if System.DateTime.TryParseExact(ds,'dd.mm.yyyy',System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None,d) then
  $'{d.AddDays(1):dd.mm.yyyy} {w[Ord(d.AddDays(1).DayOfWeek)]}'.Println else 'косяк в дате'.Println;
0
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
10.02.2022, 14:50  [ТС]
Это что прошу прощения?
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
10.02.2022, 14:51
А вы запускать не пробовали?

Это PascalABC.NET, батенька!
0
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
10.02.2022, 14:54  [ТС]
Пробовал - косяк в дате

Добавлено через 43 секунды
Понял, получается я не там создал тему
0
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
10.02.2022, 14:58  [ТС]
Помогите пожалуйста сделать так чтобы дни недели выводились словами, типо (mon, tues, wed, thur, fri, sat, sun).
Сделал код который выводит цифрами, не понимаю как сделать чтобы выводило словами, требуют словами, буду очень благодарен за помощь.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
program Hello;
Type den=1..31;
     mas=01..12;
     god=1..2022;
var    g:god;
       m:mas;
       h:den;
begin 
 Writeln('Введите дату число месяц год');
 readln(h,m,g);
 case m of
 01,02,03,04,05,06,07,08,09,10,11:if(h<>31) then writeln('Следующий день это ',h+1,'.',m,'.',g)
                                            else writeln('Следующий день это ',01,'.',m+1,'.',g);
 12:if(h<>31) then writeln('Следующий день это ',h+1,'.',m,'.',g)  
              else writeln('Следующий день это 01.01.',g+1);
 end
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
10.02.2022, 15:00
Цитата Сообщение от mixa200432 Посмотреть сообщение
косяк в дате
Это когда дата вводится не по указанному формату.
Чукча не читатель. Чукча — писатель!
0
 Аватар для XzzzX
405 / 280 / 120
Регистрация: 09.07.2021
Сообщений: 1,016
Записей в блоге: 1
10.02.2022, 18:29
Pascal
1
2
3
4
## uses system;
(new DateTime(ReadInteger('Введите год, месяц, день'), ReadInteger, ReadLnInteger)).
AddDays(1).DayOfWeek.
ToString.Print;
парсить строковое представление в таком задании наверно всё таки лишнее
0
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
11.02.2022, 01:43
Лучший ответ Сообщение было отмечено mixa200432 как решение

Решение

Вы заблуждаетесь: у Вас выводятся год, месяц и число. А день недели вообще нигде не выводится! Для того, чтобы его вывести, его неплохо было бы определить для начала.

И что это у Вас во всех месяцах 31 день? Вы точно с Земли?
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
const
  md: array[1..12] of integer = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  dw: array[0..6] of string[11] = ('воскресенье', 'понедельник', 'вторник', 'среда',
                                   'четверг', 'пятница', 'суббота');
var
  d, m, y, a: integer;
begin
  write('Введите дату: число месяц год: ');
  readln(d, m, y);
  if (m = 2) and (d >= 28) and ((y mod 400 <> 0) and (y mod 4 <> 0) or (y mod 100 = 0)) then inc(d);
  if (y >= 1582) and (m in [1..12]) and (d in [1..md[m]]) then
    begin
      inc(d);
      if d > md[m] then
        begin
          d := 1;
          inc(m)
        end;
      if m > 12 then
        begin
          m := 1;
          inc(y)
        end;
      write('Следующая дата: ', d, '.', m, '.', y, ', ');
      a := (14 - m) div 12;
      y := y - a;
      m := m + 12 * a - 2;
      writeln(dw[(d + (31 * m) div 12 + y + y div 4 - y div 100 + y div 400) mod 7])
    end
  else writeln('Неверная дата');
  readln
end.
Похоже, у Вас тема про оператор выбора. На всякий случай с case:
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
  d, m, y, a, md: integer;
begin
  write('Введите дату: число месяц год: ');
  readln(d, m, y);
  if (m = 2) and (d >= 28) and ((y mod 400 <> 0) and (y mod 4 <> 0) or (y mod 100 = 0)) then inc(d);
  case m of
    2: md := 29;
    1, 3, 5, 7, 8, 10, 12: md := 31;
    4, 6, 9, 11: md := 30
    else md := 0
  end;
  if (y >= 1582) and (d in [1..md]) then
    begin
      inc(d);
      if d > md then
        begin
          d := 1;
          inc(m)
        end;
      if m > 12 then
        begin
          m := 1;
          inc(y)
        end;
      write('Следующая дата: ', d, '.', m, '.', y, ', ');
      a := (14 - m) div 12;
      y := y - a;
      m := m + 12 * a - 2;
      case (d + (31 * m) div 12 + y + y div 4 - y div 100 + y div 400) mod 7 of
        0: writeln('воскресенье');
        1: writeln('понедельник');
        2: writeln('вторник');
        3: writeln('среда');
        4: writeln('четверг');
        5: writeln('пятница');
        6: writeln('суббота')
      end
    end
  else writeln('Неверная дата');
  readln
end.
Википедия - Високосный год
Викиучебник - Реализации алгоритмов/Вечный календарь
1
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
12.02.2022, 00:07  [ТС]
Огромное спасибо )

Добавлено через 9 минут
Один вопрос, а какую функцию выполняют переменные (md, a).
0
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
12.02.2022, 01:30
md - это количество дней в месяце. В первой программе это константный массив с количеством дней каждого месяца, во второй программе это целочисленная переменная, в которую заносится количество дней для данного месяца.

a - это переменая для алгоритма вечного календаря. Нужна для предварительной коррекции года и месяца для формулы вечного календаря. Я Вам дал ссылки на материалы по теме в конце сообщения #2.
1
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
13.02.2022, 16:51  [ТС]
Cyborg Drone, если будут свободные 10-15 минут, могли бы вы мне показать пожалуйста как эта задача будет выглядеть
с использованием двух перечисляемых типа для названий месяцев и дней недели (в виде идентификаторов),
и чтобы в дате следующего дня выводился месяц и день недели в текстовом виде, программа с оператором выбора очень сильно понравилась!
0
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
13.02.2022, 21:05
Лучший ответ Сообщение было отмечено mixa200432 как решение

Решение

Вот таких типов?
Pascal
1
2
3
type
  mon = (January, February, March, April, May, June, July, August, September, October, November, December);
  dow = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
Смысла не имеет. В этом уродце Pascal ABC (простом, без суффикса .NET) нельзя непосредственно вывести на печать значения подобных пользовательских типов. Через танцы с бубном можно, конечно, но это будет очень тупое и притянутое за уши решение.

Для Free Pascal, по-английски, потому что русские буквы в идентификаторах недопустимы:
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
type
  mon = (January, February, March, April, May, June, July, August, September, October, November, December);
  dow = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
var
  d, m, y, a, md: integer;
begin
  write('Enter date: day month year: ');
  readln(d, m, y);
  if (m = 2) and (d >= 28) and ((y mod 400 <> 0) and (y mod 4 <> 0) or (y mod 100 = 0)) then inc(d);
  case m of
    2: md := 29;
    1, 3, 5, 7, 8, 10, 12: md := 31;
    4, 6, 9, 11: md := 30
    else md := 0
  end;
  if (y >= 1582) and (d in [1..md]) then
    begin
      inc(d);
      if d > md then
        begin
          d := 1;
          inc(m)
        end;
      if m > 12 then
        begin
          m := 1;
          inc(y)
        end;
      write('Next date: ', d, ' ', mon(m-1), ' ', y, ', ');
      a := (14 - m) div 12;
      y := y - a;
      m := m + 12 * a - 2;
      writeln(dow((d + (31 * m) div 12 + y + y div 4 - y div 100 + y div 400) mod 7))
    end
  else writeln('Invalid date');
  readln
end.
Для Pascal ABC.NET:
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
type
  mon = (января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря);
  dow = (воскресенье, понедельник, вторник, среда, четверг, пятница, суббота);
begin
  var (d, m, y) := ReadInteger3('Введите дату: день номер месяца год:');
  if (m = 2) and (d >= 28) and ((y mod 400 <> 0) and (y mod 4 <> 0) or (y mod 100 = 0)) then inc(d);
  var md: integer;
  case m of
    2: md := 29;
    1, 3, 5, 7, 8, 10, 12: md := 31;
    4, 6, 9, 11: md := 30
    else md := 0
  end;
  if (y >= 1582) and (d in 1..md) then
    begin
      d += 1;
      if d > md then
        begin
          d := 1;
          m += 1
        end;
      if m > 12 then
        begin
          m := 1;
          y += 1
        end;
      $'Следующая дата: {d} {mon(m-1)} {y},'.Print;
      var a := (14 - m) div 12;
      y := y - a;
      m := m + 12 * a - 2;
      Print(dow((d + (31 * m) div 12 + y + y div 4 - y div 100 + y div 400) mod 7))
    end
  else 'Неверная дата'.PrintLn
end.
0
1 / 1 / 0
Регистрация: 27.10.2021
Сообщений: 33
13.02.2022, 22:40  [ТС]
Вы не представляете как сильно вы мне помогли, огромное вам спасибо! и моё почтение ) буду сидеть разбираться )
1
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
14.02.2022, 01:12
Чуть не забыл. С использованием встроенных средств для работы с датой и временем можно всё по-человечески и значительно короче написать.

Для Free Pascal:
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
uses
  DateUtils, Sysutils;
const
  mon: array[1..12] of string = ('January', 'February', 'March', 'April', 'May',
    'June', 'July', 'August', 'September', 'October', 'November', 'December');
  dow: array[1..7] of string = ('Sunday', 'Monday', 'Tuesday', 'Wednesday',
    'Thursday', 'Friday', 'Saturday');
var
  s: string;
  dt: TDateTime;
begin
  DateSeparator := ' ';
  write('Enter date: day month year: ');
  readln(s);
  Try
    dt := StrToDateTime(s);
  except
    writeln('Invalid date');
    readln;
    exit
  end;
  dt := IncDay(dt);
  writeln('Next day: ', DayOf(dt), ' ', mon[MonthOf(dt)], ' ', YearOf(dt), ', ', dow[DayOfWeek(dt)]);
  readln
end.
Для Pascal ABC.NET:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
##
  var mon: array[1..12] of string := ('января', 'февраля', 'марта', 'апреля', 
    'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
  var dow: array[System.DayOfWeek] of string := ('воскресенье', 'понедельник', 
    'вторник', 'среда', 'четверг', 'пятница', 'суббота');
  var (d, m, y) := ReadInteger3('Введите день номер месяца год:');
  var dt: DateTime;
  if DateTime.TryParse(m.ToString + '/' + d.ToString + '/' + y.ToString, dt) then
    begin
      dt := dt.AddDays(1);
      $'Следующая дата: {dt.Day} {mon[dt.Month]} {dt.Year} года, {dow[dt.DayOfWeek]}'.Print
    end
  else 'Неверная дата'.Print
Добавлено через 25 минут
Убрал лишнюю переменную из последней программы.
1
1 / 1 / 0
Регистрация: 15.10.2021
Сообщений: 17
15.02.2022, 10:13
@Cyborg Drone

Можете объяснить, пожалуйста, «где данные перечисляемого типа, где ввод номера дня недели? Так же не работы с данными перечисляемого типа» - цитирую вопросы моего преподавателя
Помогите ответить, если не затруднит. Либо доработать программу
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
15.02.2022, 12:04
Цитата Сообщение от sw1mmeRR Посмотреть сообщение
где данные перечисляемого типа,
См. type
Цитата Сообщение от sw1mmeRR Посмотреть сообщение
где ввод номера дня недели
Ну вот тут промашка!
Нехороший дяденька Cyborg Drone схитрил и сам рассчитал номер дня недели…

А, хотя, смотря какую программу вы своему преподавателю подсунули.
0
1 / 1 / 0
Регистрация: 15.10.2021
Сообщений: 17
16.02.2022, 13:13
Цитата Сообщение от JuriiMW Посмотреть сообщение
А, хотя, смотря какую программу вы своему преподавателю подсунули.
Ниже прекрепил программу, которую я отправил своему преподавателю. Но в итоге получил оценку "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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
type
  dw = (понедельник, вторник, среда, четверг, пятница, суббота, воскресенье);
  mon = (января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря);
var d, m, y, dim:integer;  
begin
  write('Введите дату: день номер месяца год: ');
  readln(d,m,y);
  if (m = 2) and (d >= 28) and ((y mod 400 <> 0) and (y mod 4 <> 0) or (y mod 100 = 0)) then d:=d+1;
  case m of
    1, 3, 5, 7, 8, 10, 12:dim:= 31;
    4, 6, 9, 11:dim:=30;
    2:dim:=29
    else dim:=0
  end;
  if (y>=1582) and (d in 1..dim) then
    begin
      d:=d+1;
      if d>dim then
        begin
          d:=1;
          m:=m+1;
        end;
      if m>12 then
        begin
          m:=1;
          y:=y+1;
        end;
      println;
      $'Дата следующего дня: {d} {mon(m-1)} {y},'.Print;
      var a := (14 - m) div 12;
      y := y - a;
      m := m + 12 * a - 2;
      Print(dw((d + (31 * m) div 12 + y + y div 4 - y div 100 + y div 400) mod 7-1))
    end
  else 'Дата неверная!'.
  println;
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
16.02.2022, 14:29
sw1mmeRR, я так и подумал.
Именно про это https://www.cyberforum.ru/post16071010.html
1
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
17.02.2022, 00:07
mixa200432, Вы часть задания написали в заголовке темы. Извините, не заметил. И Вы ввели меня в заблуждение. Мне казалось, что я делаю именно то, что Вам нужно.

Спасибо Вам, я немного повысил свой уровень скоростного набора текста.

И потерял немного времени.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2022, 00:07
Помогаю со студенческими работами здесь

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

Известна дата и день недели некоторого события. Определить, на какой день недели приходится начало года
Известна дата и день недели некоторого события. Определить, на какой день недели приходится начало года.

Известна дата и день недели некоторого события. Определить на какой день недели приходится начало года
Решил сделать посчитав все дни недели от введённого до 1 января. const days: array of string =...

Известна дата и день недели некоторого события. Определить на какой день недели приходится начало года
Известна дата и день недели некоторого события. Определить на какой день недели приходится начало года. Использовать множества и не...

Ввести с клавиатуры число, месяц, год, день недели. Вывести на экран дату и день недели для следующего дня.
Ввести с клавиатуры число, месяц, год, день недели. Вывести на экран дату и день недели для следующего дня.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru