27.03.2008, 10:00
общий
это ответ
Здравствуйте, Муратов Дмитрий Анатольевич!
При ответе на вопрос №128005 я посоветовал вам применить иассив записей, в котором очень удлбно объединять различные типы, и кроме оценок можно вводить фамилии учеников, их класс, школу и т.д. В этом отношении двумерные массивы позволяют вводить данные только одного типа. Но раз уж массивы, значит массивы. Уважаю за упорство, сам такой.
Я переделал вашу процедуру сортировки и подремонтировал сам модуль, а также программу. В программе создание процедур, которые используются только один раз я считаю нецелесообразно, иначе их тоже надо вынести в модуль. Но это все на ваше усмотрение.Принцип сортировки: определяем среднее от суммы оценок в строке 2 и строке 3 и сортируем массив по возрастанию методом обмена(или пузырька). Результат деления вроде бы Real, но т.к. мы его не определяем, а только сравниваем, на типе это никак не сказывается.
Массив я сделал размерностью [1..3,1..n]. В первую строчку я ввел номера учеников, чтобы результаты сортировки были нагляднее. Во второй и третьей строчках-оценки. Взял от 3 до 5, двоешникам у нас не место, они только количество пятерок уменьшают и результат при небольших n может некрасиво выглядеть(с нолями).
В приложении привожу модуль(как его оформлять вы видимо знаете, если что, то я описал его в ответе на вопрос 128005), саму программу, а также программу без модуля на всякий случай, вдруг что-то не заработает, так можно ошибку найти.
Если что-то не пойдет, не ругайте меня на форуме, у меня временно нет туда доступа, лучше напишите личное сообшение, все проблемы решим. Пожалуй все. Удачи!
Приложение:
1.Модуль.unit Sort_mas;interfacetype mas=array[1..3,1..30]of byte; procedure Sort(n:integer;var a:mas);implementation procedure Sort(n:integer;var a:mas); var i,j,k,x:integer; begin for j:=1 to n-1 do for k:=1 to n-1 do if ((a[2,k]+a[3,k])/2)>((a[2,k+1]+a[3,k+1])/2) then begin for i:=1 to 3 do begin x:=a[i,k]; a[i,k]:=a[i,k+1]; a[i,k+1]:=x; end; end; end;end.2.Программаuses crt,Sort_mas;var a:mas; n,i,j,kol1,kol2:integer;beginclrscr;randomize;Write(‘Kolchestvo uchenikov=‘);readln(n);for i:=1 to 3 do begin for j:=1 to n do begin a[i,j]:=random(3)+3; a[1,j]:=j; write(a[i,j]:3); end; writeln; end;readln;Sort(n,a);writeln(‘Uporiadochenny massiv:‘);for i:=1 to 3 do begin for j:=1 to n do begin write(a[i,j]:3); end; writeln; end;readln;kol1:=0;for j:=1 to n doif a[2,j]=5 then begin kol1:=kol1+1; end;writeln(‘Pervaia rabota na 5 = ‘,kol1,‘ uchenikov‘);kol2:=0;for j:=1 to n doif (a[2,j]=5)and(a[3,j]=5) then begin kol2:=kol2+1; end;writeln(‘Obe raboty na 5 = ‘,kol2,‘ uchenikov‘);readlnend.3. Программа без модуля.uses crt;var a:array[1..3,1..30]of byte; n,i,j,k,x,kol1,kol2:integer;beginclrscr;randomize;Write(‘Kolchestvo uchenikov=‘);readln(n);for i:=1 to 3 do begin for j:=1 to n do begin a[i,j]:=random(3)+3; a[1,j]:=j; write(a[i,j]:3); end; writeln; end;readln;for j:=1 to n-1 dofor k:=1 to n-1 doif ((a[2,k]+a[3,k])/2)>((a[2,k+1]+a[3,k+1])/2) then begin for i:=1 to 3 do begin x:=a[i,k]; a[i,k]:=a[i,k+1]; a[i,k+1]:=x; end; end;writeln(‘Uporiadochenny massiv:‘);for i:=1 to 3 do begin for j:=1 to n do begin write(a[i,j]:3); end; writeln; end;readln;kol1:=0;for j:=1 to n doif a[2,j]=5 then begin kol1:=kol1+1; end;writeln(‘Pervaia rabota na 5 = ‘,kol1,‘ uchenikov‘);kol2:=0;for j:=1 to n doif (a[2,j]=5)and(a[3,j]=5) then begin kol2:=kol2+1; end;writeln(‘Obe raboty na 5 = ‘,kol2,‘ uchenikov‘);readlnend.