|
Вопрос # 6 640/ вопрос открыт / |
|
Здравствуйте, эксперты!
Есть код программы, которая по заданной дате должна рассчитать год и написать високосный он или нет. В Делфи пока ещё новичок.
Вот я набрал код... Но компилятор выдает несколько ошибок и я не могу понять в чем дело? Подскажите, в чем ошибки? Код прилагаю и ошибки в виде скрина.
И второй вопрос - как можно уменьшить эту программу? чтобы она выполняла те же функции, но кода было меньше? (методом подпрограмм может)?
Помогите пожалуйста. Что не так в этом коде?
Приложение: Переключить в обычный режим- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs; StdCtrls;
-
- type
- TForm2 = class(TForm)
- Edit1: TEdit;
- Edit2: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- function CheckNum(Sd, Sm, Sy: String; var Day, <onth, Year: Integer): Boolean;
- procedure ReadData(S: string; var Sd, Sm, Sy: string);
- function VisYear (Year: Integer): Boolean;
-
- var
- Form2: TForm2;
- i: Integer;
- Res: LongInt;
-
-
- implementation
-
- {$R *.dfm}
-
-
- procedure ReadData(S: String; var Sd, Sm, Sy: String);
- var
- i, p: Integer;
- begin
- i := 0;
- while length (S) > 0 do begin
- p := Pos ('.', S);
- if p > 0 then begin
- case i of
- 0: Sd := Copy(S, 1, p-1);
- 1: Sm := Copy(S, 1, p-1);
- end:
- Delete(S, 1, p);
- end else begin
- case i of
- 2: Sy := S;
- end;
- S := '';
- end;
- Inc(i);
- end:
- end;
-
- function CheckNum (Sd, Sm, Sy: String; var Day, Month, Year: Integer); Boolean;
- begin
- CheckNum := True;
- try
- Day := StrToInt (Sd);
- except
- CheckNum := False;
-
- end;
-
- try
- Month := StrToInt (Sm);
- except
- CheckNum := false;
-
- end;
-
- try
- Year := StrToInt(Sy);
- except
- CheckNum := false;
-
- end;
- end;
-
- function VisYear(Year: Integer): Boolean;
- begin
- if ( ((Year mod 4 = 0)and(Year mod 100 <> 0)) or
- (Year mod 400 = 0) )
-
- else VisYear := False;
- end;
-
- procedure TForm2.Button1Click(Sender: TObject);
- var
- i, p: Integer;
- FDay, FMonth, FYear, Tday, Tmonth, TYear: Integer:
- S, Sd, Sm, Sy: string;
- Code: Integer;
- MaxD: Integer;
- begin
-
- S :=Edit1.Text;
- i:=0;
- ReadData(S, Sd, Sm, Sy);
-
- end;
- if CheckNum(Sd, Sm, Sy, FDay, FMonth, FYear) then begin
-
- if (FMonth <= 0) or (FMonth > 12) then begin
-
- Exit;
- end;
- case FMonth of
- 1,3,5,7,8,10,12: MaxD:=31;
- 4,6,9,11: MaxD:=30;
- 2: if ( ((FYear mod 4 = 0)and(FYear mod 100 <>0)) or
- (FYear mod 400 = 0) )
-
- else MaxD:=28;
- end;
- if ((FDay <= 0) or (FDay > MaxD)) then begin
-
- Exit;
- end;
- end;
-
-
- S := Edit2.Text;
- ReadData(S, Sd, Sm, Sy);
-
-
- if CheckNum(Sd, Sm, Sy, Tday, TMonth, TYear) then begin
-
- if(Tmonth <=0) or (Tmonth >12) then begin
-
- Exit;
- end;
- case Tmonth of
- 1,3,5,7,8,10,12: MaxD:=31;
- 4,6,9,11: MaxD:=30;
- 2: if ( ((TYear mod 4 = 0)and( TYear mod 100 <>0)) or
- (TYear mod 400 = 0) )
-
- else MaxD:=28;
- end;
- if ((Tday <= 0) or (Tday > MaxD)) then begin
-
- Exit;
- end;
- end;
- end;
-
- end.
-
-
-
-
 |
Вопрос задал: Zebra Head (статус: Посетитель)
Вопрос отправлен: 1 декабря 2016, 17:26
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 1 декабря 2016, 18:09; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 1 декабря 2016, 18:01 [#1]:
не надо так вопросы задавать.
Как звучит оригинал задания?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DNK (статус: Студент), 1 декабря 2016, 18:04 [#2]:
Скрина в упор не вижу. Как минимум не те скобки выбраны для комментариев.
"Digital Networked Knight"
|
|
Леонид (статус: 1-ый класс), 1 декабря 2016, 18:09 [#3]:
function IsLeapYear(Year: Word): Boolean;
begin
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;
Вот все!
Это смотрите в Delphi модуль System.SysUtils
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|