Добавить процедуру в готовую программу - Pascal ABC
Формулировка задачи:
Помогите надо в эту программу добавить процедуру создать процедуру поиска и вывода сотрудниц страше 50 лет.
Листинг программы
- program Kursova;
- uses crt;
- type
- Data=record
- Day:1..31;
- Month:1..12;
- Year:integer;
- end;
- TOtdel=record
- ffam:string[25];
- BDate:Data;
- fpol:char;
- end;
- var
- Zap:TOtdel;
- Mas:array [1..40] of TOtdel;
- vibor:Byte;
- n,t:Integer;
- fami:string[25];
- f:file of TOtdel;
- procedure vvod;
- var
- i: integer;
- begin
- Assign(f, 'kursov.dat');
- rewrite(f);
- Write('Введите количество работников: ');
- readln(n);
- for i := 1 to n do
- begin
- writeln('Введите', ' ', i, ' ', 'работника');
- write('Введите фамилию работника: ');
- readln(Zap.ffam);
- write('Введите число от 1 - 31: ');
- readln(Zap.BDate.Day);
- write('Введите месяц от 1 - 12: ');
- readln(Zap.BDate.month);
- Write('Введите год рождения: ');
- readln(Zap.BDate.year);
- Write('Введите пол работника(м;ж): ');
- readln(Zap.fpol);
- write(f, Zap);
- end;
- close(f);
- end;
- procedure Readf;
- var
- i: integer;
- begin
- clrscr;
- assign(f, 'kursov.dat');
- reset(f);
- i := 1;
- while not (eof(f)) do
- begin
- read(f, Mas[i]);
- Writeln(i:4,' ',Mas[i].fpol,' ',Mas[i].ffam:15, ' ', ' ',Mas[i].BDate.Day, '.',Mas[i].BDate.month,'.',Mas[i].BDate.year);
- i := i + 1;
- end;
- close(f);
- n := i - 1;
- writeln(n);
- end;
- {----------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
- procedure Add;
- var
- i: integer;
- begin
- clrscr;
- rewrite(f);
- for i := 1 to n do
- write(f, Mas[i]); //Записываем в массив записей
- Writeln('Введите ', ' ', n + 1, ' ', 'работника');
- write('Введите фамилию работника: '); readln(Zap.ffam);
- write('Введите число от 1 - 31: '); readln(Zap.BDate.Day);
- write('Введите месяц от 1 - 12: ');
- readln(Zap.BDate.month);
- Write('Введите год рождения: ');
- readln(Zap.BDate.year);
- Write('Введите пол работника(м;ж): '); readln(Zap.fpol);
- writeln;
- write(f, Zap);
- close(f);
- end;
- {--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
- procedure delete;
- var
- i: integer;
- begin
- clrscr;
- i := 1;
- assign(f, 'kursov.dat');
- reset(f);
- while not eof(f) do
- begin
- read(f, Mas[i]);
- i := i + 1
- end;
- close(f);
- write('Выберите номер удаляемой записи которую вы хотите: ');
- readln(n);
- reset(f);
- seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
- read(f, Mas[i]);
- seek(f, n - 1); { Ставим указатель перед удаляемым файлом }
- write(f, Mas[i]);{ Записываем конечный компонент вместо удаляемого }
- { убираем последний элемент файла }
- seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
- truncate(f);{ Отсекаем последний компонент }
- Writeln('Удаление прошло успешно!!!');
- Writeln('Количество записей ',n-1);
- end;
- //-----------------------------------------------------------------------
- procedure Search;
- begin
- clrscr;
- write('Введите фамилию работника которого надо искать: ');
- readln(fami);
- reset(f);
- t := 0;
- while not eof(f) do
- begin
- read(f, Zap);
- if Zap.ffam = fami then{если фамилия совпала}
- begin
- t := 1;{фиксируем}
- writeln('Найдент работник с такой фамилией!!!');
- Writeln('Выводим запись');
- Writeln(Zap.ffam:15,' ', Zap.fpol, ' ', Zap.BDate.Day,'.', Zap.BDate.month, '.', Zap.BDate.year);
- end;
- end;
- if t = 0 then writeln('Такого работника нету!!!');{если нет совпадений}
- close(f);
- end;
- //-----------------------------------
- procedure vivod;
- var
- i:integer;
- maxID:integer;
- begin
- clrscr;
- Writeln('Вывод старшего мужчины!');
- maxId:=1;
- for i:=2 to n do
- if (mas[i].fpol='м')and(mas[i].BDate.Year > mas[maxID].BDate.Year) then
- maxId := i
- else
- if(mas[i].fpol='м')and (mas[i].BDate.Month < mas[maxID].BDate.Month) then
- maxId := i
- else
- if(mas[i].fpol='м')and (mas[i].BDate.Day < mas[maxID].BDate.Day) then
- maxID := i;
- WriteLn('//--------------------------------------------------------');
- with mas[maxID] do
- begin
- Writeln('Самый старший мужчина');
- WriteLn('Surname: ', ffam);
- WriteLn('Date: ', BDate.Day, '.', BDate.Month, '.', BDate.Year);
- WriteLn('Pol: ',fpol, '-(мужчина)');
- end;
- end;
- //-------------------------------------------------------------------------------------------------------------
- procedure vivod2;
- var
- i:integer;
- c:char;
- k:boolean;
- begin
- clrscr;
- Write('Введите букву фамилии: ');readln(c);
- k:=false;
- for i:=1 to n do begin
- if (mas[i].ffam[1]=c) then
- Writeln(Mas[i].ffam:15,' ', 'пол: ',Mas[i].fpol, ' ', Mas[i].BDate.Day,'.', Mas[i].BDate.month, '.', Mas[i].BDate.year);
- k:=false;
- end;
- if (k=true)or(mas[i].ffam[1]<>c) then writeln('Список людей не найдены по заданной букве!');
- end;
- //---------------------------------------------------------------------------------------------------------------
- procedure vivod3;
- var m:integer;
- i:integer;
- key:boolean;
- begin
- clrscr;
- Write('Введите месяц рождения: '); readln(m);
- key:=true;
- for i:=1 to n do begin
- if (mas[i].BDate.Month=m) then begin
- Writeln(Mas[i].ffam:15,' ', Mas[i].fpol, ' ',Mas[i].BDate.month);
- key:=true;
- end;end;
- if (key=false)or(mas[i].BDate.Month<>m) then Writeln('Список людей родившихся в этом месяце нет!');
- end;
- begin
- clrscr;
- Writeln('Выберите действия:');
- Writeln('1 - Ввод данных в файл');
- Writeln('2 - Чтение с файла');
- Writeln('3 - Добавление в файл');
- Writeln('4 - Удаление записи');
- Writeln('5 - Поиск информации');
- Writeln('6 - Вывод старшего работника');
- Writeln('7 - Фамилии начинающиеся с заданной буквы');
- Writeln('8 - Cписок людей родившихся в заданном месяце');
- Writeln('9 - Выход');
- Readln(vibor);
- while vibor<9 do
- begin
- case vibor of
- 1:vvod;
- 2:ReadF;
- 3:Add;
- 4:delete;
- 5:Search;
- 6:vivod;
- 7:vivod2;
- 8:vivod3;
- end;
- writeln;
- Writeln('Выберите действия от 1-9:');
- Writeln('1 - Ввод данных в файл');
- Writeln('2 - Чтение с файла');
- Writeln('3 - Добавление в файл');
- Writeln('4 - Удаление записи');
- Writeln('5 - Поиск информации');
- Writeln('6 - Вывод старшего работника');
- Writeln('7 - Фамилии начинающиеся с заданной буквы');
- Writeln('8 - Cписок людей родившихся в заданном месяце');
- Writeln('9 - Выход');
- readln(vibor);
- end;
- end.
Решение задачи: «Добавить процедуру в готовую программу»
textual
Листинг программы
- uses
- Utils;
- procedure Search50;
- var
- i: Byte;
- function IsOlder50(d: Data): Boolean;
- var
- dd: DateTime;
- Result: Boolean;
- begin
- dd := CurrentDateTime;
- if (dd.Year - d.Year > 50)
- then
- Result := True
- else
- if (dd.Year - d.Year < 50)
- then
- Result := False
- else
- if (dd.Month > d.Month)
- then
- Result := True
- else
- if (dd.Month < d.Month)
- then
- Result := False
- else
- Result := (dd.Day >= d.Day);
- IsOlder40 := Result;
- end;
- begin
- WriteLn('Список женщин старше 40:');
- for i := 1 to n do
- with mas[i] do
- if ((fpol='ж') And (IsOlder40(BDate)))
- then
- WriteLn(ffam);
- end;
Объяснение кода листинга программы
- Подключается библиотека Utils.
- Определяется процедура Search50.
- Определяется функция IsOlder50, которая принимает объект типа Data и возвращает булево значение - true, если дата старше 50 лет, и false в противном случае.
- Переменные объявляются: i - байт, dd - объект типа DateTime, Result - булево значение.
- В блоке if проверяется разница между годами текущей даты и даты, для которой выполняется проверка. Если разница больше 50, то Result устанавливается в true. Если разница меньше или равна 50, то выполняются следующие проверки: если месяц текущей даты больше месяца даты, то Result устанавливается в true. Если месяц текущей даты меньше месяца даты, то Result устанавливается в false. Если день текущей даты больше дня даты, то Result устанавливается в true. Если день текущей даты меньше дня даты, то Result устанавливается в false.
- Если выполнены все условия, то Result устанавливается в true.
- Значение Result сохраняется в переменной IsOlder40.
- Выводится список женщин старше 40 лет. Для этого в цикле for перебираются элементы массива mas.
- Внутри цикла с объектами mas происходит проверка: если поле fpol равно 'ж' и функция IsOlder40(BDate) возвращает true, то выводится имя семьи (содержимое поля ffam).
- Цикл завершается.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д