Разработка программы для имитации работы «Забавный магазин» с использованием массивов

Страницы работы

Содержание работы

МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ  (МИНТРАНС РОССИИ)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА  (РОСЖЕЛДОР)

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ                      ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ СООБЩЕНИЯ (СГУПС)

Кафедра “Информационные технологии транспорта

ЛАБОРАТОРНАЯ РАБОТА  №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.

Результат  работы:

Похожие материалы

Информация о работе