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

Вынужден с сожалением констатировать, что процедура упорядочения и вывода содержит грубейшие ошибки:

Цитата:
begin
for i:=1 to n do
Что такое n? Чему равно? Эта переменная только объявлена в списке глобальных, но нигде никакое значение ей не присвоено. Вероятно, подразумевается, что n=3? Тогда следовало ее делать не переменной, а константой, и в начале программы написать
Const
n=3;
а потом всюду явные тройки убрать, заменив их на n.
Цитата:
begin
a[k]:=m[i];
Вот опять - "из рукава" вынимается переменная 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('Êàôåäð&#224  ;:',m[i].kaf);
   writeln ('Çàâ:',m[i].zav_K);
   writeln ('Êîë-âî:',m[i].kol_sot);
   writeln   ('¹',m[i].num_K);
  end;
end;
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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