IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> помогите плиз, дата
Client
сообщение 6.11.2007 15:39
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


М
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
- klem4


Дана дата, есди она правильная то выдать дату, которая была К дней назад.
если было бы вперед на к дней то ото было бы легче, а здесь...
пробовал сам ... результат не совпадает иногда на 2 иногда 1или 3 дня
пробовал менять условие, еще хуже.
uses crt;
var
den,den2,mes,mes2,dmax,mmax:byte;
god,k:integer;
begin
clrscr;
write(' Vvedite den ');
readln(den);
write(' Vvedite mes ');
read(mes);
write(' Vvedite god ');
read(god);
case mes of
1,3,5,7,8,10,12: dmax:=31;{определяю макс дату}
4,5,9,11: dmax:=30;
2: if god mod 4=0 then
dmax:=29
else
dmax:=28;
else;
end;
if (den in[1..dmax]) and (mes in[1..12]) and (god>0) then
writeln(' Data OK')
else
begin
writeln(' Data NO');
readkey;
halt
end;
write(' Vvedite k ');
read(k);
mes2:=mes-1;
repeat
if k> den then
begin
case mes2 of
1,3,5,7,8,10,12: dmax:=31; {макс дата предыдущ месяца}
4,6,9,11: dmax:=30;
2: if god mod 4=0 then
dmax:=29
else
dmax:=28;
else;
end;
if mes2=1 then
begin
mes2:=12;
dec(god)
end
else
dec(mes2);
k:=k-den;
den:=dmax;
end
until k<den;
den:=den - k;
writeln(' ',den,':',mes,':',god);
readkey
end.

Заранее большое спасибо)

Сообщение отредактировано: Lapp - 8.11.2007 2:12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
volvo
сообщение 6.11.2007 16:15
Сообщение #2


Гость






Цитата
было бы вперед на к дней то ото было бы легче
Чем? Метод решения один и тот же: подсчитать номер дня в году для текущей даты, отнять (или прибавить K дней), и подсчитать по номеру нового дня его дату...

У тебя в программе по меньшей мере одна ошибка - в вычислении високосности года... Того, что ты сделал недостаточно. Ищи по форуму, корректная функция IsLeap уже выкладывалась.

Сообщение отредактировано: volvo - 6.11.2007 16:16
 К началу страницы 
+ Ответить 
Client
сообщение 6.11.2007 16:19
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


вот вроде решил)


Сообщение отредактировано: Client - 6.11.2007 19:10


Прикрепленные файлы
Прикрепленный файл  DATA_NAZ.PAS ( 2.14 килобайт ) Кол-во скачиваний: 164
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.11.2007 19:41
Сообщение #4


Гость






Цитата
вроде решил)
И что это такое? Она ж у тебя даже не компилируется нормально (ну, допустим, TP ее компилирует без ошибок, но это не значит, что тут:

Цитата
     case mes of
1,3,5,7,8,10,12: dmax:=31;
4,5,9,11: dmax:=30;
2: if god mod 4=0 then
dmax:=29
else
dmax:=28;
else;
end;

нет ошибки... Пятерка присутствует в двух метках)

И с високосностью года ты проблему не решил... Вот так она определяется:
function isLeap(n: word): boolean;
begin
isLeap := ((n mod 4) = 0) and
not (((n mod 100) = 0) and ((n mod 400) <> 0))
end;
Как результат - программа кажется работающей, но первая же более глубокая проверка выявит баги...
 К началу страницы 
+ Ответить 
Client
сообщение 6.11.2007 19:53
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


насчет пятерки-опечатка))
вот исправлено
(вообщем то результат правильный я не нашел ошибки на примерах)
если ее так сдавать она не слишком "навороченная"?

Сообщение отредактировано: Client - 6.11.2007 19:57


Прикрепленные файлы
Прикрепленный файл  DATA2.PAS ( 2.32 килобайт ) Кол-во скачиваний: 161
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 7.11.2007 16:41
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


были найдены глюки... и теперь они иправлены.
дату проверял до 2000 дней с интервалами по 50 дней
теперь работает идеально
даже если год до нашей эры
Спасибо volvo за идею!!!

Сообщение отредактировано: Client - 7.11.2007 19:26


Прикрепленные файлы
Прикрепленный файл  DATA_OK.PAS ( 2.92 килобайт ) Кол-во скачиваний: 192
Прикрепленный файл  DATA_OK.PAS ( 2.92 килобайт ) Кол-во скачиваний: 190
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 18.11.2007 10:39
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


А как можно определить какой день недели будет через К дней назад?
Пробовал сделать по отношению к 1.1.2000 года, это была суббота, но получается не правильно.
Подкиньте идею плиз

Сообщение отредактировано: Client - 18.11.2007 10:40
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 14:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"