Показать сообщение отдельно
Старый 31.01.2010, 15:51   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070