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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 23:20   #1
Mr_sniper
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 10
По умолчанию Задание на записи

Написать программу формирования ведомости об успеваемости студентов. Каждая запись этой ведомости должна содержать номер группы, фамилию студента, средний балл за последнюю сессию. Необходимо распечатать списки студентов по группам. В каждой труппе фамилии студентов разместить в порядке убывания среднего балла.

Помогите пожалуйста хотя бы с описанием в разделе Type и как разместить в порядке убывания фамилии по баллу
Mr_sniper вне форума Ответить с цитированием
Старый 23.11.2011, 23:43   #2
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Код:
Type
Student = record
  GroupNo:Integer;
  Name:String[50];
  SrBall:Real;
  End;
Создаешь массив таких записей,например Studs:array[1..10] of Student. А потом простоая сортировка по Studs[I].SrBall
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 23.11.2011, 23:48   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,310
По умолчанию

например так:
Код:
Const N= 100; {допустимое число студентов}
Type Trec = record
         Ngr: word;          {номер группы}
         Fam: string[15];  {Фамилия}
         Mid: word;          {Средний бал}
       end;
       Tmas = array[1..N] of Trec; {список студентов}

Var masstud: Tmas;
Сортировку лучше сделать по ключу вида:
K:= Tmas[i].Ngr * 10 + Tmas[i].Mid.
В этом случае, после сортировки, массив будет состоять из элементов, подряд идущих одногрупников, например, с убыванием среднего балла.
Ну вот, опередили. Хотя и не во всём
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.11.2011, 03:14   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
function Swap(x: <целый тип>): <целый тип>;

Меняет местами младший и старший байты аргумента.

X - выражение типа Integer или Word.
Это не то. Поменяй значения вручную через переменную.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 24.11.2011, 04:33   #5
Mr_sniper
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 10
По умолчанию

получилось что-то типо того

Код:
type spisok=record
          group:string;
          family:string;
          bal:byte;
         end;
     arr=array[1..100] of spisok;
          
var zap:arr;
    i,j,n:byte;
    
Begin
 
write('Введите кол-во записей:');readln(n);
 
//Ввод данных
for i:=1 to n do
begin
 
write('Группа ',i,'-го студента: ');readln(zap[i].group);
write('ФИО ',i,'-го студента: ');readln(zap[i].family);
write('Бал ',i,'-го студента: ');readln(zap[i].bal);
 
end;
 
//Сортировка  
for i:=1 to n-1 do
 for j:=1 to n-1 do
  if zap[j].bal<zap[j+1].bal then swap(zap[i],zap[i+1]);
 
writeln;
 
//Вывод
for i:=1 to n do
begin 
 write(zap[i].group,'  ',zap[i].family,'  ',zap[i].bal);
 writeln;
end;
 
End.

Здесь ошибка (Integer expression expected), подскажите пожалуйста что исправить нужно
Код:
then swap(zap[i],zap[i+1]);
Mr_sniper вне форума Ответить с цитированием
Старый 24.11.2011, 09:52   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не знаю, что за алгоритм сортировки Вы используете /я уже молчу о том, что Вы пытаетесь поменять местами НЕ ТЕ ЭЛЕМЕНТЫ, которые Вы сравнили!/ (я предпочитаю сортировку "пузырьком" - она же сортировка методом простых обменов).

но суть в том, что командой SWAP вы хотите поменять местами два элемента.
это можно сделать так
1) в переменный программы описать дополнительную переменную такого же типа, как и элементы массива. в данном случае типа spisok
Код:
var
  ...
  TempOne : spisok
2) вместо swap написать:
Код:
  if zap[j].bal<zap[j+1].bal then begin
    TempOne := zap[j];
    zap[j] := zap[j+1];
    zap[j+1] := TempOne;
  end;


p.s. я бы сортировку написал так:
Код:
  (* *** Сортировка *** *)

  {сортировка массива методом простых обменов ("пузырька") }
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if zap[i].bal < zap[j].bal then begin
        TempOne := zap[i];
        zap[i] := zap[j];
        zap[j] := TempOne;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2011, 00:30   #7
Mr_sniper
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 10
По умолчанию

Спасибо огромное за помощь, всё получилось
Mr_sniper вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запутаное задание задание с массивом.Буду очень благодарен. Riko1 Общие вопросы C/C++ 2 22.10.2011 10:23
Доделать в Паскале задание на записи Novenkaja Помощь студентам 24 26.06.2011 23:00
Задание в Паскале через записи Novenkaja Помощь студентам 0 10.05.2011 21:14
Что же нужно сделать?Как понять задание? Делфи.Типизованые файлы, записи. bunny Помощь студентам 1 20.11.2010 20:28
Задание.. AronakSS Паскаль, Turbo Pascal, PascalABC.NET 3 10.10.2010 21:19