С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/35: Рейтинг темы: голосов - 35, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 34
1

Напишите программу, определяющую количество дней между двумя заданными датами.

06.04.2011, 14:04. Показов 7174. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, определяющую количество дней между двумя
заданными датами.
Примечание: Года являются високосными, если обозначающие их
числа делятся на 4, за исключением тех, которые кратны 100. Среди
последних високосными являются только кратные 400. 1 января 1800 г. (по
новому стилю) была среда.
Входные данные: Для ввода дат использовать целочисленные
переменные: D- день, M – месяц, G – год.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2011, 14:04
Ответы с готовыми решениями:

Определить количество полных лет, прошедших между двумя заданными датами.
Определить количество полных лет, прошедших между двумя заданными датами.

Количество дней между двумя датами
Даны две даты текущего года. Сосчитать количество дней между этими двумя датами. Даты задаются...

В модуле создать функцию, определяющую количество дней, прошедших между двумя заданными датами
В одном модуле создать функцию, определяющую количество дней, прошедших между двумя заданными...

Определить количество дней между двумя заданными датами. Фортран 77
Написать программу, определяющую количество дней между двумя заданными датами. Решите...

6
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
06.04.2011, 14:33 2
Цитата Сообщение от Хомякирина Посмотреть сообщение
1 января 1800 г. (по
новому стилю) была среда.
Это зачем?
0
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 34
06.04.2011, 21:50  [ТС] 3
не знаю............
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
07.04.2011, 08:14 4
Ну давайте напишем так. Лучше бы конечно дату оформить в виде записи, меньше переменных, но у Вас по условию не так.
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
uses crt;
{опишем функцию определения високосного года}
function Visok(n:integer):boolean;
begin
if ((n mod 100<>0)and(n mod 4=0))or(n mod 400=0)
then Visok:=true else Visok:=false;
end;
{функцию определения количества дней, прошедших в текущем году}
function Dn_gd(g,m,d:integer):integer;
var k,k2:integer;
begin
if Visok(g)then k2:=60 else k2:=59;{количество дней январь+февраль}
case m of
1:k:=d;
2:k:=31+d;
3:k:=k2+d;
4:k:=k2+31+d;
5:k:=k2+61+d;
6:k:=k2+92+d;
7:k:=k2+122+d;
8:k:=k2+153+d;
9:k:=k2+184+d;
10:k:=k2+214+d;
11:k:=k2+245+d;
12:k:=k2+275+d;
end;
Dn_gd:=k;
end;
{функцию определения количества дней, прошедших между двумя датами}
function Kol_dn(g1,m1,d1,g2,m2,d2:integer):integer;
var k,i:integer;
begin
if g2=g1 then k:=Dn_gd(g2,m2,d2)-Dn_gd(g1,m1,d1)-1{если в одном году}
else if g2-g1=1 then{если в соседних}
 if Visok(g1)then k:=366-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1
 else k:=365-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1
else{все остальные}
 begin
  if Visok(g1)then k:=366-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1{сколько в самих годах}
  else k:=365-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1;
  for i:=g1+1 to g2-1 do{сколько в годах между ними}
  if Visok(i) then k:=k+366
  else k:=k+365;
 end;
Kol_dn:=k;
end;
{функция проверки правильного ввода дат}
function Prov(g,m,d:integer):boolean;
var k:integer;
begin
Prov:=true;
if(g<1800)or(g>2100){возьмем диапазон годов от 1800 до 2100, можете взять другой}
or not(m in [1..12])
or(d<1)or(d>31)
or((m in [4,6,9,11])and(d=31))
or((m=2)and Visok(g) and (d>29))
or((m=2)and not Visok(g) and (d>28))
then Prov:=false;
end;
var g0,m0,d0,g1,m1,d1,g2,m2,d2:word;
begin
g0:=1800;{нулевая дата}
m0:=1;
d0:=1;
repeat
writeln('Введите 2 даты в формате дд_мм_гггг вторая позднее:');
repeat
write(' дата 1 - ');
read(d1,m1,g1);
if not Prov(g1,m1,d1) then writeln('Ошибка, повторите ввод.');
until Prov(g1,m1,d1);
repeat
write(' дата 2 - ');
read(d2,m2,g2);
if not Prov(g2,m2,d2) then writeln('Ошибка, повторите ввод.');
until Prov(g2,m2,d2);
if Kol_dn(g0,m0,d0,g1,m1,d1)>Kol_dn(g0,m0,d0,g2,m2,d2) then
writeln('Вторая дата меньше первой, повторите ввод.');
until Kol_dn(g0,m0,d0,g1,m1,d1)<=Kol_dn(g0,m0,d0,g2,m2,d2);
writeln('Между этими датами(исключая их) прошло ',Kol_dn(g1,m1,d1,g2,m2,d2),' дн.');
end.
2
1 / 1 / 0
Регистрация: 13.10.2011
Сообщений: 4
13.10.2011, 19:34 5
спасибо Puporev!!! оч большое)))
1
9 / 9 / 6
Регистрация: 15.05.2010
Сообщений: 184
08.03.2012, 00:07 6
При вводе дат: "12 02 2002" и "12 02 2004" выдает: 719 дней.
При вводе: "1 02 2002" и "1 02 2004" выдает 730 дней.
Кто знает в чем проблема и как исправить?
Или это программа правильно работает только на паскале ABC? Если да-можете сделать на турбо паскале?
Миниатюры
Напишите программу, определяющую количество дней между двумя заданными датами.  
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
08.03.2012, 09:19 7
Просто в коде опечатки в строках 39,40, там вместо d2 написано m1, нужно так
Pascal
1
2
if Visok(g1)then k:=366-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,m1)-1{сколько в самих годах}
  else k:=365-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,m1)-1;
А вообще программа суррогат, написана была в Турбо Паскале, потом кое-что выкинуто и получился бардак, и в простом АВС не запустится из-за типа word.
Вариант для Турбо Паскаля.
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
uses crt;
{опишем функцию определения високосного года}
function Visok(n:word):boolean;
begin
if ((n mod 100<>0)and(n mod 4=0))or(n mod 400=0)
then Visok:=true else Visok:=false;
end;
{функцию определения количества дней, прошедших в текущем году}
function Dn_gd(g,m,d:word):word;
var k,k2:word;
begin
if Visok(g)then k2:=60 else k2:=59;{количество дней январь+февраль}
case m of
1:k:=d;
2:k:=31+d;
3:k:=k2+d;
4:k:=k2+31+d;
5:k:=k2+61+d;
6:k:=k2+92+d;
7:k:=k2+122+d;
8:k:=k2+153+d;
9:k:=k2+184+d;
10:k:=k2+214+d;
11:k:=k2+245+d;
12:k:=k2+275+d;
end;
Dn_gd:=k;
end;
{функцию определения количества дней, прошедших между двумя датами}
function Kol_dn(g1,m1,d1,g2,m2,d2:word):longint;
var k:longint;
    i:word;
begin
if g2=g1 then k:=Dn_gd(g2,m2,d2)-Dn_gd(g1,m1,d1)-1{если в одном году}
else if g2-g1=1 then{если в соседних}
 if Visok(g1)then k:=366-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1
 else k:=365-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1
else{все остальные}
 begin
  if Visok(g1)then k:=366-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1{сколько в самих годах}
  else k:=365-Dn_gd(g1,m1,d1)+Dn_gd(g2,m2,d2)-1;
  for i:=g1+1 to g2-1 do{сколько в годах между ними}
  if Visok(i) then k:=k+366
  else k:=k+365;
 end;
Kol_dn:=k;
end;
{функция проверки правильного ввода дат}
function Prov(g,m,d:word):boolean;
var k:byte;
begin
Prov:=true;
if(g<1800)or(g>2100){возьмем диапазон годов от 1800 до 2100, можете взять другой}
or not(m in [1..12])
or(d<1)or(d>31)
or((m in [4,6,9,11])and(d=31))
or((m=2)and Visok(g) and (d>29))
or((m=2)and not Visok(g) and (d>28))
then Prov:=false;
end;
var g0,m0,d0,g1,m1,d1,g2,m2,d2:word;
begin
clrscr;
g0:=1800;{нулевая дата}
m0:=1;
d0:=1;
repeat
writeln('Введите 2 даты в формате дд_мм_гггг вторая позднее:');
repeat
write(' дата 1 - ');
readln(d1,m1,g1);
if not Prov(g1,m1,d1) then writeln('Ошибка, повторите ввод.');
until Prov(g1,m1,d1);
repeat
write(' дата 2 - ');
readln(d2,m2,g2);
if not Prov(g2,m2,d2) then writeln('Ошибка, повторите ввод.');
until Prov(g2,m2,d2);
if Kol_dn(g0,m0,d0,g1,m1,d1)>Kol_dn(g0,m0,d0,g2,m2,d2) then
writeln('Вторая дата меньше первой, повторите ввод.');
until Kol_dn(g0,m0,d0,g1,m1,d1)<=Kol_dn(g0,m0,d0,g2,m2,d2);
writeln('Между этими датами(исключая их) прошло ',Kol_dn(g1,m1,d1,g2,m2,d2),' дн.');
readln;
end.
В том посте где для АВС тоже код исправил.
2
08.03.2012, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2012, 09:19
Помогаю со студенческими работами здесь

Написать программу, считающую кол-во дней между двумя заданными датами!
Помогите новичку!!! Нужно написать программу, позволяющую сосчитать количество дней между двумя...

Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY,включая начальный и конечный день.
Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY,включая начальный и...

Количество дней между двумя датами
Здравствуйте, у меня есть неполный код от задачи: Найти количество дней между двумя датами. можете...

Количество дней между двумя датами
Хочу спросить кто знает как найти количество дней между двумя датами. ПРИМЕР input ...


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

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