Новичок
Джуниор
Регистрация: 24.05.2013
Сообщений: 2
|
Массив записей.
Есть программа на Pascal. Задан массив записей. В нем содержится информация о работниках. Данные о работниках располагаются в файле file.in. Нужно отобрать работников-мужчин, изменив процедуру Sort, чтобы в file.out выводились данные только о мужчинах.
Код:
Код:
Uses Crt;
Const
n = 20;
Type
Sotr = record
fam, nam, otc: string[20];
pol: char;
date: string[10];
adr, phone: string[30];
oklad: real;
end;
Arr = array[1..n] of Sotr;
Var
m: Arr;
f: text;
k: byte;
Procedure ParseString(st: string; var so: Sotr);
{ Процедура разбора строки по запятым и записи
в соответствующие поля по порядку записи so }
var
i: integer;
o: real;
begin
i := pos(',',st);
if i<>0 then
begin
so.fam := copy(st,1,i-1);
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.nam := copy(st,1,i-1);
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.otc := copy(st,1,i-1);
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.pol := st[1];
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.date := copy(st,1,i-1);
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.adr := copy(st,1,i-1);
delete(st,1,i);
end;
i := pos(',',st);
if i<>0 then
begin
so.phone := copy(st,1,i-1);
delete(st,1,i);
end;
if st<>'' then
begin
val(st,o,i);
if i=0 then
so.oklad := o;
end;
end;
Function GetString(const so: Sotr): string;
{ Функция, получающая запись, и формирующая строку из ее полей
разделенными запятыми в порядке следования полей }
var
s: string;
o: string;
begin
s := so.fam+',';
s := s+so.nam+',';
s := s+so.otc+',';
s := s+so.pol+',';
s := s+so.date+',';
s := s+so.adr+',';
s := s+so.phone+',';
str(so.oklad,o);
s := s+o;
GetString := s;
end;
Function ReadFromFile(var a: Arr): byte;
{ Функция чтения из текстового файла и записи в массив данных о сотрудниках.
Функция возвращает количество считанных строк }
var
s: string;
c: byte;
begin
assign(f,'file.in'); { связываем файл с файловой переменной }
{$I-} { отключаем проверку операций ввода-вывода }
reset(f); { открываем файл на чтение }
if IOResult<>0 then { возможная ошибка - файл не найден }
begin
writeln('Файл не найден...');
halt; { прерываем программу }
end;
{$I+} { включаем проверку операций ввода-вывода }
c := 0;
while not eof(f) do { пока не конец файла }
begin
readln(f,s); { считывам очередную строку файла }
inc(c); { увеличиваем счетчик считанных }
ParseString(s,a[c]); { разбираем строку в элемент массива }
if c=n then { считано столько сколько элементов массива }
break; { больше считывать не куда - прерываем цикл }
end;
ReadFromFile := c; { функция вернет количество считанных строк }
close(f); { закрываем файл }
end;
Procedure Sort(var a: Arr; n: byte);
{ Процедура сортировки масива записей методом простого обмена }
var
i,j: byte;
tmp: Sotr;
begin
for i := 2 to n do
for j := n downto i do
if a[j-1].oklad<a[j].oklad then
begin
tmp := a[j-1];
a[j-1] := a[j];
a[j] := tmp;
end;
end;
Procedure WriteToFile(const a: Arr; n: byte);
{ Процедура записи в текстовой файл из массива }
var
i: byte;
begin
assign(f,'file.out'); { связываем файл с файловой переменной }
rewrite(f); { открываем файл на перезапись }
for i := 1 to n do { перебор элементов массива }
writeln(f,GetString(a[i])); { запись очередного элемента в файл }
close(f); { закрываем файл }
end;
Begin
clrscr; { очистка экрана }
k := ReadFromFile(m); { считываем данные из файла в массив }
writeln('Считано строк: ',k);
Sort(m,k); { сортируем массив по окладу }
WriteToFile(m,k); { записываем данные в файл из массив }
writeln('Отсортированные данные записаны в файл "file.out"');
readkey; { нажатие любой клавиши }
End.
Последний раз редактировалось Rakot568; 24.05.2013 в 20:50.
|