Другие языки программирования и технологии

Delphi - Сортировка массива и вывод его в стринг грид

Здравствуйте! Подскажите, пожалуйста. Есть задание: выдать список студентов по убыванию среднего балла за период обучения. Средний балл каждого студента я нашла, загнала его в массив. Но не могу теперь отсортировать. Все данные выводятся в стринг грид. Помогите с сортировкой (
Задание с записями. Вот они:
type
students = Record
fam:string[15]; //фамилия студента
pol:string[5]; // пол
ocenki:array[1..15] of integer; //оценки
life:string[5]; //где живет
sp:integer; //семейное положение
deti:integer; //наличие детей
End;
Вот сама процедура, где все и должно происходить
procedure TForm3.N4Click(Sender: TObject);
var sr:real; num,n:integer; sbal:array[1..15] of real;
begin
reset(f);
Stringgrid1.RowCount:=2;
i:=1;
num:=0;
sr:=0;
sbal[i]:=0;
while not eof(f) do begin
read(f,p);
for n := 1 to length(p.ocenki)-1 do
num:=num+p.ocenki[n];
sr:=num/length(p.ocenki);//считаем средний балл
sbal[i]:=sr;//формирование массива среднего балла студентов
memo1.lines.add(floattostrF(sbal[i],fffixed,10,2));
with stringgrid1 do begin
Cells[0,i]:=p.fam;
Cells[1,i]:=p.pol;
Cells[2,i]:=floattostrF(sr,Fffixed,10,2);
Cells[3,i]:=p.life;
Cells[4,i]:=inttostr(p.sp);
Cells[5,i]:=inttostr(p.deti);
RowCount:=RowCount+1;
end;
Inc(i);
num:=0;
end;
CloseFile(f);
end;
Знаю, что задача решена, но позволю себе немного покомментировать ваш код.

Сначала ничего интересного. Инициализация переменных и т. д. А потом начинается

while not eof(f) do begin // пока не конец файла
read(f,p); // читаем очередную запись

for n := 1 to length(p.ocenki)-1 do
num:=num+p.ocenki[n];
sr:=num/length(p.ocenki);//считаем средний балл

sbal[i]:=sr;//формирование массива среднего балла студентов

Вот оно! Вы вычислили средний балл для записи, считанной из файла и записали его в локальный массив (замечу, размерностью 15 элементов). Что будет, если в файле окажется больше 15 записей не думали? Выход за границу массива.

Дальше вы в мемо зачем-то записываете средний балл, заполняете строку грида и наращиваете счетчик.

end; // конец цикла

После чтения всех записей из файла имеем следующее: грид заполнен записями в том порядке, в каком они были прочитаны из файла, а массив содержит в том же порядке средние баллы студентов.

А вот теперь начинается самое интересное, надо отсортировать записи по среднему баллу. Вот только вопрос, что сортировать? Напрашивается ответ, массив со средними баллами. Правильно, но есть нюанс. Одновременно с перестановками в массиве нужно делать перестановки и в гриде. Только в этом случае будет достигнут результат. Не буду говорить, что это невозможно. Вполне возможно, правда, при этом придется менять местами строки в гриде, что может оказаться несколько трудным для новичка. Гораздо проще прочитать файл в динамический массив записей с дополнительным полем "средний_балл", отсортировать массив по этому полю и в конце вывести его в грид.
КС
Константин Смирнов
59 626
Лучший ответ
http ://www. cyberforum.ru/delphi-beginners/ thread223309. html
Андрей Перлыгин не получается у меня подогнать под свое (