1) Как вычислить конечную дату ? Задача: У Васи Пупкина неожиданно сломался компьютер. Из-за отсутствия нужных материалов на ремонт понадобится N дней. Определите дату окончания ремонта, если известно, что компьютер сломался в текущем году, и ремонт должен закончиться тоже в этом году...
Function GetInteger(s: String): Integer; Var i, Err: Integer; Begin If s[1] = '0' Then Delete(s, 1, 1); Val(s, i, Err); GetInteger := i End;
(* { Тестировалось с этими данными } Const Repair: Integer = 50; st: String = '21.06'; *) Var Day, Month, DaysBefore: Integer; p, i: Byte; Var Repair: Integer; st: String; begin Inc(DayInMonth[2], Byte((CurrYear mod 4) = 0) and not (((CurrYear mod 100) = 0) and ((CurrYear mod 400) <> 0)); Write('Дата поломки > '); ReadLn(st); Write('Длительность ремонта > '); ReadLn(Repair);
p := Pos('.', st); Day := GetInteger( Copy(st, 1, Pred(p)) ); Month := GetInteger( Copy(st, Succ(p), Length(st)-p) );
For i := 1 To Pred(Month) Do Inc(DaysBefore, DayInMonth[i]); Inc(DaysBefore, Day);
Inc(DaysBefore, Repair); i := 1; While DaysBefore > DayInMonth[i] Do Begin Dec(DaysBefore, DayInMonth[i]); Inc(i) End; WriteLn('Ремонт закончится: ', DaysBefore, '.', i); end.
by Volvo
Еще один вариант
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.
by Amro
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
Набор функций для работы с датами и вычислений по календарю. Автор: Виктор Осташев Fido: 2:5020/1194 E-mail: v_ostashev@chat.ru WWW: _http://ostashev.newmail.ru }
function datein(low, high, dt : tdate) : boolean; { Проверяет нахождение даты в промежутке между low и high }
procedure stringtodate(st : string; var dt : tdate); { Преобразует строку в дату }
procedure datetostring(dt : tdate; var st : string); { Преобразует дату в строку }
function compdate(d1, d2 : tdate) : integer; { Сравнивает две даты. Возвращает: 0, если даты равны; -1, если первая дата меньше второй; 1, если вторая дата меньше первой }
function numofday(dat : tdate; style : tstyle) : longint; { Вычисляет условный номер дня для даты dat с учетом нового стиля при style=true }
function dayofweek(dat : tdate; style : tstyle) : byte; { Вычисляет день недели для даты dat с учетом нового стиля при style=true }
function numinyear(dat : tdate; style : tstyle) : word; { Вычисляет номер дня от начала года с учетом стиля }
function lenofmonth(month: byte; year: word; style: tstyle): byte; { Вычисляет длину месяца с учетом стиля }
procedure numtodate(num: longint; style: tstyle; var dat: tdate); { Вычисляет дату по данному номеру дня }
function isleap(year : integer):boolean; { Является ли год високосным }