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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 12:25   #1
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
Восклицание Работа со списками

Собственно задание:
Необходимо вывести список школьников по классам: сначала всех учеников 9 класса, затем – 10, затем – 11. Внутри одного класса порядок вывода фамилий должен быть таким же, как на входе.

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

Код:
type
  Ukazatel = ^S;
  S = Record
    Klass: integer;
    Fam: String;
    Next: Ukazatel ;
  End;

var
  Head, x, curr, prev: Ukazatel;
  kol: Integer;
  str, strFam, strKlass: String;

function getKlass(var str: String): Integer;
begin
  delete(str, pos(' ', str), str.Length + 1);
  getKlass := StrToInt(str);
end;

function getFam(var str: String): String;
begin
  delete(str, 1, 2);
  getFam := str;
end;

procedure Init(var str: String);
var
  strKlass, strFam: String;
begin
  strKlass := str;
  strFam := str;
  New(x^.Next);
  x := x^.Next;
  x^.Klass := getKlass(strKlass);
  x^.Fam := getFam(strFam);
  x^.Next := nil;
end;

begin
  Writeln('Сколько человек будем добавлять: ');
  readln(kol);
  Writeln('Введите номер класса и фамилю через пробел: ');
  readln(str);
  
  strFam := str;
  strKlass := str;
  
  New(x); 
  x^.Klass := getKlass(strKlass); 
  x^.Fam := getFam(strFam);
  x^.Next := nil; 
  Head := x; 
  
  while kol - 1 <> 0 do
  
  begin
    Writeln('Введите номер класса и фамилю через пробел: ');
    readln(str);
    Init(str);
    dec(kol);
  end;
  
  writeln('Результат');
  
  x := Head;
  curr := Head;
  
  {                    Тут сортировка                          }   
  while x <> nil do
  begin
    if(curr ^.Klass < x^.Klass) then
    begin
      prev := x^.Klass;
      x^.Klass := curr;
      curr := prev;
    end;
    x := x^.Next;
  end;
  {                    Тут сортировка                          }
  
  x := Head;
  while x <> nil do
  begin
    Writeln('Фамилия: ', x^.Fam, ' Класс: ', x^.Klass);
    x := x^.Next;
  end;
end.
iCaesy вне форума Ответить с цитированием
Старый 29.09.2013, 12:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Думаю тут без сортировки обойтись можно.
Код:
for i:=9 to 11 do begin
  x:=head;
  while x <> nil do begin
   if(x^.Klass=i) then
    begin
     Выводим x^;
    end;
    x := x^.Next;
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2013, 13:53   #3
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

Спасибо большое!
iCaesy вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списками C# Serg94 Помощь студентам 4 04.05.2012 22:29
Работа со списками Kumigy Помощь студентам 1 23.12.2010 16:24
Работа со списками puzik_off Фриланс 8 30.12.2009 12:02
c++. Работа со списками megavolt91 Помощь студентам 0 14.06.2009 21:31
Работа со списками Dimo444ka Помощь студентам 2 01.06.2008 16:34