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

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

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

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

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

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

Описать программный интерфейс для работы со списком целых чисел и оформить его в виде отдельного модуля. Реализовать сортировку списка следующим способом список разделить на n частей, каждый сортировать независимо, затем провести слияние в выходной список.
На Паскале. Можно код?
Никита757 вне форума Ответить с цитированием
Старый 16.09.2015, 20:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Описать программный интерфейс для работы со списком целых чисел и оформить его в виде отдельного модуля.
Взял из своей копилки, и адаптировал в модуль:
Код:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
      Classes, SysUtils;
type
 TDataTipe=integer;
 PTItem=^TItem;
 TItem=Record
  Data:TDataTipe;
  Prev,Next:PTItem;
 end;
var
 First,CurItem:PTItem;

 Function Ins(PrevItem:PTItem;AData:TDataTipe):PTItem;
 Function Sort(a,b:integer):boolean;

implementation



//Добавляем в список**********************
  Function Ins(PrevItem:PTItem;AData:TDataTipe):PTItem;
  begin
    new(result);
    result^.Data:=AData;
    Result^.Prev:=PrevItem;
    Result^.Next:=nil;
      if PrevItem<>nil then begin
        if (PrevItem^.Next<>nil) then
         PrevItem^.Next^.Prev:=Result;
        PrevItem^.Next:=Result;
      end;
  end;


// Сортируем ***************************
 Function Sort(a,b:integer):boolean;
 var q:PTItem;s:TDataTipe;j,i:integer;
 begin
  q:=First; i:=0;
  while (q<>nil) and(a<=b) do begin inc(i); j:=i;
   CurItem:=q;
   if i>=a then
		     while (CurItem<>nil) and(j<=b) do begin inc(j);
		      if CurItem^.Data<q^.Data then begin
		        s:=CurItem^.Data;
		        CurItem^.Data:=q^.Data;
		        q^.Data:=s;
		      end;
		      CurItem:=CurItem^.Next;
		     end;
   q:=q^.Next;
  end;
 end;

end.
Не проверял что правда, но думаю как идея подойдет.
Цитата:
провести слияние в выходной список.
Это уже сам
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модули lolwto Помощь студентам 0 22.03.2013 12:50
библиотечные модули пользователя,модули CRT и DOS лерка:) Паскаль, Turbo Pascal, PascalABC.NET 0 08.01.2012 14:57
модули Юляшко Паскаль, Turbo Pascal, PascalABC.NET 4 27.04.2010 21:11
Модули voron.kz Общие вопросы Delphi 4 20.02.2010 14:31