Добавил:
Hist
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Паскаль (I семестр) / K02-172 / 05 / deck_dy
.pas program deck_dynamic;
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
type
str_message = string[70];
node_pointer = ^node;
node = record
data:integer;
next,previous:node_pointer;
end;
procedure print_menu;
begin
writeln;
writeln('<< Њ…Ќћ „€ЌЂЊ€—…‘ЉЋѓЋ „…ЉЂ >>');
writeln('1 „®Ў ўЁвм н«Ґ¬Ґв ў з «®');
writeln('2 ‚лв йЁвм н«Ґ¬Ґв Ё§ з « ');
writeln('3 „®Ў ўЁвм н«Ґ¬Ґв ў еў®бв');
writeln('4 ‚лв йЁвм н«Ґ¬Ґв Ё§ еў®бв ');
writeln('5 ‚л室');
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
procedure queue_add_at_tail(var head,tail:node_pointer;data_to_add:integer);
var
new_tail:node_pointer;
begin
new(new_tail);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв}
new_tail^.data:=data_to_add;
new_tail^.next:=NIL;
new_tail^.previous:=tail;
if(tail<>NIL)then{Ґб«Ё еў®бв Ґбвм}
tail^.next:=new_tail;{гЄ §лў Ґ¬ ®ўл©}
tail:=new_tail;{¬ҐпҐ¬ Ї®ЁвҐа ®ўл© н«Ґ¬Ґв}
if(head=NIL)then{Ґб«Ё Ј®«®ўл Ґв}
head:=tail;{Ј®«®ў а ў еў®бвг}
end;
procedure queue_add_at_head(var head,tail:node_pointer;data_to_add:integer);
var
new_head:node_pointer;
begin
new(new_head);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв}
new_head^.data:=data_to_add;
new_head^.next:=head;
new_head^.previous:=NIL;
if(head<>NIL)then{Ґб«Ё Ј®«®ў Ґбвм}
head^.previous:=new_head;{гЄ §лў Ґ¬ ®ўго}
head:=new_head;{¬ҐпҐ¬ Ї®ЁвҐа ®ўл© н«Ґ¬Ґв}
if(tail=NIL)then{Ґб«Ё еў®бв Ґв}
tail:=head;{еў®бв а ўҐ Ј®«®ўҐ}
end;
function queue_get_at_head(var head,tail:node_pointer;var data_out:integer):boolean;
var
old_head:node_pointer;
begin
if head<>NIL then{Ґб«Ё еў®бв ҐЇгбв®©}
begin
data_out:=head^.data;{Ї®«гз Ґ¬ § 票Ґ}
old_head:=head;{г¤ «пҐ¬ н«Ґ¬Ґв}
head:=head^.next;
dispose(old_head);
queue_get_at_head:=true;
if(head=NIL)then{Ґб«Ё ⥯Ґам Ј®«®ў Їгбв п}
tail:=head;{гЁз⮦ Ґ¬ ®бв вЄЁ еў®бв }
end
else{Ё зҐ}
queue_get_at_head:=false;{®иЁЎЄ }
end;
function queue_get_at_tail(var head,tail:node_pointer;var data_out:integer):boolean;
var
old_tail:node_pointer;
begin
if tail<>NIL then{Ґб«Ё еў®бв ҐЇгбв®©}
begin
data_out:=tail^.data;{Ї®«гз Ґ¬ § 票Ґ}
old_tail:=tail;{г¤ «пҐ¬ н«Ґ¬Ґв}
tail:=tail^.previous;
dispose(old_tail);
queue_get_at_tail:=true;
if(tail=NIL)then{Ґб«Ё ⥯Ґам еў®бв Їгбв п}
head:=NIL;{гЁз⮦ Ґ¬ ®бв вЄЁ Ј®«®ўл}
end
else{Ё зҐ}
queue_get_at_tail:=false;{®иЁЎЄ }
end;
var
exit:boolean;
response:byte;
head,tail:node_pointer;
x:integer;
begin
exit:=false;
head:=NIL;
tail:=NIL;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
print_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:queue_add_at_head(head,tail,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў з «® ¤ҐЄ '));{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў з «® ¤ҐЄ }
2:begin
if queue_get_at_head(head,tail,x) then{Ґб«Ё ¤ҐЄ ҐЇгбв®©}
writeln('Џ®«г祮 Ё§ з « ¤ҐЄ : ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< „…Љ Џ“‘’Ћ‰ >>');{ўлў®¤Ё¬ error}
end;
3:queue_add_at_tail(head,tail,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў еў®бв ¤ҐЄ '));{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў еў®бв ¤ҐЄ }
4:begin
if queue_get_at_tail(head,tail,x) then{Ґб«Ё ¤ҐЄ ҐЇгбв®©}
writeln('Џ®«г祮 Ё§ еў®бв ¤ҐЄ : ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< „…Љ Џ“‘’Ћ‰ >>');{ўлў®¤Ё¬ error}
end;
5:exit:=true;{ўл室}
end;
end;
end.
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)
type
str_message = string[70];
node_pointer = ^node;
node = record
data:integer;
next,previous:node_pointer;
end;
procedure print_menu;
begin
writeln;
writeln('<< Њ…Ќћ „€ЌЂЊ€—…‘ЉЋѓЋ „…ЉЂ >>');
writeln('1 „®Ў ўЁвм н«Ґ¬Ґв ў з «®');
writeln('2 ‚лв йЁвм н«Ґ¬Ґв Ё§ з « ');
writeln('3 „®Ў ўЁвм н«Ґ¬Ґв ў еў®бв');
writeln('4 ‚лв йЁвм н«Ґ¬Ґв Ё§ еў®бв ');
writeln('5 ‚л室');
end;
function get_int(message:str_message):integer;
var
response:integer;
begin
write(message,'> ');
readln(response);
get_int:=response;
end;
procedure queue_add_at_tail(var head,tail:node_pointer;data_to_add:integer);
var
new_tail:node_pointer;
begin
new(new_tail);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв}
new_tail^.data:=data_to_add;
new_tail^.next:=NIL;
new_tail^.previous:=tail;
if(tail<>NIL)then{Ґб«Ё еў®бв Ґбвм}
tail^.next:=new_tail;{гЄ §лў Ґ¬ ®ўл©}
tail:=new_tail;{¬ҐпҐ¬ Ї®ЁвҐа ®ўл© н«Ґ¬Ґв}
if(head=NIL)then{Ґб«Ё Ј®«®ўл Ґв}
head:=tail;{Ј®«®ў а ў еў®бвг}
end;
procedure queue_add_at_head(var head,tail:node_pointer;data_to_add:integer);
var
new_head:node_pointer;
begin
new(new_head);{ᮧ¤ Ґ¬ ®ўл© н«Ґ¬Ґв}
new_head^.data:=data_to_add;
new_head^.next:=head;
new_head^.previous:=NIL;
if(head<>NIL)then{Ґб«Ё Ј®«®ў Ґбвм}
head^.previous:=new_head;{гЄ §лў Ґ¬ ®ўго}
head:=new_head;{¬ҐпҐ¬ Ї®ЁвҐа ®ўл© н«Ґ¬Ґв}
if(tail=NIL)then{Ґб«Ё еў®бв Ґв}
tail:=head;{еў®бв а ўҐ Ј®«®ўҐ}
end;
function queue_get_at_head(var head,tail:node_pointer;var data_out:integer):boolean;
var
old_head:node_pointer;
begin
if head<>NIL then{Ґб«Ё еў®бв ҐЇгбв®©}
begin
data_out:=head^.data;{Ї®«гз Ґ¬ § 票Ґ}
old_head:=head;{г¤ «пҐ¬ н«Ґ¬Ґв}
head:=head^.next;
dispose(old_head);
queue_get_at_head:=true;
if(head=NIL)then{Ґб«Ё ⥯Ґам Ј®«®ў Їгбв п}
tail:=head;{гЁз⮦ Ґ¬ ®бв вЄЁ еў®бв }
end
else{Ё зҐ}
queue_get_at_head:=false;{®иЁЎЄ }
end;
function queue_get_at_tail(var head,tail:node_pointer;var data_out:integer):boolean;
var
old_tail:node_pointer;
begin
if tail<>NIL then{Ґб«Ё еў®бв ҐЇгбв®©}
begin
data_out:=tail^.data;{Ї®«гз Ґ¬ § 票Ґ}
old_tail:=tail;{г¤ «пҐ¬ н«Ґ¬Ґв}
tail:=tail^.previous;
dispose(old_tail);
queue_get_at_tail:=true;
if(tail=NIL)then{Ґб«Ё ⥯Ґам еў®бв Їгбв п}
head:=NIL;{гЁз⮦ Ґ¬ ®бв вЄЁ Ј®«®ўл}
end
else{Ё зҐ}
queue_get_at_tail:=false;{®иЁЎЄ }
end;
var
exit:boolean;
response:byte;
head,tail:node_pointer;
x:integer;
begin
exit:=false;
head:=NIL;
tail:=NIL;
while not exit do{Ї®Є Ґ 㦮 ўл©вЁ}
begin
print_menu;{Ї®Є §лў Ґ¬ ¬Ґо}
response:=get_int('‚лЎҐаЁвҐ ў аЁ в');{зЁв Ґ¬ ®вўҐв Ї®«м§®ў ⥫п}
writeln;
case response of
1:queue_add_at_head(head,tail,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў з «® ¤ҐЄ '));{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў з «® ¤ҐЄ }
2:begin
if queue_get_at_head(head,tail,x) then{Ґб«Ё ¤ҐЄ ҐЇгбв®©}
writeln('Џ®«г祮 Ё§ з « ¤ҐЄ : ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< „…Љ Џ“‘’Ћ‰ >>');{ўлў®¤Ё¬ error}
end;
3:queue_add_at_tail(head,tail,get_int('‚ўҐ¤ЁвҐ, зв® ¤®Ў ўЁвм ў еў®бв ¤ҐЄ '));{¤®Ў ў«ҐЁҐ н«Ґ¬Ґв ў еў®бв ¤ҐЄ }
4:begin
if queue_get_at_tail(head,tail,x) then{Ґб«Ё ¤ҐЄ ҐЇгбв®©}
writeln('Џ®«г祮 Ё§ еў®бв ¤ҐЄ : ',x){ўлў®¤Ё¬ н«Ґ¬Ґв}
else{Ё зҐ}
writeln('<< „…Љ Џ“‘’Ћ‰ >>');{ўлў®¤Ё¬ error}
end;
5:exit:=true;{ўл室}
end;
end;
end.
Соседние файлы в папке 05