Можно эту программку написать как-нибудь иначе, чтоб она была короче. Если можно, то напишите пожалуйста.
Код: Выделить всё
Program 1;
Const
No_1:=1; /номера школ/
No_2:=4;
No_3:=5;
No_4:=6;
No_5:=8;
No_6:=9;
N:=200; /кол-во учеников всего/
Var
Sp: array [1..n] of string [15]; /список фaмилий/
Sch: array [1..n] of integer; /список номеров школ/
Sp1: array [1..n] of string [15]; /список фамилий учеников 1-ой школы №1/
Sp2: array [1..n] of string [15];
Sp3: array [1..n] of string [15];
Sp4: array [1..n] of string [15];
Sp5: array [1..n] of string [15];
Sp6: array [1..n] of string [15];
K1: array [1..n] of integer; /кол-во решенных задач учеников 1-ой школы №1/
K2: array [1..n] of integer;
K3: array [1..n] of integer;
K4: array [1..n] of integer;
K5: array [1..n] of integer;
K6: array [1..n] of integer;
PO: array [1..5] of real; /правильные ответы/
OT: array [1..n, 1..5] of real; /ответы учеников/
x,i j,k,i1,i2,i3,i4,i5,i6,x1,x2,x3,x4,x5,x6: integer;
Begin
Writeln(' введите 5 правильных ответов');
For j:=1 to 5 do
Readln(PO[j]);
Writeln('vvedite',n,'familiy');
For i:=1 to n do
Readln(sp[i]);
Writeln(' введите номера школ');
For i:=1 to n do
Readln(sch[i]);
Writeln(' введите 5 ответов каждого из',N,'учеников');
For i:=1 to n do
For j:=1 to 5 do
Read(OT[i,j]);
Writeln('schola',No_1);
x1:=0; /количество учеников школы/
For i:=1 to n do
Begin
If sch[i]=No_1 then
Begin
x1:=x1+1;
i1:=x1;
sp1[i1]:=sp[i]; /переносим ученика из общего списка в список учеников 1-ой школы/
for j:=1 to 5 do
begin
if OT[i,j]=PO[j] then
k:=k+1;
end;
k1[i1]:=k;
end;
end;
x:=0; /число повторений обхода сортировки/
repeat
for i1:=1 to x1 do
begin
if k1[i1]<k1[i1+1] then
begin
k1[i1]:=k1[i1+1];
k1[i1+1]:=k1[i1];
sp1[i1]:=sp1[i1+1];
sp1[i1+1]:=sp1[i1];
x:=x+1;
end;
end;
until x=x1;
for i1:=1 to x1 do
writeln(sp1[i1]);
writeln('школа',No_2);
x2:=0;
....................................
далее как по первой школе, не стала набирать, так как практически то же самое