МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ (МИНТРАНС РОССИИ)
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА (РОСЖЕЛДОР)
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ СООБЩЕНИЯ (СГУПС)
Кафедра “Информационные технологии транспорта”
ЛАБОРАТОРНАЯ РАБОТА №2_2а
По дисциплине “Информатика и программирование”
Тема: « «Забавный магазин» с использованием массивов»
Выполнил |
Проверил |
|||
________________ подпись |
Студент гр. ПИ-111Денисова Е.И. |
________________ подпись |
Канд. техн. наук доцент Е.В. Редьков |
|
________________ дата |
________________ дата |
Новосибирск - 2008 г.
Задание:
Разработать программу для имитации работы “забавного магазина”, обеспечив выполнение следующих операций:
1 Открытие магазина (очередь и стек - пусты)
2 Ввод имени покупателя с клавиатуры (имя добавляется в очередь)
3 Ввод названия товара с клавиатуры (товар добавляется в стек)
4 Продажа товара покупателю (товар извлекается из стека, а покупатель – из очереди), пара данных товар - покупатель выводятся на экран.
5 Закрытие на перерыв (данные стека и очереди сохраняются в файлах)
6 Открытие магазина после перерыва (стек и очередь восстановить из файлов)
6 Проверка наличия товара в стеке (поиск по названию)
7 Проверка наличия покупателя в очереди (поиск по имени)
8 Завершение работы программы.
Рекомендации:
Для головного модуля и всех процедур (функций) составить блок-схемы (отдельно для каждого модуля)
В главной программе описать минимум необходимых переменных и организовать меню для выбора операции.
Для каждой операции (кроме последней) организовать отдельную процедуру(функцию), при этом все необходимые данные передать (возвратить) через формальные параметры.
Ограничить размер стека 10 элементами, размер очереди 15 элементами, хранить последние 5 пар (результаты операции продажа).
В том случае, если искомое значение найдено – вывести на экран его номер, иначе вывести -1.
На экране отображать текущее состояние очереди, стека, последние продажи, управляющее меню.
Обеспечить приостановку продажи, если отсутствуют товар и/или покупатель (вывести на экран диагностическое сообщение и заблокировать операцию продажи).
Программа:
Program a3;
uses crt;
const ls=10;
type st15=string[15];
ma1=array[1..ls] of st15;
var is,nm,io:integer;
st,och:ma1;
fail:text;
a:st15;
Procedure out_a(a:st15);
begin writeln('a=',a:3);end;
Procedure out_st(a:ma1;is:integer);
var i:integer;
begin write('stek=');
for i:=1 to is do write(' ',a[i]); writeln
end;
Procedure out_och(a:ma1;io:integer);
var i:integer;
begin write('ochered=');
for i:=1 to io do write(' ',a[i]); writeln
end;
Procedure inp_a(var a:st15);
begin write('a=');readln(a);end;
Procedure dop_st(a:st15;ls:integer;var is:integer;var st:ma1);
begin if is=ls then write('stek full') else
begin is:=is+1;st[is]:=a;end;
end;
Procedure dop_och(a:st15;ls:integer;var io:integer;var och:ma1);
begin if io=ls then write('ochered full') else
begin io:=io+1;och[io]:=a;end;
end;
Procedure from_st(var a:st15;ls:integer;var is:integer;var st:ma1);
begin if is=0 then begin write('stek empty');readln;end else
begin a:=st[is];is:=is-1;st[is+1]:=a;end;
end;
Procedure from_och(var a:st15;ls:integer;var io:integer;var och:ma1);
var i:integer;
begin if io=0 then begin write('ochered empty');readln;end else
begin a:=och[1];io:=io-1; for i:=1 to io do och[i]:=och[i+1];end;
end;
Procedure into_f(name:string;a:ma1;n:integer);
var i:integer;fail:text;
begin assign(fail,name);rewrite(fail);
for i:=1 to n do writeln(fail,a[i]);close(fail);
end;
Procedure out_f(name:string;var a:ma1;var n:integer);
var fail:text;
begin n:=0; assign(fail,name);reset(fail);
while not EOF(fail) do
begin n:=n+1;readln(fail,a[n]);end;close(fail);
end;
Function ppoisk(a:ma1;n:integer;c:st15):integer;
var i:integer;
begin i:=1;
while(a[i]<>c) and(i<(n+1)) do
i:=i+1;
if i=n+1 then ppoisk:=-1
else ppoisk:=i;
end;
Function vvodc:st15;
var c:st15;
begin write('vvedi znachenie=');readln(c);
vvodc:=c;
end;
Procedure result(j:integer);
var c:char;
begin if j=-1 then writeln('znachenie naideno',j:2)
else writeln('znachenie naideno element nomer ',j:2);
writeln('najmi probel');c:=readkey;
end;
Begin is:=0;io:=0;
repeat window(1,1,80,25);clrscr;
out_a(a);
window(1,1,20,25);out_st(st,is);
window(61,1,80,25);out_och(och,io);
window(26,1,60,12);
writeln('1-con->a');
writeln('2-a->stek');
writeln('3-a->ochered');
writeln('4-st->a & och->a');
writeln('5-save');
writeln('6-read');
writeln('7-poisk tovara');
writeln('8-poisk pokupatelia');
writeln('9-exit');
writeln('vvedi 1-9');readln(nm);
case nm of
1:inp_a(a);
2:dop_st(a,ls,is,st);
3:dop_och(a,ls,io,och);
4:begin from_st(a,ls,is,st);from_och(a,ls,io,och);end;
5:begin into_f('d:/st.txt',st,is); into_f('d:/och.txt',och,io);end;
6:begin out_f('d:/st.txt',st,is);out_f('d:/och.txt',och,io);end;
7:result(ppoisk(st,is,vvodc));
8:result(ppoisk(och,io,vvodc));
9:exit;
end;
until nm=10;
end.
Результат работы:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.