Цитата:
Сообщение от citrus
"Задан строковый массив. Каждая строка содержит информацию о сотруднике фирмы и имеет след структуру: фамилия пол з/п должность.
Вывести в алфавитном порядке всех мужчин, з/п которых выше средней."
Я вот написал пока что процедуры ввода/вывода и процедуру сортировки мужчин. Теперь, как мне сказали, нужно написать функцию выделения из строки з/п. Затем нужно как-то применять эту функцию к всему массиву и выбирать те, что больше средней.. Помогите, пожалуйста, написать эти функции.
Вот, что я пока что сделал:
|
Ну а вот что удалось мне. Не уверен, что это решение оптимальное (я имею в виду считывание информации из строк через промежуточный файл), но ничего умнее я не придумал. Между прочим, задание формата (:20) в процедуре vivod - ошибка. Уберите обязательно. И еще. Имена (фамилии) сотрудников нужно писать или все с большой буквы, или все с маленькой, но не вперемешку - иначе в конце получится неправильный список.
Код:
Program ZP;
uses crt;
Type MAS=array[1..15] of string;
Var A,B,C:MAS;
N,Nm:byte;
Procedure Vvod(var x:MAS; Nvvod:byte);
Var i:byte;
s:string;
begin
For i:=1 to Nvvod do
begin
Writeln('Vvedite imy');
Readln(x[i]);
Writeln('Vvedite pol:m ili j');
Readln(s);
x[i]:=x[i]+' '+s;
Writeln('Vvedite z/p');
Readln(s);
x[i]:=x[i]+' '+s;
Writeln('Vvedite dolzhnost');
readln(s);
x[i]:=x[i]+' '+s;
WriteLn;
end;
end;
Procedure Vivod (x:MAS; Nvivod:byte);
Var i:byte;
begin
For i:=1 to Nvivod do
begin
Writeln(x[i]);
end;
Writeln;
Readln;
end;
Procedure Select(x:MAS; Ns:byte; var y:Mas; var Nms:byte);
Var i,j:byte;
f:TEXT;
Surn:array[1..15] of String;
Sex:array[1..15] of Char;
Money:array[1..15] of Word;
ZPmed:Real;
begin
Assign(f,'C:\xxx');
For i:=1 to Ns do
begin
ReWrite(f);
j:=1;
Repeat
Write(f,x[i][j]);
Inc(j);
Until x[i][j]=' ';
Inc(j);
WriteLn(f);
WriteLn(f,x[i][j]);
Inc(j,2);
Repeat
Write(f,x[i][j]);
Inc(j);
Until x[i][j]=' ';
WriteLn(f);
Close(f);
ReSet(f);
ReadLn(f,Surn[i]);
ReadLn(f,Sex[i]);
ReadLn(f,Money[i]);
Close(f);
end;
Erase(f);
ZPmed:=0;
For i:=1 to Ns do
ZPmed:=ZPmed+1.0*Money[i]/Ns;
Nms:=0;
For i:=1 to Ns do
If (Sex[i]='m') and (1.0*Money[i]>ZPmed) then
begin
Inc(Nms);
y[Nms]:=Surn[i];
end;
end;
Procedure Ordering(x:MAS; Nor:byte; var y:MAS);
var i,j:byte;
dub:string;
begin
y:=x;
For i:=1 to Nor do
For j:=1 to Nor-i do
If ORD(y[j][1])>ORD(y[j+1][1]) then
begin
dub:=y[j];
y[j]:=y[j+1];
y[j+1]:=dub;
end;
end;
Begin
clrscr;
Writeln('vvedite kol-vo rabotnikov');
readln(N);
vvod(A,N);
vivod(A,N);
select(A,N,B,Nm);
ordering(B,Nm,C);
vivod(C,Nm);
End.