Вынужден с сожалением констатировать, что процедура упорядочения и вывода содержит грубейшие ошибки:
Что такое n? Чему равно? Эта переменная только объявлена в списке глобальных, но нигде никакое значение ей не присвоено. Вероятно, подразумевается, что n=3? Тогда следовало ее делать не переменной, а константой, и в начале программы написать
Const
n=3;
а потом всюду явные тройки убрать, заменив их на n.
Вот опять - "из рукава" вынимается переменная k с неопределенным значением. И вообще - в чем смысл массива а и приведенной строки? Дальше нигде это a, равно как и k, не используется.
Цитата:
for i:=1 to n-1 do
if m[i+2].kol_sot<m[i+1].kol_sot then
|
Если n=3, то при i=n-1 m[i+2]=m[4], то есть имеет место выход за границы массива, что неизбежно приведет к ошибке выполнения программы.
Еще ошибка: в процедуре vivod параметр m является входным, а не выходным, а потому var перед ним - не допустим. И вообще, именовать параметры подпрограмм одинаково с глобальными хоть и допустимо, но является дурным тоном и приводит к путанице и ошибкам. В случае процедуры vivod на мой взгляд параметр вообще не нужен, поскольку вы работаете с глобальным массивом m.
Предлагаю вариант грамотной реализации:
Код:
procedure vivod;
var
i,j:integer;
r:sot;
begin
for j:=1 to n do
for i:=1 to n-j do
if m[i+1].kol_sot<m[i].kol_sot then
begin
r:=m[i+1];
m[i+1]:=m[i];
m[i]:=r
end;
for i:=1 to n do
begin
writeln('Êàôåäðà ;:',m[i].kaf);
writeln ('Çàâ:',m[i].zav_K);
writeln ('Êîë-âî:',m[i].kol_sot);
writeln ('¹',m[i].num_K);
end;
end;