МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ (МИНТРАНС РОССИИ)
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА (РОСЖЕЛДОР)
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ СООБЩЕНИЯ (СГУПС)
Кафедра “Информационные технологии транспорта”
ЛАБОРАТОРНАЯ РАБОТА №3_в
По дисциплине “Информатика и программирование”
Тема: «Забавный магазин» с использованием односвязных списков»
Выполнил |
Проверил |
|||
________________ подпись |
Студент гр. ПИ-111Денисова Е.И. |
________________ подпись |
Канд. техн. наук доцент Е.В. Редьков |
|
________________ дата |
________________ дата |
Новосибирск - 2008 г.
Разработать программу для имитации работы “забавного магазина”, обеспечив выполнение следующих операций:
1 Открытие магазина (очередь и стек - пусты)
2 Ввод имени покупателя с клавиатуры (имя добавляется в очередь)
3 Ввод названия товара с клавиатуры (товар добавляется в стек)
4 Продажа товара покупателю (товар извлекается из стека, а покупатель – из очереди), пара данных товар - покупатель выводятся на экран.
5 Закрытие на перерыв (данные стека и очереди сохраняются в файлах)
6 Открытие магазина после перерыва (стек и очередь восстановить из файлов)
6 Проверка наличия товара в стеке (поиск по названию)
7 Проверка наличия покупателя в очереди (поиск по имени)
8 Завершение работы программы.
Рекомендации:
Для хранения данных в стеке и очереди используйте односвязные списки.
Программа:
Program s1;
uses crt;
type
s3=string[7];
f=file of s3;
pz=^z;
z=record zs:s3;
next:pz;end;
var top_s:pz;top_o:pz;nm:integer;name:s3;tempf:pz;f_s,f_o:f;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~dobavit element v stek~~~~~}
Procedure adf_s1(var top:pz;name:s3);
var temp:pz;
begin temp:=top;
new(top);top^.next:=temp;top^.zs:=name
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~dobavit element v ochered~~~~~~~}
Procedure adl_s1(var top:pz;name:s3);
var temp:pz;
begin
if top=nil then
begin new(top);top^.next:=nil;top^.zs:=name
end
else begin temp:=top;while temp^.next<>nil do temp:=temp^.next;
new(temp^.next);
temp^.next^.zs:=name;temp^.next^.next:=nil;
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~~vivod na ikran~~~~~~~~~~}
Procedure s1_scr(top:pz);
var temp:pz;
begin write;
if top<>nil then
begin temp:=top;
while temp<>nil do
begin writeln(temp^.zs:4);temp:=temp^.next;
end;
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~ydalenie elementa iz steka~~~~~~~~~~~~}
Procedure del_first(var top:pz;var name:s3);
var temp:pz;
begin if top<>nil then
begin name:=top^.zs;write('tovar = ',name);readln;
temp:=top^.next;{sohranim adres 2-go elem}
dispose(top);{osvobodim pamit ot 1-go elem}
top:=temp;{2-i elem nazivaem pervim}
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~ydalenie elementa iz ocheredi~~~~~~~~~~}
Procedure del_last(var top:pz;var name:s3);
var temp:pz;temp1:pz;
begin if top<>nil then begin
temp:=top;temp1:=nil;
while temp^.next<>nil do begin
temp1:=temp;
temp:=temp^.next; end;
name:=temp^.zs;
write('name=',name);readln;
if temp1=nil then top:=nil
else temp1^.next:=nil;
dispose(temp);
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~~~~zapis v fail~~~~~~~~~~~}
Procedure s1_fil(name:string;top:pz;var f:f);
var temp:pz;
begin assign(F,name);rewrite(F);
if top<>nil then
begin temp:=top;
while temp<>nil do
begin write(F,temp^.zs);temp:=temp^.next;
end;
end;close(F);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~prochitait iz faila~~~~~~~~}
Procedure fil_s1(name:string;var top:pz;var f:f);
var buf:s3;
begin assign(F,name);reset(F);
while not EOF(F) do
begin read(F,buf);adl_s1(top,buf);
end;close(F);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~~~~~~~poisk elementa~~~~~~~~~~~~~~~~~~}
Procedure find_s1(top:pz;var tempf:pz);
var namef:s3;w:byte;
begin write('Find name=');readln(namef);w:=1;
tempf:=top;
while(tempf<>nil{konec spiska}) and
(tempf^.zs<>namef{elem naiden}) do
begin
tempf:=tempf^.next; w:=w+1;{perexod k sled elem}end;
if tempf=nil{konec spiska} then writeln(namef+' not found')
else writeln(tempf^.zs+' is found','_elemen nomer-',w);
write('press any key');readln;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{~~~~~~~~~~osnovnaya programa~~~~~~~~~~~~~~~~~~}
begin top_s:=nil;top_o:=nil;tempf:=nil;
repeat window(1,1,80,25);clrscr;
window(1,1,20,25);writeln;writeln ('=TOVAR= ');s1_scr(top_s);
window(61,1,80,25);writeln;writeln('=POKUPATEl=');s1_scr(top_o);
window(26,1,60,15);
writeln;
writeln('************CRAZY-SHOP************');
writeln('|1-dobavit tovar |');
writeln('|2-dobavit pokupatel |');
writeln('|3-sale |');
writeln('|4-poisk tovar |');
writeln('|5-poisk pokupatel |');
writeln('|6-save |');
writeln('|7-read |');
writeln('|8-exit |');
writeln('**********************************');
writeln;
writeln('vvedi 1-8');
readln(nm);
case nm of
1:begin write('tovar=');readln(name);adf_s1(top_s,name);end;
2:begin write('pokupatel=');readln(name);adl_s1(top_o,name);end;
3:begin del_first(top_s,name);del_last(top_o,name);end;
4:find_s1(top_s,tempf);
5:find_s1(top_o,tempf);
6:begin s1_fil('f:/tovar.txt',top_s,f_s);s1_fil('f:/pokup.txt',top_o,f_o);end;
7:begin fil_s1('f:/tovar.txt',top_s,f_s);fil_s1('f:/pokup.txt',top_o,f_o);end;
end;
until nm=8;
end.
Работа:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.