Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите решить задачу в Паскале


Автор: Silena 24.3.2008, 08:15
Задан массив из 8 строк.В каждой строке  фамилия школьника_оценка за олимпиадную работу_N школы". Отсортировать по
убыванию балла, распечатать. Распечатать отдельно фамилии отличников

Автор: Alix 24.3.2008, 12:13
Ок. Тебе нужно сделать так:
Код
type 
  TPupil = record
    surname : string[32];
    score : byte;
    number : integer;
  end;

  TArray = array [1..8] of TPupil;

var
  arr : TArray;

Теперь чтобы прочитать фамилию ученика из 3-го элемента надо написать
Код
arr[3].surname

Далее идем сюда http://forum.vingrad.ru/faq/Vingrad-help-center.html и подбираем метод сортировки на свой вкус. Например, самое простое - методом пузырька. Везде в тех примерах полагается, что у нас array of integer, а у нас - запись. Все что надо - обращения типа arr[i] заменить на arr[i].score. Т.е. ключевые процедуры изменяться примерно так:
Код
procedure PrintArray(iArray : TArray);
var
  i : integer;
begin
  for i := 1 to MAX do
    WriteLn(iArray[i].surname:33, iArray[i].score:4, iArray[i].number);
end;

procedure Swap(var iArray : TArray; iPos1, iPos2 : integer);
var
  tmp : TPupil;
begin
  tmp := iArray[iPos1];
  iArray[iPos1] := iArray[iPos2];
  iArray[iPos2] := tmp;
end;

procedure BubbleSort(var iArray : TArray);
var
  i, j : integer;
begin
  for i := 1 to MAX - 1 do
    for j := 1 to MAX - i do
      if iArray[j].score > iArray[j+1].score then
         swap(iArray, j, j + 1);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)