Anjin_Kazawa
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: Uses Crt; (*функция выводит сообщение и ждёт ввод*) (*проверка корректности ввода*) Function EnterAndMes( S: String ): Integer; var R : Integer; Err: Boolean; Begin Repeat Err := False; Write( S ); {$I-} ReadLn( R ); {$I+} if IOResult <> 0 then (*если ввели не целое число*) Begin Err := True; (*возникает ошибка преобразования*) WriteLn( 'Bag input value. Try again.' ); end; if R = 0 then Halt; (*ввели ноль - выход*) Until not Err; EnterAndMes := R; end; (*основная процедура рекурсии с подсчётом*) Procedure Recurse( EndYear : Integer; (*конечная дата*) var CurYear : Integer; (*текущая дата*) var YearsCount: Integer (*всего высокосных лет*) ); Begin if CurYear > EndYear then Exit; (*достигнут предел выход*) if ( CurYear mod 4 ) = 0 then Inc( YearsCount ); (*высокосный год*) Inc( CurYear ); (*текущий год*) Recurse( EndYear, CurYear, YearsCount ); (*вызод процедуры*) end; var YearsCount, StartYear, EndYear, CurYear: Integer; (*локальные переменные*) Begin ClrScr; StartYear := EnterAndMes( 'Start year (yyyy) (type 0 for exit) => ' ); EndYear := EnterAndMes( 'End year (yyyy) (type 0 for exit) => ' ); if StartYear > EndYear then Exit; CurYear := StartYear; YearsCount := 0; Recurse( EndYear, CurYear, YearsCount ); (*результат*) WriteLn( YearsCount ); end. | | Всего записей: 392 | Зарегистр. 08-06-2005 | Отправлено: 10:09 08-11-2006 | Исправлено: Anjin_Kazawa, 10:17 08-11-2006 |
|