Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Реализация кольцевой очереди на основе динамического распределения памяти.

52K
13 октября 2009 года
dron4ikkk
2 / / 13.10.2009
Привет,всем! Возникла проблемка с созданием кольцевой очереди на основе дин распр памяти.....прога должна выполнять след действия..(Пустая очередь содержит только заголовочный элемент),проверка заполненостиочереди проводить не нужно.
• проверку пустоты очереди
• добавление элемента в конец очереди
• удаление элемента из начала очереди
• вывод текущего состояния очереди на экран
а требования к ней..
• все действия должны быть оформлены как процедуры или функции
• добавлению/удалению должна предшествовать проверка возможности выполнения этих операций
• главная программа реализует следующий набор действий:
o инициализация пустого стека
o организация диалогового цикла с пользователем
У меня есть также исходник кольцевой очереди на основе массива..

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Panel1: TPanel;
    Label2: TLabel;
    Button3: TButton;
    Button4: TButton;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure OtobragenieOcheredi();
    procedure UdalenieIzOcheredi();
    procedure InicializaciiaOcheredi();
    function OcheredPusta(): Boolean;  // фунция возвращает истину(true) когда очередь пуста
    function OcheredPolna(): Boolean;
    procedure DobavlenieVOchered(Element: string);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
      Last: byte;{ukazatel na konec ocheredi}
      First: byte; {указатель на начало очереди}
      Pusto,Polno: Boolean; {Используются в процедурах определения пустоты и заполненности}
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mas: array [1..10]of string;// zadaem mas tipa string(chtobi bukvi)

implementation

{$R *.dfm}
procedure TForm1.DobavlenieVOchered(Element: string);
var
TempLast: Byte;
begin
TempLast:=Last;
Last:=Last+1; // uvelichenie na 1 (Inc(Last))  na sled element (perenos)
if Last=11 then Last:=1;
if Not(OcheredPolna()) then
begin
Pusto:=false;
mas[Last]:= element;
OtobragenieOcheredi();
end
else
begin
ShowMessage('Очередь полна');
Last:=TempLast;
end;
if Last=First then Polno:=true
else Polno:=false;
end;

function TForm1.OcheredPusta(): Boolean;
begin
result:=false;
if Pusto then result:=true;
end;

function TForm1.OcheredPolna(): Boolean;
begin
result:=false;
if Polno then result:=true; // esli bolshe 10 to istina
end;

procedure TForm1.UdalenieIzOcheredi();
var
TempFirst: Byte;
begin
TempFirst:=First; // Запоминаем хвост если удаление не удастся то восстановим его
First:=First+1; // uvelichenie na 1 (Inc(Last))  na sled element (perenos)
if First=11 then First:=1; // Если конец массива перескакиваем в начало
if not(OcheredPusta()) then
begin
mas[First]:='';
OtobragenieOcheredi();
end
else
begin
First:=TempFirst; // Удаление не удалось восстанавливаем хвост
ShowMessage('Удаление невозможно, очередь пуста!');
end;
if Last=First then Pusto:=true  // Хвост догнал голову
else Pusto:=false;
Polno:=false;
end;

procedure TForm1.InicializaciiaOcheredi();
begin
First:=10; // Следующим будет удаляться 0-й элемент 10 максимум
Last:=10; // Аналогично для добавления
Pusto:=true; // В начале очередь пуста
Polno:=false; // В начале очередь не заполнена
end;

procedure TForm1.OtobragenieOcheredi();
var
i: byte;  // peremennaa cikla
begin
for i:=0 to 9 do   //ochishat tablicy ot starih znach
StringGrid1.Cells[0,i]:='';   // vsec stroki pereber i ochichaem
if Not(OcheredPusta()) then
for i:=0 to 9 do   //vivodim  massiv  b cikle v tablicy
StringGrid1.Cells[0,i]:=mas[i+1] // izza 1-s otchet idet poetomy tak
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text='' then
ShowMessage('введите элемент для добавления')
else
DobavlenieVOchered(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
InicializaciiaOcheredi();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
UdalenieIzOcheredi();
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if OcheredPolna() then ShowMessage('Очередь полна')
else ShowMessage('Очередь не полна');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if OcheredPusta() then ShowMessage('Очередь пуста')
else ShowMessage('Очередь не пуста');
end;

end.


Помогите переделать пожалуйста...горю(((
288
13 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: dron4ikkk

Помогите переделать пожалуйста...горю(((



Чувствую таки сгорите :D
Это я к тому, что с таким вашим отношением вам вряд ли помогут.

30K
14 октября 2009 года
Mawrat
5 / / 13.07.2007
Цитата: dron4ikkk
Привет,всем! Возникла проблемка с созданием кольцевой очереди на основе дин распр памяти.....прога должна выполнять след действия..(Пустая очередь содержит только заголовочный элемент),проверка заполненостиочереди проводить не нужно. ...


Раз у тебя в задании: "на основе динамического распределения памяти", то реализация через массив (тем более статический) не подходит. Это тебе надо работу со списками реализовывать. Недавно делал демонстрационный проект по спискам - в помощь на другом форуме. Вот выкладываю. Добавление/удаление/изменение элементов, перемещение по элементам списка вперёд и назад, определение общего количества элементов, определение номера текущего элемента. Погляди - может поможет чем-то. Переделаешь под свою конкретику. Реализовать можно и FIFO (стек) и FILO. Проект выполнен через процедурный подход. Т. е. отдельный класс для реализации списка не создавался.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог