Добавил:
Hist
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Паскаль (I семестр) / K02-172 / 05 / queue_st
.pas {$R+}
program queue_static;
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
const
MAX_FIFO = 5;
type
str_message = string[70];
arr = record
data:array[1..MAX_FIFO]of integer;
head,tail:byte;
end;
procedure print_menu;
begin
writeln;
writeln('<< Њ…Ќћ ‘’Ђ’€—…‘ЉЋ‰ Ћ—…ђ…„€ >>');
writeln('1 „®Ў ўЁвм н«Ґ¬Ґв');
writeln('2 ‚лв йЁвм н«Ґ¬Ґв');
writeln('3 ‚л室');
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
function shift(start:byte;step:shortint):byte;
var
new_pos:integer;
begin
new_pos:=step+start;
if(new_pos>MAX_FIFO)then
new_pos:=new_pos-MAX_FIFO;
if(new_pos<1)then
new_pos:=MAX_FIFO-new_pos;
shift:=new_pos;
end;
function queue_add(var _queue:arr;data_to_add:integer):boolean;
begin
if(shift(_queue.head,-1)<>_queue.tail)then{Ґб«Ё ¤«Ё ®зҐаҐ¤Ё Ґ ¬ ЄбЁ¬ «м }
begin
if(_queue.head=0)then{Ґб«Ё ®зҐаҐ¤м Їгбв п}
begin
_queue.head:=1;{ЁЁжЁ «Ё§Ёа㥬 Ј®«®ўг Ё еў®бв}
_queue.tail:=1;
end
else{Ё зҐ}
_queue.tail:=shift(_queue.tail,1);{¤ўЁЈ Ґ¬ еў®бв}
_queue.data[_queue.tail]:=data_to_add;{¤®Ў ў«пҐ¬ н«Ґ¬Ґв ў Є®Ґж}
queue_add:=true;
end
else{Ё зҐ}
queue_add:=false;{®иЁЎЄ }
end;
function queue_get(var _queue:arr;var data_out:integer):boolean;
begin
if(_queue.head<>0)then{Ґб«Ё ®зҐаҐ¤м ҐЇгбв п}
begin
data_out:=_queue.data[_queue.head];{Ї®«гз Ґ¬ § 票Ґ}
_queue.head:=shift(_queue.head,1);{¤ўЁЈ Ґ¬ Ј®«®ўг}
if(shift(_queue.head,-1)=_queue.tail)then{Ґб«Ё ®зҐаҐ¤м Їгбв п}
begin
_queue.head:=0;{®Ўг«пҐ¬ Ї®ЁвҐал}
_queue.tail:=0;
end;
queue_get:=true;
end
else{Ё зҐ}
queue_get:=false;{®иЁЎЄ }
end;
var
exit:boolean;
response:byte;
_queue:arr;
x:integer;
begin
exit:=false;
_queue.head:=0;
_queue.tail:=0;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
print_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:if not queue_add(_queue,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў ®зҐаҐ¤м'))then{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў ®зҐаҐ¤м}
writeln('<< Ћ—…ђ…„њ Џ…ђ…ЏЋ‹Ќ…ЌЂ >>');
2:begin
if queue_get(_queue,x) then{Ґб«Ё ®зҐаҐ¤м ҐЇгбв п}
writeln('Џ®«г祮 Ё§ ®зҐаҐ¤Ё: ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< Ћ—…ђ…„њ Џ“‘’Ђџ >>');{ўлў®¤Ё¬ error}
end;
3:exit:=true;{ўл室}
end;
end;
end.
program queue_static;
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
const
MAX_FIFO = 5;
type
str_message = string[70];
arr = record
data:array[1..MAX_FIFO]of integer;
head,tail:byte;
end;
procedure print_menu;
begin
writeln;
writeln('<< Њ…Ќћ ‘’Ђ’€—…‘ЉЋ‰ Ћ—…ђ…„€ >>');
writeln('1 „®Ў ўЁвм н«Ґ¬Ґв');
writeln('2 ‚лв йЁвм н«Ґ¬Ґв');
writeln('3 ‚л室');
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
function shift(start:byte;step:shortint):byte;
var
new_pos:integer;
begin
new_pos:=step+start;
if(new_pos>MAX_FIFO)then
new_pos:=new_pos-MAX_FIFO;
if(new_pos<1)then
new_pos:=MAX_FIFO-new_pos;
shift:=new_pos;
end;
function queue_add(var _queue:arr;data_to_add:integer):boolean;
begin
if(shift(_queue.head,-1)<>_queue.tail)then{Ґб«Ё ¤«Ё ®зҐаҐ¤Ё Ґ ¬ ЄбЁ¬ «м }
begin
if(_queue.head=0)then{Ґб«Ё ®зҐаҐ¤м Їгбв п}
begin
_queue.head:=1;{ЁЁжЁ «Ё§Ёа㥬 Ј®«®ўг Ё еў®бв}
_queue.tail:=1;
end
else{Ё зҐ}
_queue.tail:=shift(_queue.tail,1);{¤ўЁЈ Ґ¬ еў®бв}
_queue.data[_queue.tail]:=data_to_add;{¤®Ў ў«пҐ¬ н«Ґ¬Ґв ў Є®Ґж}
queue_add:=true;
end
else{Ё зҐ}
queue_add:=false;{®иЁЎЄ }
end;
function queue_get(var _queue:arr;var data_out:integer):boolean;
begin
if(_queue.head<>0)then{Ґб«Ё ®зҐаҐ¤м ҐЇгбв п}
begin
data_out:=_queue.data[_queue.head];{Ї®«гз Ґ¬ § 票Ґ}
_queue.head:=shift(_queue.head,1);{¤ўЁЈ Ґ¬ Ј®«®ўг}
if(shift(_queue.head,-1)=_queue.tail)then{Ґб«Ё ®зҐаҐ¤м Їгбв п}
begin
_queue.head:=0;{®Ўг«пҐ¬ Ї®ЁвҐал}
_queue.tail:=0;
end;
queue_get:=true;
end
else{Ё зҐ}
queue_get:=false;{®иЁЎЄ }
end;
var
exit:boolean;
response:byte;
_queue:arr;
x:integer;
begin
exit:=false;
_queue.head:=0;
_queue.tail:=0;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
print_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:if not queue_add(_queue,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў ®зҐаҐ¤м'))then{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў ®зҐаҐ¤м}
writeln('<< Ћ—…ђ…„њ Џ…ђ…ЏЋ‹Ќ…ЌЂ >>');
2:begin
if queue_get(_queue,x) then{Ґб«Ё ®зҐаҐ¤м ҐЇгбв п}
writeln('Џ®«г祮 Ё§ ®зҐаҐ¤Ё: ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< Ћ—…ђ…„њ Џ“‘’Ђџ >>');{ўлў®¤Ё¬ error}
end;
3:exit:=true;{ўл室}
end;
end;
end.
Соседние файлы в папке 05