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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2013, 23:23   #1
TImRik
 
Регистрация: 22.12.2013
Сообщений: 4
По умолчанию Списки. Сортировка записи. Делфи

Код:
Program Lab9;
{$APPTYPE CONSOLE}
Uses
 SysUtils;
Type
 point=^zap;
 zap=record
  det:string[10];
  diam:integer;
  p:point;
 end;

procedure SortBublInf(nach:point);
var
  tmp,rab:point;
  tmps:integer;
  stroka:string;
begin
  New(tmp);
  rab:=nach; {рабочая ссылка, становимся на вершину стека}
  while rab<>nil do {пока мы не дойдём до конца стека делать}
  begin
    tmp:=rab^.p; {перейдём на следующий элемент}
    while tmp<>nil do {пока не конец стека делать}
    begin
      if tmp^.diam<rab^.diam then {проверяем следует ли менять элементы}
      begin
        tmps:=tmp^.diam; {стандартная замена в 3 операции}
        tmp^.diam:=rab^.diam;
        rab^.diam:=tmps;
        stroka:=tmp^.det;
        tmp^.det:=rab^.det;
        rab^.det:=stroka;
      end;
      tmp:=tmp^.p {переход к следующему элементу}
    end;
    rab:=rab^.p {переход к следующему элементу}
  end
end;


Var
 r,q:point;
 a:zap;
Begin
 new(r);
 r^.p:=nil;
 Writeln('Input surnname');
 Readln(r^.det);
 writeln ('Room');
 readln (r^.diam);
 Writeln('Input surname or end');
 ReadLn(a.det);
 while a.det<>'end' do
  begin
   writeln ('Room');
   Readln(a.diam);
   q:=r;
   new(r);
   r^.det:=a.det;
   r^.diam:=a.diam;
   r^.p:=q;
   Writeln('Input surname or end');
   ReadLn(a.det);
  end;
 q:=r;
 if q=nil then
  WriteLn('No records')
 else
  while q<>nil do
   begin
    WriteLn(q^.det:11,' ',q^.diam:1);
    q:=q^.p;
   end;
 Readln;
 SortBublInf (r^.p);
 q:=r;
 if q=nil then
  WriteLn('No records')
 else
  while q<>nil do
   begin
    WriteLn(q^.det:11,' ',q^.diam:1);
    q:=q^.p;
   end;
 readln;
end.
Условие:
С клавиатуры вводятся записи, содержащие сведения о проживающих в гостинице (номер комнаты и фамилия). Сформировать и вывести список проживающих, упорядоченный по номерам комнат. Добавить новую запись, введенную с клавиатуры.
Список сортируется, но первый элемент всегда остаётся на своём месте. Не понимаю в чём ошибка. Подскажите, если кто разглядел.
TImRik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi списки и записи... world12_tk Помощь студентам 7 17.01.2012 20:42
Списки,сортировка. Muro Общие вопросы C/C++ 0 04.06.2010 04:27
Сортировка по имени (списки) sunman Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2010 22:38
Записи, Стеки, Очереди, Списки. Вилли Помощь студентам 2 04.05.2010 18:40
Задача: списки/сортировка uranus Паскаль, Turbo Pascal, PascalABC.NET 4 22.05.2007 14:34