Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 640

/ вопрос открыт /

Здравствуйте, эксперты!
Есть код программы, которая по заданной дате должна рассчитать год и написать високосный он или нет. В Делфи пока ещё новичок.
Вот я набрал код... Но компилятор выдает несколько ошибок и я не могу понять в чем дело? Подскажите, в чем ошибки? Код прилагаю и ошибки в виде скрина.
И второй вопрос - как можно уменьшить эту программу? чтобы она выполняла те же функции, но кода было меньше? (методом подпрограмм может)?
Помогите пожалуйста. Что не так в этом коде?

Приложение:
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs; StdCtrls;
  8.  
  9. type
  10. TForm2 = class(TForm)
  11. Edit1: TEdit;
  12. Edit2: TEdit;
  13. Button1: TButton;
  14. procedure Button1Click(Sender: TObject);
  15. private
  16. { Private declarations }
  17. public
  18. { Public declarations }
  19. end;
  20.  
  21. function CheckNum(Sd, Sm, Sy: String; var Day, <onth, Year: Integer): Boolean;
  22. procedure ReadData(S: string; var Sd, Sm, Sy: string);
  23. function VisYear (Year: Integer): Boolean;
  24.  
  25. var
  26. Form2: TForm2;
  27. i: Integer;
  28. Res: LongInt;
  29.  
  30.  
  31. implementation
  32.  
  33. {$R *.dfm}
  34.  
  35.  
  36. procedure ReadData(S: String; var Sd, Sm, Sy: String);
  37. var
  38. i, p: Integer;
  39. begin
  40. i := 0;
  41. while length (S) > 0 do begin
  42. p := Pos ('.', S);
  43. if p > 0 then begin
  44. case i of
  45. 0: Sd := Copy(S, 1, p-1);
  46. 1: Sm := Copy(S, 1, p-1);
  47. end:
  48. Delete(S, 1, p);
  49. end else begin
  50. case i of
  51. 2: Sy := S;
  52. end;
  53. S := '';
  54. end;
  55. Inc(i);
  56. end:
  57. end;
  58.  
  59. function CheckNum (Sd, Sm, Sy: String; var Day, Month, Year: Integer); Boolean;
  60. begin
  61. CheckNum := True;
  62. try
  63. Day := StrToInt (Sd);
  64. except
  65. CheckNum := False;
  66.  
  67. end;
  68.  
  69. try
  70. Month := StrToInt (Sm);
  71. except
  72. CheckNum := false;
  73.  
  74. end;
  75.  
  76. try
  77. Year := StrToInt(Sy);
  78. except
  79. CheckNum := false;
  80.  
  81. end;
  82. end;
  83.  
  84. function VisYear(Year: Integer): Boolean;
  85. begin
  86. if ( ((Year mod 4 = 0)and(Year mod 100 <> 0)) or
  87. (Year mod 400 = 0) )
  88.  
  89. else VisYear := False;
  90. end;
  91.  
  92. procedure TForm2.Button1Click(Sender: TObject);
  93. var
  94. i, p: Integer;
  95. FDay, FMonth, FYear, Tday, Tmonth, TYear: Integer:
  96. S, Sd, Sm, Sy: string;
  97. Code: Integer;
  98. MaxD: Integer;
  99. begin
  100.  
  101. S :=Edit1.Text;
  102. i:=0;
  103. ReadData(S, Sd, Sm, Sy);
  104.  
  105. end;
  106. if CheckNum(Sd, Sm, Sy, FDay, FMonth, FYear) then begin
  107.  
  108. if (FMonth <= 0) or (FMonth > 12) then begin
  109.  
  110. Exit;
  111. end;
  112. case FMonth of
  113. 1,3,5,7,8,10,12: MaxD:=31;
  114. 4,6,9,11: MaxD:=30;
  115. 2: if ( ((FYear mod 4 = 0)and(FYear mod 100 <>0)) or
  116. (FYear mod 400 = 0) )
  117.  
  118. else MaxD:=28;
  119. end;
  120. if ((FDay <= 0) or (FDay > MaxD)) then begin
  121.  
  122. Exit;
  123. end;
  124. end;
  125.  
  126.  
  127. S := Edit2.Text;
  128. ReadData(S, Sd, Sm, Sy);
  129.  
  130.  
  131. if CheckNum(Sd, Sm, Sy, Tday, TMonth, TYear) then begin
  132.  
  133. if(Tmonth <=0) or (Tmonth >12) then begin
  134.  
  135. Exit;
  136. end;
  137. case Tmonth of
  138. 1,3,5,7,8,10,12: MaxD:=31;
  139. 4,6,9,11: MaxD:=30;
  140. 2: if ( ((TYear mod 4 = 0)and( TYear mod 100 <>0)) or
  141. (TYear mod 400 = 0) )
  142.  
  143. else MaxD:=28;
  144. end;
  145. if ((Tday <= 0) or (Tday > MaxD)) then begin
  146.  
  147. Exit;
  148. end;
  149. end;
  150. end;
  151.  
  152. end.
  153.  
  154.  
  155.  
  156.  


Zebra Head Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Zebra Head (статус: Посетитель)
Вопрос отправлен: 1 декабря 2016, 17:26
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 1 декабря 2016, 18:09; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 1 декабря 2016, 18:01 [#1]:

не надо так вопросы задавать.
Как звучит оригинал задания?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

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

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 23 июня 2017, 09:51
Выполнено за 0.08 сек.
Рейтинг@Mail.ru