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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2015, 12:43   #1
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

нужно осуществить сортировку вставкой, чтобы осуществить упорядоченность элементов,
нужна ваша помощь
Код:
unit list_unit;

interface

{uses
      Classes, SysUtils;}
      
type
 TDataTipe = integer;
 PTItem = ^TItem;
 TItem = Record
   Data : TDataTipe;
   Next : PTItem;
 end;
 
Procedure Inc(var Item: PTItem; Data: TDataTipe);
{Function Sort(a,b: integer) : boolean;}
Procedure Showlist(p : PTItem);

implementation

//Добавляем в список
Procedure Inc(var Item: PTItem; Data: TDataTipe);
var
  res : PTItem;
begin
    new(res);
    res^.Data:=Data;
    res^.Next:=Item;
    Item := res;
end;
Код:
uses
  list_unit;
  
var simbol:string; IOResult:integer;
  list : PTItem;
  i, n_chastey, chislovaya_perem : integer;
  
begin
  writeln('Сколько чисел вы хотите ввести?');
  repeat
  readln(simbol); val(simbol,n_chastey,IOResult);
  if IOResult<>0 then writeln('Введите количество чисел еще раз');
  until IOResult=0;
  for i := 1 to n_chastey do
  begin
    writeln('Введите число №', i);
    repeat
    readln(simbol); val(simbol,chislovaya_perem,IOResult);
    if IOResult<>0 then writeln('Введите число №', i);
    until IOResult=0;
    Inc(list, chislovaya_perem);
  end;
  
  writeln('Список:');
  Showlist(list);
end.
Можно и любую другую сортировку, Список разделить на n частей, каждый сортировать независимо, затем провести слияние в выходной список. я все сделал кроме "каждый сортировать независимо"
Поможете с кодом

Последний раз редактировалось Stilet; 28.10.2015 в 15:30.
Никита757 вне форума Ответить с цитированием
Старый 01.11.2015, 14:31   #2
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Есть код сортировки, не поможете отредактировать его, чтобы сортировка заработала?
Код:
unit list_unit;

interface

{uses
      Classes, SysUtils;}
      
type
 TDataTipe = integer;
 PTItem = ^TItem;
 TItem = Record
   Data : TDataTipe;
   Next : PTItem;
 end;
 
Procedure Inc(var Item: PTItem; Data: TDataTipe);
{Function Sort(a,b: integer) : boolean;}
Procedure Showlist(p : PTItem);

implementation

//Добавляем в список
Procedure Inc(var Item: PTItem; Data: TDataTipe);
var
  res : PTItem;
begin
    new(res);
    res^.Data:=Data;
    res^.Next:=Item;
    Item := res;
end;


// Сортируем
 
procedure Showlist(p: PTItem);
begin
  while p <> nil do
  begin
    writeln(p^.Data);
    p := p^.next;
  end;
end;
 
end.

Последний раз редактировалось Stilet; 01.11.2015 в 16:11.
Никита757 вне форума Ответить с цитированием
Старый 01.11.2015, 16:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Есть код сортировки
Где? О_о
Тебе сортир по спику нужен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2015, 16:21   #4
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Можно как-нибудь этот код подкорректировать (метод пузырька)?
Код:
 procedure SortAsc(var aArr : array of TDatatipe);
var
  PStart, PEnd, PCur, Next : Tdatatipe;
  Data : TDatatipe;
begin
  PStart := @aArr;          
  PEnd := @aArr[High(aArr)];
  while PStart <> PEnd do begin
    PCur := PStart; 
    PNext := PCur;
    Inc(PNext);     
    while PCur <> PEnd do begin
      if PCur^ > PNext^ then begin
        Data := PCur^;
        PCur^ := PNext^;
        PNext^ := Data;
      end;
   
      Inc(PCur);
      Inc(PNext);
    end;
    Dec(PEnd); 
  end;
end;

Последний раз редактировалось Stilet; 01.11.2015 в 16:42.
Никита757 вне форума Ответить с цитированием
Старый 01.11.2015, 16:48   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну переписать все. Сортировка вставками это всетки не пузырек.
Код:
procedure Sorta(Head: PTItem);
var i,j,min:PItem;v:TDataTipe;
begin
 i:=Head;
 while i<>nil do begin
   min:=i;
   j:=i^.Next; while j<>nil do begin if i^.Data<j^.Data then min:=j;j:=j^.next; end;
   if i<>min then begin
    v:=i^.Data; 
    i^.Data:=j^.data;
    j^.data:=v;
   end;
   i:=i^.Next;
 end;
end;
Как-то так вот...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2015, 21:28   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Где? О_о
Тебе сортир по спику нужен?
Гы-гы. Я не паскуалист, я - сишник. Но, если будет полезно то вот.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 01.11.2015 в 21:30.
Smitt&Wesson вне форума Ответить с цитированием
Старый 02.11.2015, 21:49   #7
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Вот такая сортировка получилась, но она все равно не сортирует числа
Код:
procedure Sorta(Head: PTItem);
var i,j,min:PtItem;v:TDataTipe;
begin
 i:=Head;
 while i<>nil do begin
   min:=i;
   j:=i^.Next;
   while j<>nil do
   begin
   if i^.Data<j^.Data then
   min:=j;
   j:=j^.next;
   end;
   if i<>min then
   begin
    v:=i^.Data; 
    i^.Data:=min^.data; 
    min^.data:=v;
   end;
   i:=i^.Next;
 end;
end;

Последний раз редактировалось Stilet; 02.11.2015 в 22:25.
Никита757 вне форума Ответить с цитированием
Старый 02.11.2015, 22:27   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

И конечно же "отладка" - нечто неведомое и ужасное для школьного уровня?
Ну хотя бы не постеснялся бы код показать полностью. Копипастить втупую все умеют.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 22:32   #9
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Вот он
Код:
unit list_unit;

interface

      
type
 TDataTipe = integer;
 PTItem = ^TItem;
 TItem = Record
   Data : TDataTipe;
   Next : PTItem;
 end;
 
Procedure Inc(var Item: PTItem; Data: TDataTipe);
{Function Sort(a,b: integer) : boolean;}
Procedure Showlist(p : PTItem);

implementation

//Добавляем в список
Procedure Inc(var Item: PTItem; Data: TDataTipe);
var
  res : PTItem;
begin
    new(res);
    res^.Data:=Data;
    res^.Next:=Item;
    Item := res;
end;

procedure Sorta(Head: PTItem);
var i,j,min:PtItem;v:TDataTipe;
begin
 i:=Head;
 while i<>nil do begin
   min:=i;
   j:=i^.Next;
   while j<>nil do
   begin
   if i^.Data<j^.Data then
   min:=j;
   j:=j^.next;
   end;
   if i<>min then
   begin
    v:=i^.Data; 
    i^.Data:=min^.data; 
    min^.data:=v;
   end;
   i:=i^.Next;
 end;
end;
 
 
procedure Showlist(p: PTItem);
begin
  while p <> nil do
  begin
    writeln(p^.Data);
    p := p^.next;
  end;
end;
  
end.

Последний раз редактировалось Stilet; 02.11.2015 в 22:37.
Никита757 вне форума Ответить с цитированием
Старый 02.11.2015, 22:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну. Нормально он работает. Я проверил.
Код:
var i:PTItem;
begin
 i:=nil;
 aInc(i,5);aInc(i,100);aInc(i,15);
  Showlist(i);
  Sorta(i);
  Showlist(i);
end;
Дает
Цитата:
15
100
5
100
15
5
Все сортируется как положено.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка вставкой для стека. Morozy4 Помощь студентам 0 04.06.2012 18:54
Сортировка пузырьком, выбором, вставкой. vadiprog Помощь студентам 3 28.11.2011 17:05
Сортировка вставкой Damer Помощь студентам 11 26.05.2010 01:07
Структура, сортировка вставкой Slimikus Общие вопросы C/C++ 1 30.04.2010 15:40
Сортировка вставкой MAKEDON Общие вопросы C/C++ 1 26.04.2009 12:30