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


Автор: AndrRus 28.4.2007, 16:05
Задача состоит в следующем:
Считать с файла информацию об автомобилях, затем выделить с одинаковым номером и все это посимвольно отсортировать по марке автомобиля и номерам.

Помогите мне произвести сортировку, вот сам код:
Сортировка:
Код

Procedure sort (var snach:auto);
var sp:auto;
    flag:boolean;
    i:integer;
begin
     flag:=true;
     while flag do
     begin
          flag:=false;
          sp:=snach;
          while sp^.next<>snach do
          begin
               i:=1;
               repeat
                     if abc (sp^.marka[i]) > abc(sp^.next^.marka[i])
                     then begin
                          if sp=snach then snach:=sp^.next
                          obmen(sp);
                          flag:=true;
                          i:=4;
                     end
                     else flag:=false
               until i=4;
               sp:=sp^.next;
          end
     end
flag:=true;
while flag do
      begin
           flag:=false;
           sp:=snach;
           while sp^.next<>snach do
           begin
                i:=1;
                repeat
                if abc(sp^.nomer[i]) > abc(sp^.next^.nomer[i])
                then begin
                     if sp=snach then snach:=sp^.next
                     obmen(sp);
                     flag:=true;
                     i:=4;
                end
                sp:=sp^.next;
           end
      end
end;


Структура списка:
Код

Program spisok (input, output);
type
     auto = ^T_auto;
     T_auto = record
            next: auto;
            pred: auto;
            fam: array[1..10] of char;
            inic: array[1..4] of char;
            marka: array[1..15] of char;
            nomer: array[1..6] of char;
            year: array[1..4] of char;
end;
var snach, snach1: auto;


Функция обмена:
Код

Procedure obmen (var sp1: auto);
var r1, l2, r2:auto;
begin
     r1:=sp1^.pred;
     l2:=sp1^.next;
     r2:=l2^.next;
     sp1^.pred:=l2;
     r1^.next:=l2;
     sp1^.next:=r2;
     l2^.pred:=r1;
     l2^.next:=sp1;
     r2^.pred:=sp1;
     sp1:=l2;
end;


Функция abc:
Код

Function abc (a:char):integer
var l:integer
    d:string[108]
begin
     l:=0
     D:='0123456789AaBbCc...Zz'
     repeat
           l:=l+1
           until A=D[i]
           abc:=l
end;


Вид файла ввода:
Код

Fitisov   A.P. BMW            7136471 1987
Pavlov    K.L. Volvo          7115886 1993
Korolev   F.M. Lada           6322917 1991
Putin     V.V. Hammer         0000001 2007
Ivanov    S.V. Toyota         0000002 2006

Автор: AndrRus 28.4.2007, 20:49
Проблему решил, тема больше не актуальна.

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