Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 19
1

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

13.10.2014, 23:56. Показов 3177. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить дату следующего дня + день недели (с использованием перечисляемого типа).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2014, 23:56
Ответы с готовыми решениями:

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

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

По введенному номеру дня недели вывести название дня и определить, является день рабочим
Добрый вечер, нужна ваша помощь. (сам noob, Паскаль недавно начал учить) 1. В общем, есть задача ...

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

1
13 / 13 / 12
Регистрация: 09.09.2014
Сообщений: 29
14.10.2014, 12:13 2
Лучший ответ Сообщение было отмечено Coderr как решение

Решение

Пример:
Кликните здесь для просмотра всего текста

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
program calendr;
const
Sep:char='.';{Разделитель даты}
cDays:array[1..7] of string[12]=('Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье');
var
aMonth:array[1..12] of byte;{Количество дней в месяце}
Date:string;{Текущая дата}
Day,Month:byte;
Year:integer;
 
{Получение даты из строки}
function getDate(date:string;sep:char):boolean;
var
i,c:byte;{Счетчики}
err,p,tmpB:integer;{err-ошибки при приведении,p-позиция для copy}
tmpS:string;
flag:boolean;{Флаг ошибки}
begin
 getDate:=true;
 date:=date+sep; {Добавляем разделитель в конец строки}
 c:=0;
 p:=1;
 flag:=true;
 i:=0;
 repeat
  if (date[i]=sep) then
    begin
     tmpS:=copy(date,p,i-p);
     val(tmpS,tmpB,err);
     if err<>0 then {Возникли ошибки}
      begin
       getDate:=false;
       flag:=false;
      end
     else {Нет ошибки при приведении}
      begin
       case c of
        0:Day:=tmpB;
        1:Month:=tmpB;
        2:Year:=tmpB;
       else {Если в строке больше 3-х разделителей }
        begin
         getDate:=False;
         flag:=false;
        end;
       end;
       {Проверим корректность даты}
       if (c=2) and
       ((Month>12) or (Month<0) or (Day<0) or (Day>aMonth[Month])) then
        begin
         getDate:=false;
         flag:=false;
        end;
      end;
     inc(c);
     p:=i+1;
    end;
  i:=i+1;
  until (not flag) or (i>length(date));{Цикл}
 if c<2 then getDate:=false; {Если меньше 2-х разделителей в строке}
end;
 
procedure nextDay(var d:byte;var m:byte; var y:integer);
begin
{Конец года}
if (d=31) and (m=12) then
 begin
  d:=1;m:=1;y:=y+1;
 end
{Конец месяца}
else if (d=aMonth[m]) and (m<>12) then
 begin
  d:=1;
  m:=m+1;
 end
{Все остальные дни}
else d:=d+1;
end;
 
procedure nameDay(day:byte;month:byte;year:integer);
var
a,y,m,dW,i:integer;
begin
{Алгоритм действителен для григорианского календаря}
{Позднее 1583 года}
a:=(14-month) div 12;
y:=year-a;
m:=month+12*a-2;
dW:=(7000+(day+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7;
 
writeln(cDays[dW]);
 
 
end;
 
 
begin
aMonth[1]:=31;aMonth[2]:=29;aMonth[3]:=31;aMonth[4]:=30;
aMonth[5]:=31;aMonth[6]:=30;aMonth[7]:=31;aMonth[8]:=31;
aMonth[9]:=30;aMonth[10]:=31;aMonth[11]:=30;aMonth[12]:=31;
{Получить текущее число}
Writeln('Введите дату в формате dd',Sep,'mm',Sep,'yyyy');
readln(Date);
if getDate(Date,Sep) then
begin
 {Проверим високосный ли год}
 if not (((Year mod 100<>0) and (Year mod 4=0)) or (Year mod 400=0)) then
  aMonth[2]:=28;
  {Выводим следующий день}
  nextDay(Day,Month,Year);
  writeln('Следующий день:',Day,Sep,Month,Sep,Year);
  {Выводим день недели}
  nameDay(Day,Month,Year);
end
 else Writeln('Дата введена некорректно');
readln;
end.


Без использования перечисляемого типа.Не понимаю зачем он здесь нужен

Можно убрать функцию getDate. И заменить простым вводом 3 значений, а может и похожей функцией из других модулей(Не смотрел, но должны же они быть ).

*Алгоритм вычисления дня недели для любой даты григорианского календаря позднее 1583 года.(с)Вики
0
14.10.2014, 12:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2014, 12:13
Помогаю со студенческими работами здесь

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

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

По номеру дня года определить день недели
Дано целое число k(1 &lt;= k &lt;=365).Присвоить целочисленной величине n значение 1, 2,..6 или 0 в...

По номеру дня недели определить, рабочий это день или выходной
Написать программу которая запрашивает у пользователя номер дня недели и выводит одно из сообщений...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru