Автор: Amro 4.01.2004 0:31
Люди подкиньте идейку!!!!
Вот условие программы:
Цитата
Определить дату, которая наступит через m дней.
Таким образом из условия видно, что программа должна запрашивать месяц и дату, а также само число m... Но я не могу найти сам алгоритм решения этой задачи... а именно каким образом программа будет искать это число и месяц...
Саму прогу необходимо написать при помощи записи...
Автор: trminator 4.01.2004 1:00
вот без записей... куда их вставить, непонятно.
Дату берет сегодняшнюю
Код
uses DOS;
const days: array[1..12] of byte=(31,29,31,30,31,30,31,31,30,31,30,31);
var plus, Year, Month, Day,week_nr : word;
begin
GetDate(Year, Month, Day, week_nr);
ReadLn(plus);
while plus>days[month] do begin
dec(plus, days[month]);
inc(year,month+1 div 12);
month:=(month+1) mod 12;
end;
inc(day, plus);
if day > days[month] then begin
day:=day mod days[month];
inc(month)
end;
writeLn('Будет ',day,'.',month)
end.
Разве что вместо переменных year, month, day использовать запись date с теми же полями
Автор: Amro 4.01.2004 1:20
Неплохо!!! Спасибо!!! Но дело в том что дату должен вводить сам я, необязательно чтоб она была сегодняшняя(год не надо вводить, только число и месяц)!!! В принципе до такой программки я и сам бы додумался, но как действовать с записями, куда их совать я не догадываюсь...В результате действия программы она должна выводить на экран месяц и число, чтож в записи можно засунуть только месяца и ничего болеее.........Блин... не понимаю я... Но всё равно за идейку спасибо, попробую её усовершенствовать, авось что-нить и получится......
Автор: KRUTOY 4.01.2004 10:52
Код
record =
january:array [1..31] of integer;
...
december:array [1..31] of integer;
end;
можно конечно и попроще...вообще без записей.
а вместо GETDATA попробуй SETDATA--хотя я не пробывал;
в паскале есть специальный тип-запись--DATATIME--может это тебе поможет! ;)
Автор: Amro 4.01.2004 21:46
Всё!!! Вот окончательный вариант решения: (может кому пригодится!!)
Код
program lab7;
uses crt,dos;
type aa=array[1..12]of integer;
var q:char;
a:aa;
data:record
month:string[7];
day,year,months:word;
end;
j:integer;
week:word;
m:integer;
begin
repeat
clrscr;
a[1]:=31;
a[2]:=29;
a[3]:=31;
a[4]:=30;
a[5]:=31;
a[6]:=30;
a[7]:=31;
a[8]:=31;
a[9]:=30;
a[10]:=31;
a[11]:=30;
a[12]:=31;
getdate(data.year,data.months,data.day,week);
writeln('Введите число М через, которое вы хотите узнать дату:');
read(m);
j:=m;
while j<>0 do begin
if j>a[data.months]-data.day then begin
inc(data.months);
data.day:=1;
j:=j-a[data.months]+data.day
end
else begin data.day:=data.day+j; break;end;
end;
writeln('Дата дня: ',data.day,' месяц ',data.months);
end.
Спасибо всем помогающим!!!
Автор: ___ALex___ 5.01.2004 3:42
високосный год ещё никто не отменял вроде
Автор: trminator 5.01.2004 15:28
А тут год вообще не рассматривается, год считается текущим (високосным). Хотя если надо, это недолго...
Автор: Amro 6.01.2004 18:52
Млин........Ошибку в собственной программе нашёл!!!
(начиная с февраля все даты путаются!!!)
Код
while j<>0 do begin
if j>a[data.months]-data.day then begin
inc(data.months);
data.day:=1;
j:=j-a[data.months]+data.day { <--- }
end
else begin
data.day:=data.day+j; break;
end;
end;
Эту самую главную часть я написал неправильно!!!! (а вернее алгоритм не правильный мне посоветовали)
Правильно надо вот так:
Код
while j<>0 do begin
if j>a[data.months]-data.day then begin
j:=j-(a[data.months]-data.day)
inc(data.months);
data.day:=0;
end
else begin
data.day:=data.day+j; break;
end;
end;
В общем вот программа полностью, со всеми доработками, думаю кому-нибудь пригодится, ведь ВУЗах одни и те же лабы пишем!!! Сайту тоже пригодится!!
Код
program Lab8_02_2;
uses crt,dos;
var
q:char;
data:record
day,year,months:word;
end;
j:integer;
week:word;
m:integer;
g:word;
const
month:array[1..12] of string[7] =
('января','февраля','марта','апреля','мая','июня','июля',
'августа','сентябя','октября','ноября','декабря');
a:array[1..12] of integer =
(31,29,31,30,31,30,31,31,30,31,30,31);
begin
repeat
clrscr;
getdate(data.year,data.months,data.day,week);
g:=data.months;
writeln('Сегодняшняя дата: ',data.day,' ',month[g]);
writeln('введите число m через которое вы хотите узнать дату:');
read(m);
j:=m;
while j<>0 do begin
if j>a[data.months]-data.day then begin
j:=j-(a[data.months]-data.day);
inc(data.months);
data.day:=0;
end
else begin
data.day:=data.day+j; break;
end;
end;
g:=data.months;
writeln('Дата дня и месяц: ',data.day,' ',month[g] );
write('Вычислить еще ?(Y/N)');
q:=ReadKey;
until not (q in ['Y','y']);
end.