Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 28.05.2011, 14:31   #1 (permalink)
Павел-14
Новичок
 
Регистрация: 23.05.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Подскажите, где ошибка

редставить данные о кафедрах института в виде массива записей со структурой :

кафедра
номер кафедры
ЗавКафедры
кол-во сотрудников
1)напишите процедуры заполнения/вывода содержимого данного массива
2)напишите процедуру вывода сведений о кафедрах на которых работает не более N человек в формате ( номер кафедры : кол-во сотрудников).
список должен быть отсортирован в порядке возрастания числа сотрудников.


задача все делает ,но не по порядку возрастания числа сотрудников. преподаватель сказал одну стоку поменять что то не очень понимаю какую .
type
sot=record
kaf:string;
num_K:integer;
zav_K:string;
kol_sot:integer;
end;
mas=array[1..3] of sot;
var
m:mas;
n:integer;

procedure zap(var m:mas);
var
i:integer;
begin
for i:=1 to 3 do begin
write('kafedra? ');
readln(m[i].kaf);
write('zaved_Kaf? ');
readln(m[i].zav_K);
write('kol_sotr? ');
readln(m[i].kol_sot);
write('nomer_kaf? ');
readln(m[i].num_K);
end;
end;

procedure vivod (var m:mas);
var a:mas;i,k:integer;r:sot;
begin
for i:=1 to n do
begin
a[k]:=m[i];
for i:=1 to n-1 do
if m[i+2].kol_sot<m[i+1].kol_sot then
begin
r:=m[i+1];
m[i+1]:=m[i];
m[i]:=r
end;
end;
for i:=1 to 3 do
begin
writeln('Êàôåäðà:',m[i].kaf);
writeln ('Çàâ:',m[i].zav_K);
writeln ('Êîë-âî:',m[i].kol_sot);
writeln ('¹',m[i].num_K);
end;
end;

begin
zap(m);
vivod (m);
end.
Павел-14 вне форума   Ответить с цитированием

Старый 28.05.2011, 14:31
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Проблема встречалась и ранее, вот, что нашлось

Подскажите по HDD
Подскажите, что означает ошибка?
Подскажите, что это?

Старый 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
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:50.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.