Доброго времени суток.
Имеется задача:
------
Цитата:
4)В банке данных о получении пособий на детей находятся три поля:
1-ое поле: ФИО рабочих
2-ое поле: количество детей
3-е поле: даты рождения (год, месяц, число) детей.
Определить, сколько пособий на своих детей получает каждый рабочий (дети старше 18 лет пособие не получают). Определить рабочего, получающего максимальное пособие.
|
Выполнено.
Цитата:
13. Запрограммировать следующие процедуры и функции:
а) перезапись из файла в массив,
б) поиск записи по двум полям в массиве с занесением найденных записей в новый файл,
в) добавление записи в конец файла,
г) поиск записи с изменением одного из полей записи в файле,
д) вывод файла,
е) построение диаграммы по одному из полей записи.
|
Вывод файла организован, добавление записи в конец файла не работает почему-то (ошибка записи).
-----
Прошу помощи с этой темой
Код:
uses crt;
const
nowadays = 2013;
n = 10;
type
datar = record
den: 1..31;
mes: 1..12;
god: 1900..nowadays;
end;
rabotnic = record
fio: string;
koldet: 1..10;
data: array [1..10] of datar;
end;
var
ftext: text;
ftip: file of rabotnic;
j,i,pMax: Byte;
p: boolean;
c:Char;
procedure Vvod;
var t:rabotnic;
begin
reset(ftext);
rewrite(ftip);
while not eof(ftext) do
with t do
begin
readln(ftext, fio);
read(ftext,koldet);
for i:=1 to koldet do
read(ftext, data[i].god, data[i].mes, data[i].den);
readln(ftext);
write(ftip, t);
end;
close(ftext);
close(ftip);
end;
procedure WrInf(t:rabotnic);
begin
writeln('FIO: ',t.fio);
writeln('Kolichestvo detey: ',t.koldet);
write('data: ');
for i:=1 to t.koldet do
write(t.data[i].den,'.',t.data[i].mes,'.',t.data[i].god,' ');
writeln;
end;
Procedure LOG3;
var j ,i:integer;
t:rabotnic;
begin
writeln ('Vvedite novuyu zapis fio , rost, god');
t.fio:='';
Readln(t.fio);
for i:=1 to 30-length(t.fio) do
t.fio:=t.fio+' ';
readln(t.koldet);
{readln(t.data[i].den,t.data[i].mes,t.data[i].god); }
reset(ftip);
for j:=0 to filesize(ftip)-1 do begin
seek(ftip,j);
read(ftip,t);
write(ftip,t);
end;
seek(ftip,j);
write(ftip,t);
end;
Procedure MaxPos;
var
t:rabotnic;
k:Byte;
NameMax: string;
begin
reset(ftip);
pMax:=0;
repeat
read(ftip,t);
k:=0;
for i:=1 to t.koldet do
if (nowadays - t.data[i].god)<18 then inc(k);
writeln('Rabochiy ', t.fio:40,' ',k, ' posobiy(a)');
if k>pMax then
begin
pMax:=k;
NameMax:=t.fio;
end;
until EoF(ftip);
Close(ftip);
writeln('Max kol posobij = ',pMax,' u ', NameMax);
end;
begin
ClrScr;
assign(ftext, 'record.txt');
assign(ftip, 'ftip.rec');
Vvod;
MaxPos;
LOG3;
end.