Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2017, 22:58   #1
Alexey1002
 
Регистрация: 14.11.2017
Сообщений: 9
По умолчанию Помогите исправить ошибку в коде (массив, содержащий сведения..)

Здравствуйте!
Задание: Создать массив структур A(n), где n<=20, содержащий сведения: фамилия, три оценки на экзаменах. Используя функцию, определить студентов, имеющих средний балл ниже 3.5, и упорядочить их список по алфавиту. В главной функции полученный массив вывести на экран.
Помогите пожалуйста исправить ошибку. Загвостка происходит на строке "sort(mass1,mass2);" (скриншот прилагаю)
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;

Const n=5;
Type styd=record
     fam:string[50];
     oca,occ,ocb:byte;
     end;
	    m1=array[1..1000] of styd;
      m2=array[1..1000] of styd;
      stud=array[1..1000] of styd;
     tmas=array[1..n] of styd;

var f:file of styd;
    f2:textfile;
    ch:styd;
    s:tmas;
    sr:integer;
    sn:tmas;
    mass:tmas;
    buf:styd;
    i, j, l, k:integer;

procedure vvod (m:integer; var a:tmas);
	begin
		with a[m] do
		begin
		write ('Familiya: ');
		readln (fam);

		write ('Ocenka 1: ');
		readln (oca);

		write ('Ocenka 2: ');
		readln (ocb);

		write ('Ocenka 3: ');
		readln (occ);
	end;
end;

procedure sort (var mass1:stud; mass2:stud; l:Integer);
begin
  l:=0;
  for i:=1 to n-1 do
  for j:=i+1 to n do
  if mass1[i].fam>mass1[j].fam then
    begin
      buf:=mass1[i];
      mass1[i]:=mass1[j];
      mass2[j]:=buf;
    end;
  for i:=1 to n do
  if(mass1[i].oca + mass1[i].ocb + mass1[i].occ)/3<3.5
  then
  begin
    Inc(l);
    mass2[l]:=mass1[i];
  end;
end;





procedure vivod (m:integer; a:tmas);
begin
with a[m] do
  begin
  writeln(fam:7, oca, ocb, occ);
  end;
end;
begin
 for i:=1 to n do
 begin
  writeln('Vvedite dannie ',i, ' studenta ');
  vvod(i, s);
  writeln;
 end;


 k:=0;
  for i:=1 to n do
  begin
  sort(mass1,mass2);
  writeln;

  writeln('Dannie  stydentov: ');
  writeln('    Familia   |  Ocenka 1 |  2  |  3  ');
  for i:=1 to k do
  begin
   vivod(i, sn);
   writeln;
  end;

readln;
end.
Изображения
Тип файла: png 20-11-2017 22-57-46.png (3.4 Кб, 68 просмотров)
Alexey1002 вне форума Ответить с цитированием
Старый 21.11.2017, 10:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexey1002 Посмотреть сообщение
procedure sort (var mass1:stud; mass2:stud; l:Integer);
сколько параметров в описании процедуры sort?
подсчитайте и сравните с
Цитата:
Код:
sort(mass1,mass2);
это раз.
второе. зачем процедуру sort вызывать в цикле N раз?

третье.
если в процедуре/функции что-то должно изменяться внутри, то нужно обязательно использовать модификатор var перед описанием переменных (у Вас меняется mass2 и l)

четвёртое.
все локальные переменные, которые используются внутри процедуры функции, должны быть описаны в ней же. Использование глобальных не ошибка, но повод получать предупреждения, потеря наглядности и потеря надёжности (можно накосячить и получить трудно обнаруживаемый баг).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2017, 10:13   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Там еще эти mass1 и mass2 вообще ни как не описаны ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.11.2017, 10:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

да это вообще не программа, а одно сплошное недоразумение.
сортировка до того, как в массив вводятся данные.
"ввод" вызывается из процедуры "вывод".
описано куча бессмысленных типов данных, зато переменные не заданы. и т.д. и т.п.
короче, надо всё переделывать.
не зачёт!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа не работает, помогите исправить: Создать файл, содержащий сведения о компьютерах. Паскаль Марус Помощь студентам 2 28.03.2017 12:01
помогите исправить ошибку в коде bishkor Помощь студентам 5 12.06.2015 00:31
Помогите исправить ошибку в коде paradises965 Помощь студентам 1 23.11.2014 20:22
Помогите исправить ошибку в коде... prizrak1390 Общие вопросы Delphi 4 26.04.2008 13:19