Добавить процедуру в готовую программу - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Помогите надо в эту программу добавить процедуру создать процедуру поиска и вывода сотрудниц страше 50 лет.
Листинг программы
  1. program Kursova;
  2. uses crt;
  3. type
  4. Data=record
  5. Day:1..31;
  6. Month:1..12;
  7. Year:integer;
  8. end;
  9. TOtdel=record
  10. ffam:string[25];
  11. BDate:Data;
  12. fpol:char;
  13. end;
  14. var
  15. Zap:TOtdel;
  16. Mas:array [1..40] of TOtdel;
  17. vibor:Byte;
  18. n,t:Integer;
  19. fami:string[25];
  20. f:file of TOtdel;
  21. procedure vvod;
  22. var
  23. i: integer;
  24. begin
  25. Assign(f, 'kursov.dat');
  26. rewrite(f);
  27. Write('Введите количество работников: ');
  28. readln(n);
  29. for i := 1 to n do
  30. begin
  31. writeln('Введите', ' ', i, ' ', 'работника');
  32. write('Введите фамилию работника: ');
  33. readln(Zap.ffam);
  34. write('Введите число от 1 - 31: ');
  35. readln(Zap.BDate.Day);
  36. write('Введите месяц от 1 - 12: ');
  37. readln(Zap.BDate.month);
  38. Write('Введите год рождения: ');
  39. readln(Zap.BDate.year);
  40. Write('Введите пол работника(м;ж): ');
  41. readln(Zap.fpol);
  42. write(f, Zap);
  43. end;
  44. close(f);
  45. end;
  46. procedure Readf;
  47. var
  48. i: integer;
  49. begin
  50. clrscr;
  51. assign(f, 'kursov.dat');
  52. reset(f);
  53. i := 1;
  54. while not (eof(f)) do
  55. begin
  56. read(f, Mas[i]);
  57. Writeln(i:4,' ',Mas[i].fpol,' ',Mas[i].ffam:15, ' ', ' ',Mas[i].BDate.Day, '.',Mas[i].BDate.month,'.',Mas[i].BDate.year);
  58. i := i + 1;
  59. end;
  60. close(f);
  61. n := i - 1;
  62. writeln(n);
  63. end;
  64. {----------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
  65. procedure Add;
  66. var
  67. i: integer;
  68. begin
  69. clrscr;
  70. rewrite(f);
  71. for i := 1 to n do
  72. write(f, Mas[i]); //Записываем в массив записей
  73. Writeln('Введите ', ' ', n + 1, ' ', 'работника');
  74. write('Введите фамилию работника: '); readln(Zap.ffam);
  75. write('Введите число от 1 - 31: '); readln(Zap.BDate.Day);
  76. write('Введите месяц от 1 - 12: ');
  77. readln(Zap.BDate.month);
  78. Write('Введите год рождения: ');
  79. readln(Zap.BDate.year);
  80. Write('Введите пол работника(м;ж): '); readln(Zap.fpol);
  81. writeln;
  82. write(f, Zap);
  83. close(f);
  84.  
  85. end;
  86. {--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
  87. procedure delete;
  88. var
  89. i: integer;
  90. begin
  91. clrscr;
  92. i := 1;
  93. assign(f, 'kursov.dat');
  94. reset(f);
  95.  
  96. while not eof(f) do
  97. begin
  98. read(f, Mas[i]);
  99. i := i + 1
  100. end;
  101. close(f);
  102. write('Выберите номер удаляемой записи которую вы хотите: ');
  103. readln(n);
  104. reset(f);
  105. seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
  106. read(f, Mas[i]);
  107. seek(f, n - 1); { Ставим указатель перед удаляемым файлом }
  108. write(f, Mas[i]);{ Записываем конечный компонент вместо удаляемого }
  109. { убираем последний элемент файла }
  110. seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
  111. truncate(f);{ Отсекаем последний компонент }
  112. Writeln('Удаление прошло успешно!!!');
  113. Writeln('Количество записей ',n-1);
  114. end;
  115. //-----------------------------------------------------------------------
  116. procedure Search;
  117. begin
  118. clrscr;
  119. write('Введите фамилию работника которого надо искать: ');
  120. readln(fami);
  121. reset(f);
  122. t := 0;
  123. while not eof(f) do
  124. begin
  125. read(f, Zap);
  126. if Zap.ffam = fami then{если фамилия совпала}
  127. begin
  128. t := 1;{фиксируем}
  129. writeln('Найдент работник с такой фамилией!!!');
  130. Writeln('Выводим запись');
  131. Writeln(Zap.ffam:15,' ', Zap.fpol, ' ', Zap.BDate.Day,'.', Zap.BDate.month, '.', Zap.BDate.year);
  132. end;
  133. end;
  134. if t = 0 then writeln('Такого работника нету!!!');{если нет совпадений}
  135. close(f);
  136. end;
  137. //-----------------------------------
  138. procedure vivod;
  139. var
  140. i:integer;
  141. maxID:integer;
  142. begin
  143. clrscr;
  144. Writeln('Вывод старшего мужчины!');
  145. maxId:=1;
  146. for i:=2 to n do
  147. if (mas[i].fpol='м')and(mas[i].BDate.Year > mas[maxID].BDate.Year) then
  148. maxId := i
  149. else
  150. if(mas[i].fpol='м')and (mas[i].BDate.Month < mas[maxID].BDate.Month) then
  151. maxId := i
  152. else
  153. if(mas[i].fpol='м')and (mas[i].BDate.Day < mas[maxID].BDate.Day) then
  154. maxID := i;
  155. WriteLn('//--------------------------------------------------------');
  156. with mas[maxID] do
  157. begin
  158. Writeln('Самый старший мужчина');
  159. WriteLn('Surname: ', ffam);
  160. WriteLn('Date: ', BDate.Day, '.', BDate.Month, '.', BDate.Year);
  161. WriteLn('Pol: ',fpol, '-(мужчина)');
  162. end;
  163. end;
  164.  
  165. //-------------------------------------------------------------------------------------------------------------
  166. procedure vivod2;
  167. var
  168. i:integer;
  169. c:char;
  170. k:boolean;
  171. begin
  172. clrscr;
  173. Write('Введите букву фамилии: ');readln(c);
  174. k:=false;
  175. for i:=1 to n do begin
  176. if (mas[i].ffam[1]=c) then
  177. Writeln(Mas[i].ffam:15,' ', 'пол: ',Mas[i].fpol, ' ', Mas[i].BDate.Day,'.', Mas[i].BDate.month, '.', Mas[i].BDate.year);
  178. k:=false;
  179. end;
  180. if (k=true)or(mas[i].ffam[1]<>c) then writeln('Список людей не найдены по заданной букве!');
  181. end;
  182. //---------------------------------------------------------------------------------------------------------------
  183. procedure vivod3;
  184. var m:integer;
  185. i:integer;
  186. key:boolean;
  187. begin
  188. clrscr;
  189. Write('Введите месяц рождения: '); readln(m);
  190. key:=true;
  191. for i:=1 to n do begin
  192. if (mas[i].BDate.Month=m) then begin
  193. Writeln(Mas[i].ffam:15,' ', Mas[i].fpol, ' ',Mas[i].BDate.month);
  194. key:=true;
  195. end;end;
  196. if (key=false)or(mas[i].BDate.Month<>m) then Writeln('Список людей родившихся в этом месяце нет!');
  197. end;
  198. begin
  199. clrscr;
  200. Writeln('Выберите действия:');
  201. Writeln('1 - Ввод данных в файл');
  202. Writeln('2 - Чтение с файла');
  203. Writeln('3 - Добавление в файл');
  204. Writeln('4 - Удаление записи');
  205. Writeln('5 - Поиск информации');
  206. Writeln('6 - Вывод старшего работника');
  207. Writeln('7 - Фамилии начинающиеся с заданной буквы');
  208. Writeln('8 - Cписок людей родившихся в заданном месяце');
  209. Writeln('9 - Выход');
  210. Readln(vibor);
  211. while vibor<9 do
  212. begin
  213. case vibor of
  214. 1:vvod;
  215. 2:ReadF;
  216. 3:Add;
  217. 4:delete;
  218. 5:Search;
  219. 6:vivod;
  220. 7:vivod2;
  221. 8:vivod3;
  222. end;
  223. writeln;
  224. Writeln('Выберите действия от 1-9:');
  225. Writeln('1 - Ввод данных в файл');
  226. Writeln('2 - Чтение с файла');
  227. Writeln('3 - Добавление в файл');
  228. Writeln('4 - Удаление записи');
  229. Writeln('5 - Поиск информации');
  230. Writeln('6 - Вывод старшего работника');
  231. Writeln('7 - Фамилии начинающиеся с заданной буквы');
  232. Writeln('8 - Cписок людей родившихся в заданном месяце');
  233. Writeln('9 - Выход');
  234. readln(vibor);
  235. end;
  236.  
  237. end.

Решение задачи: «Добавить процедуру в готовую программу»

textual
Листинг программы
  1. uses
  2.     Utils;
  3. procedure Search50;
  4. var
  5.     i: Byte;
  6.     function IsOlder50(d: Data): Boolean;
  7.     var
  8.         dd: DateTime;
  9.         Result: Boolean;
  10.     begin
  11.         dd := CurrentDateTime;
  12.         if (dd.Year - d.Year > 50)
  13.         then
  14.             Result := True
  15.         else
  16.             if (dd.Year - d.Year < 50)
  17.             then
  18.                 Result := False
  19.             else
  20.                 if (dd.Month > d.Month)
  21.                 then
  22.                     Result := True
  23.                 else
  24.                     if (dd.Month < d.Month)
  25.                     then
  26.                         Result := False
  27.                     else
  28.                         Result := (dd.Day >= d.Day);
  29.         IsOlder40 := Result;
  30.     end;
  31. begin
  32.     WriteLn('Список женщин старше 40:');
  33.     for i := 1 to n do
  34.         with mas[i] do
  35.             if ((fpol='ж') And (IsOlder40(BDate)))
  36.             then
  37.                 WriteLn(ffam);
  38. end;

Объяснение кода листинга программы

  1. Подключается библиотека Utils.
  2. Определяется процедура Search50.
  3. Определяется функция IsOlder50, которая принимает объект типа Data и возвращает булево значение - true, если дата старше 50 лет, и false в противном случае.
  4. Переменные объявляются: i - байт, dd - объект типа DateTime, Result - булево значение.
  5. В блоке if проверяется разница между годами текущей даты и даты, для которой выполняется проверка. Если разница больше 50, то Result устанавливается в true. Если разница меньше или равна 50, то выполняются следующие проверки: если месяц текущей даты больше месяца даты, то Result устанавливается в true. Если месяц текущей даты меньше месяца даты, то Result устанавливается в false. Если день текущей даты больше дня даты, то Result устанавливается в true. Если день текущей даты меньше дня даты, то Result устанавливается в false.
  6. Если выполнены все условия, то Result устанавливается в true.
  7. Значение Result сохраняется в переменной IsOlder40.
  8. Выводится список женщин старше 40 лет. Для этого в цикле for перебираются элементы массива mas.
  9. Внутри цикла с объектами mas происходит проверка: если поле fpol равно 'ж' и функция IsOlder40(BDate) возвращает true, то выводится имя семьи (содержимое поля ffam).
  10. Цикл завершается.
  11. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы