|
|
|
| На Delphi надо написать такую программу.
Вводится номер года. Через сколько лет календарь заданного года повторится (для решения этой задачи заметим, что в случае, когда год невисокосный, 1 января следующего года сдвигается на 1 день недели, а если год високосный - то на 2. Календарь повторится, если найденный год начинается с того же дня недели и имеет ту же високосность, что и исходный).
Синаксис кода правельный, но прога уходит в бесконечный цыкл. хотя стоят чёткие ограничения.
код
procedure TForm1.CalButtonClick(Sender: TObject);
var year, d1, ves, ves1, ves2:integer; //Objavlenije peremennih
begin
year:=StrToInt(YearEdit.Text);
if year mod 4 = 0 then //Proverjajem god na vesokostnostj
ves:=1
else
ves:=0;
ves1:=ves;
d1:=0;
repeat
begin
year:=year+1;
if year mod 4 = 0 then
ves2:=1
else
ves2:=0;
if (5>d1) and (ves2=1) or (6>d1) and (ves2=0) then //Prohodim nedelju
d1:=0;
d1:=d1+ves1+ves2+1;
ves1:=0;
end;
until (d1=0) and (ves=ves2);
NYearEdit.Text:=IntToStr(year);
end;
end.
|
| |
|
|
|
|
|
|
|
для: ODM
(17.11.2006 в 11:22)
| | Вот весь проект. | |
|
|
|
|
|
|
|
для: ODM
(17.11.2006 в 11:22)
| | високосность года это не просто кратность его номера четверке.
Как минимум сейчас действует правило, в котором год считается високосным если
1. N кратно 400
либо
2. N кратно 4, но при этом некратно 100 | |
|
|
|
|
|
|
|
для: Trianon
(17.11.2006 в 11:50)
| | С кратностью 400 тоже непомогло, и некратности 100 тоже, всё тотже вечный цыкл. | |
|
|
|
|
|
|
|
для: ODM
(17.11.2006 в 12:03)
| | Ну d1 в проверке никогда не будет =0, и вообще, условие if (5>d1) and (ves2=1) or (6>d1) and (ves2=0) then d1:=0; неправильно. | |
|
|
|
|
|
|
|
для: 12345
(17.11.2006 в 13:29)
| | Спасибо! Помогло. Исправил работает. | |
|
|
|