IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Реализация очереди., Реализация кольцевой очереди на основе динамического распределения пам
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Привет,всем! Возникла проблемка с созданием кольцевой очереди на основе дин распр памяти.....прога должна выполнять след действия..(Пустая очередь содержит только заголовочный элемент),проверка заполненостиочереди проводить не нужно.
• проверку пустоты очереди
• добавление элемента в конец очереди
• удаление элемента из начала очереди
• вывод текущего состояния очереди на экран
а требования к ней..
• все действия должны быть оформлены как процедуры или функции
• добавлению/удалению должна предшествовать проверка возможности выполнения этих операций
• главная программа реализует следующий набор действий:
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.
Помогите переделать пожалуйста...горю(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 12:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name