![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
Сразу хочу сказать, что задача простая, и что без использования функции ее очень легко решить, но у меня конкретное задание - решить эту задачу с использованием функции.
Условие: Даны массивы фамилий - Fam[n] и номеров бригад - Nbr[n] и матрица зарплат за 12 месяцев - Zrp[n,m]. Задание: Напечатать список сотрудников в порядке убывания их среднемесячных зарплат, используя для вычисления среднемесячной з/п функцию. Если не использовать функцию, то правильное решение это - program lab6v1; uses crt; const n=5; m=12; var Fam:array [1..n] of string[10]; Nbr:array [1..n] of integer; Z:array [1..n,1..m] of real; SR:array [1..n] of real; i,j,l,Nmin,nb:integer; sum,s:real; fm:string; begin clrscr; for i:=1 to n do begin write('vvedite familiu:');readln(Fam[i]); write('vvedite nomer brigadi:');readln(Nbr[i]); writeln('vvedite ',m,' z/p'); for j:=1 to m do read(Z[i,j]);readln; end; for i:=1 to n do begin sum:=0; for j:=1 to m do sum:=sum+Z[i,j]; SR[i]:=sum/m; end; for i:=1 to n-1 do begin Nmin:=i; for l:=i+1 to n do if SR[l]>SR[Nmin] then Nmin:=l; s:=SR[i];SR[i]:=SR[Nmin];SR[Nmin]:=s; fm:=Fam[i];Fam[i]:=Fam[Nmin];Fam[Nmin]:=fm; nb:=Nbr[i];Nbr[i]:=Nbr[Nmin];Nbr[Nmin]:=nb; end; for i:=1 to n do writeln(Nbr[i],' ',Fam[i]:10,' ',SR[i]:9:2); readkey end. С использованием функции я дошел только до такого: program lab8v1; uses crt; const n=5;m=12; var Fam:array [1..n] of string[10]; Nbr:array [1..n] of integer; Zrp:array [1..n,1..m] of real; l,Nmin,i,j,nb:integer; fm:string; function SRED(i:integer):real; var j:integer;sum:real; begin sum:=0; for j:=1 to m do sum:=sum+Zrp[i,j]; SRED:=sum/m; end; BEGIN clrscr; for i:=1 to n do begin write('vvedite familiu:');readln(Fam[i]); write('vvedite nomer brigadi:');readln(Nbr[i]); writeln('vvedite ',m,' z/p'); for j:=1 to m do read(Zrp[i,j]);readln; end; for i:=1 to n-1 do begin Nmin:=i; for l:=i+1 to n do if SRED(l)>SRED(Nmin) then Nmin:=l; fm:=Fam[i];Fam[i]:=Fam[Nmin];Fam[Nmin]:=fm; nb:=Nbr[i];Nbr[i]:=Nbr[Nmin];Nbr[Nmin]:=nb; end; for i:=1 to n do writeln(Nbr[i],' ',Fam[i]); readkey end. Но очевидно, что это неправильно т.к. в результате у меня он сортирует только первых двух сотрудников... Просто не знаю как применить сортировку к функции, наверняка это легко - кто знает подскажите (= Последний раз редактировалось vAdiM_Kubski; 28.12.2008 в 19:09. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
что, никто не знает ?
|
![]() |
![]() |
![]() |
#3 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Попробуйте так:
Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
не понял, если просто скопировать это в паскаль то получится тоже самое что и было, что логично потому что стоят {} но если их убрать то результата не получается
|
![]() |
![]() |
![]() |
#5 | ||
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
То, что закомменчено - код для проверки. Как-то не очень хочется вбивать 12 чисел для 5 имен, когда этот процесс можно автоматизировать. Могу даже подсказать, где искать то, что я имзенил: Код:
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
||
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
я так понимаю следует убрать тогда Nmin:=i
после того как я это убрал - заработало сейчас проверю еще разок |
![]() |
![]() |
![]() |
#7 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
глюк какой-то
всё верно если средняя зарплата и номер бригады не совпадают но если ввести так, что номер бригады и среднее значение будут совпадать, то сортируется только часть |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 28.12.2008
Сообщений: 16
|
![]()
всё равно огромное спасибо!
![]() |
![]() |
![]() |
![]() |
#10 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
Сейчас потестил (используя генератор) - действительно, иногда работает некорректно (номера бригад там от 1 до 5, со сред. з/п не совпадало). Но причину пока не нашел. Если разберусь - напишу.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка Шелла и Шейкер-сортировка | AleksandrMakarov | Паскаль, Turbo Pascal, PascalABC.NET | 11 | 11.03.2012 12:18 |
Сортировка | fedya | Помощь студентам | 3 | 26.11.2007 18:24 |
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию | Arkuz | Помощь студентам | 1 | 25.09.2007 17:16 |