Входные данные:x1,y1, x2,y2- координаты сохраняемой части экрана,



выходные данные: uk-адрес памяти( где будет храниться рис)}

begin

razmer:=imagesize(x1,y1,x2,y2);

getmem(uk,razmer);{Отводим место в памяти под фрагмент}

getimage(x1,y1,x2,y2,uk^);

end;

procedure vstav(x1,y1:integer; uk:pointer);

{вставка рисунка из динамической памяти,

Входные данные:x1,y1 - координаты места вставки рисунка,

uk-адрес памяти( откуда будет взят рисунок)}

begin

putimage(x1,y1,uk^,0);

freemem(uk,razmer);

end;

procedure vvodint (var d:longint;x1,y1:integer);

{защищенный ввод числовой информации,

Входные данные: х,у-координаты на экране,

выходные данные: d-целое положительное число }

var

a:integer;{место ошибки }

ss:string;{для преобразования в число}

x2,y2:integer;{координаты закраски при неправильном вводе}

begin

repeat

setfillstyle(0,15);

if y1=8 then y2:=100; {координаты для бумаги(или числа заказов)}

if y1=11 then y2:=150; { координаты для фотореактивов}

bar(10,y2,250,y2+20) ; {закрашенный прямоугольник}

gotoxy(x1,y1);

 readln(ss);

val(ss,d,a);

if a<>0 then

begin

   outtextxy(x-35,185,'Повтори ввод');

   delay(20000); {задержка}

   setcolor(15);

   outtextxy(x-35,185,'Повтори ввод');

   setcolor(3);

end;

until (a=0) and (d>=0) ; {a-преобразование строки в число верно,

                      d- проверка на положительность числа}

end;

procedure izmenobs;

{изменение указателей недообслуженных фоторепортеров}

var

p:tl1list; {указатель на голову списка фоторепортеров}

begin

if (golova2<>nil ) then p:=golova2;

if (golova2<>nil ) and (p^.head<>nil) then

begin

p^.cur:=p^.head;

while (p^.cur<>nil) do

begin

p^.cur^.obs:=0;

p^.cur:=p^.cur^.next;

end;

p^.cur:=p^.head;

end;

end;

procedure popolnenie ;

{Изменение(создание) списка фирм, упорядоченного по алфавиту}

var

 p:tl1list1;p2:tlink1; {Список фирм}

 fl:boolean;{Флаг, указывающий, что искомый элемент не первый}

 n1,n2:longint;{Параметры пополнения бумаги и реактивов}

 nn:string[5];{Название фирмы}

 y:char;{задержка информации на экране}

begin

setviewport(270,10,getmaxx-10,getmaxy-250,true);

Clearviewport;               {табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

p:=golova;

if golova=nil then

begin

    new(p); {создание головы списка}

    p^.head:=nil;

    p^.predcur:=nil;

    p^.cur:=nil;

    golova:=p;

end;

settextstyle(2,0,5);

outtextxy(30,10 ,'Добавление фирмы:');

outtextxy(30,40 ,'Название фирмы:');

gotoxy(45,6);

readln(nn);

outtextxy(30,87 ,'Џ®Ї®«­Ґ­ЁҐ Ўг ЈЁ:');

gotoxy(45,8);

 vvodint(n1,45,8);

z.bum:=z.bum+n1;

outtextxy(25,130 ,'Пополнение реактивов:');

gotoxy(45,11);

vvodint(n2,45,11);

setcolor(3);

settextstyle(2,0,5);

outtextxy(160,175,'Нажмите <Enter>: ');

y:=readkey;

z.rk:=z.rk+n2;

if p^.head=nil then

    begin

      new(p2);      {первый элемент}

      p2^.name:='';

      p2^.next:=nil;

      p^.head:=p2;

      p^.cur:=p2;

      p^.predcur:=p2;

      p2^.name:=nn;

      p2^.par1:=n1;

      p2^.par2:=n2;

      p2^.next:=nil;

    end else

    begin

      p^.cur:=p^.head;

      p^.predcur:=p^.head;

      fl:=false;

      while (nn>p^.cur^.name) and (p^.cur<>nil) do

       begin

          fl:=true;

          p^.predcur:=p^.cur;

          p^.cur:=p^.cur^.next; {Поиск места вставки}

      end;

      if nn=p^.cur^.name then

       begin

         p^.cur^.par1:=p^.cur^.par1+n1;

         p^.cur^.par2:=p^.cur^.par2+n2; {Пополнение запасов}

       end ;

     if (fl=true) and (p^.cur<>nil)and (nn<>p^.cur^.name) then

      begin

         new(p2);       {Вставка в середину перед}

         p2^.name:=nn;

         p2^.par1:=n1;

         p2^.par2:=n2;

         P2^.next:=P^.predcur^.next ;

         p^.predcur^.next:=P2;

         p^.cur:=p2;

      end;

       if (fl=true) and (p^.cur=nil)and (nn<>p^.cur^.name) then

      begin

         new(p2);

         p2^.name:=nn;           {В конец}

         p2^.par1:=n1;

         p2^.par2:=n2;

         P2^.next:=nil ;

         p^.predcur^.next:=P2;

         p^.predcur:=p2;

         p^.cur:=p2;

         end;

      if (fl=false) and (nn<>p^.cur^.name) then

      begin

         new(p2);

         p2^.name:=nn;

         p2^.par1:=n1;

         p2^.par2:=n2;

         p2^.next:=p^.cur;   {Вставка в начало}

         p^.cur:=p2;

         p^.predcur:=p2;

         p^.head:=p2;

      end;

    end;

   izmenobs; {Изменение указателей недообслуженных

                                        репортеров}

   graphdefaults; {Полный экран}

end;

procedure udal1 ;

{Процедура удаления фирм из списка}

var

 p:tl1list1;p2:tlink1; {Список фирм}

 el:string;{Название фирмы}

 flag:boolean;{Указывает, что элемент удален}

 y:char;{ Задержка информации на экране}

begin

setviewport(270,10,getmaxx-10,getmaxy-250,true);

Clearviewport;               {табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

 outtextxy(30,10 ,'Удаление фирмы:');

outtextxy(30,30 ,'Название фирмы:');

gotoxy(45,5);

readln(el);

flag:=false;

p:=golova;

p^.cur:=p^.head;

p^.predcur:=p^.head;

while (p^.cur<>nil) do

   begin

      if (p^.cur^.name=el) and (p^.cur=p^.head) then

        begin

           p^.head:=p^.cur^.next;

           dispose(p^.cur); {Удаление первого элемента}

           p^.predcur:=p^.head;

           p^.cur:=p^.predcur;

           flag:=true;

        end else

      if (p^.cur^.name=el) and (p^.cur<>p^.head) then

       begin {Удаление из середины или из конца списка}

         p^.predcur^.next:=p^.cur^.next;

         dispose(p^.cur);

         p^.cur:=p^.predcur^.next;

         flag:=true;

       end else

       begin

         p^.predcur:=p^.cur;

         p^.cur:=p^.cur^.next;

       end;

end;

if flag=false then

begin

settextstyle(2,0,5);

outtextxy(30,70 ,'Фирма отсутствует');

setcolor(3);

settextstyle(2,0,5);

outtextxy(130,150,'Нажмите <Enter>: ');

y:=readkey;

end;

graphdefaults; {Полный экран}

end;

Procedure prosmotr1;

{Процедура просмотра состояния списка фирм}

var

 p:tl1list1;p2:tlink1; {Список фирм}

 ss:string; {Для перевода числа в строку}

 y1,k:integer; {y1 - Смещение координат на экране}

          {k- число сообщений о фирмах на экране}

 y:char; {Для задержки сообщения на экране}

begin

setviewport(270,10,getmaxx-10,getmaxy-250,true);

Clearviewport;       {Табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

p:=golova;

p^.cur:=p^.head;

p^.predcur:=p^.head;

ss:='';

y1:=0;

k:=0;

settextstyle(2,0,5);

outtextxy(30,10,'Просмотр фирм: ');

if (p^.head=nil) or (golova=nil) then

begin

  setcolor(3);

  settextstyle(2,0,5);

  outtextxy(60,50,'Список пуст: ');

  outtextxy(160,175,'Нажмите <Enter>: ');

  y:=readkey;

end

else

begin

  p2:=p^.head;

  while (p2<>nil) do

   begin

    outtextxy(30,30+y1,'Фирма: ' +p2^.name);

    str(p2^.par1,ss);

    outtextxy(30,40+y1,'Бумага: '+ss);

    str(p2^.par2,ss);

    outtextxy(30,50+y1,'Реактивы: '+ss);

    p2:=p2^.next;

    k:=k+1;

    y1:=y1+40;

    setcolor(3);

settextstyle(2,0,5);

outtextxy(160,175,'Нажмите <Enter>: ');

    y:=readkey;

    if (k mod 4=0)then

    begin

       y1:=0;

       Clearviewport;   {Больше 4х элементов}

       setlinestyle(0,0,3);

       setcolor(3);

       rectangle(0,0,358,209);

       rectangle (4,4,354,205);

       outtextxy(30,10,'Просмотр фирм: ');

    end;

end;

Clearviewport;   {Просмотрен весь список фирм}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

outtextxy(30,10,'Просмотрен весь список фирм: ');

outtextxy(30,150,'Нажмите <Enter>: ');

y:=readkey;

end;

graphdefaults; {Полный экран}

end;

procedure prosmotr2(i:byte);

{Просмотр списка репортеров на экране}

{Входные данные i - параметр вывода на экран

(если 1, то вывод осуществляется поэлементно)}

var

 p:tl1list; p2:link; {Список репортеров}

 k,t:integer;

 {k - Смещение координаты на экране}

 {t- Вывод на экран до 6 репортеров}

 yy:char;{Задержка информации на экране}

begin

p:=golova2;

p^.cur:=p^.head;

k:=0;

t:=1;

fon;

if (P<>nil) and( p^.head<>nil) then

begin

p2:=p^.head;

while (p2<>nil) and (t<=6) do

begin

   men(x+k,y-5,p2^.num,p2^.info,p2^.org);

   k:=k+105;

   p2:=p2^.next;

   t:=t+1;

   if i=1 then yy:=readkey;

end;

end;

yy:=readkey;

end;

procedure okno;

{Недоступны данные из файла}

var

y:char; {Задержка информации}

begin

setviewport(270,10,getmaxx-10,getmaxy-250,true); {окно }

Clearviewport;               {табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

outtextxy(30,10 ,'Данные из файла недоступны');

outtextxy(30,40 ,'Введите данные с клавиатуры');

outtextxy(30,80 ,'Для продолжения нажниме <Enter>');

y:=readkey;

graphdefaults; {полный экран}

fon;

end;

procedure izm2;

{Создание очереди фоторепортеров}

var

 p:tl1list;{указатель на голову списка фоторепортеров}

 p2:link;{указатель на элемент списка фоторепортеров}

 nn:string;{организация}

 n1:longint;{количество фотографий}

 y:char;{задержка информации}

begin

setviewport(270,10,getmaxx-10,getmaxy-250,true); {окно }

Clearviewport;               {табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

outtextxy(30,10 ,'Список репортеров:');

p:=golova2;

z.rep:=z.rep+1;

if golova2=nil then

begin

    new(p);     {создание головы списка}

    p^.head:=nil;

    p^.posl:=nil;

    p^.cur:=nil;

    golova2:=p;

end;

settextstyle(2,0,5);

outtextxy(30,30 ,'Организация репортера:');

gotoxy(50,5);

readln(nn);

outtextxy(30,75 ,'Количество фотографий');

gotoxy(50,8);

vvodint(n1,50,8);

  outtextxy(30,150,'Нажмите <Enter>: ');

y:=readkey;

if p^.head=nil then

  begin

     new(p2);     { Первый элемент }

     p2^.next:=nil;

     p^.head:=p2;

     p^.head^.prev:=nil;

     p^.cur:=p2;

     p^.posl:=p2;

     p2^.org:=nn;

     n:=n+1;

     p2^.num:=n;

     p2^.info:=n1;

     p2^.obs:=0;

     p2^.next:=nil;

  end else

  begin

     new(p2);     { Остальные элементы }

     p2^.org:=nn;

     p2^.info:=n1;

     n:=n+1;

     p2^.num:=n;

     p2^.next:=nil;

     p^.cur:=p^.posl;

     p^.cur^.next:=p2;

     p2^.prev:=p^.cur;

     p^.posl:=p2;

  end;

z.ft1:=z.ft1+p2^.info;

graphdefaults;

fon;

prosmotr2(0);

p^.cur:=p^.head;

cursor1:=p^.head;

end;

procedure pr;

{Просмотр списка фоторепортеров

(Использует процедуру Viv вывода порции информации) }

var

 p:tl1list;{указатель на голову списка фоторепортеров}

 p2:link; {указатель на элемент списка фоторепортеров}

 m:integer; {приращение координат}

 y:char;{служебная для задержки информации на экране}

 ss:string; {для перевода числа в строку }

procedure Viv;

{вывод порции(3) информации о фоторепортерах}

begin {начало процедуры Viv(локальн.)}

   Clearviewport;

   setfillstyle(1,8);

   setlinestyle(0,0,3);

   setcolor(3);

   rectangle(0,0,358,209);

   rectangle (4,4,354,205);

      m:=0;

   outtextxy(30,10 ,'Просмотр очереди:');

   if (p2<>nil) then

   begin

      str(p2^.num,ss);

      outtextxy(30,30+m,'Номер в очереди: '+ss);

      outtextxy(30,40+m,'Организация: '+ p2^.org);

      str(p2^.info,ss);

      outtextxy(30,50+m,'Кол-во фото: '+ss);

      m:=m+40;

   end;

   if (p2<>nil) and(p2^.next<>nil) then

   begin

     str(p2^.next^.num,ss);

     outtextxy(30,30+m,'Номер в очереди: '+ss);

     outtextxy(30,40+m,'Организация: '+ p2^.next^.org);

     str(p2^.next^.info,ss);

     outtextxy(30,50+m,'Кол-во фото: '+ss);

     m:=m+40;

   end;

   if (p2<>nil) and(p2^.next<>nil)and (p2^.next^.next<>nil) then

   begin

       str(p2^.next^.next^.num,ss);

       outtextxy(30,30+m,'Номер в очереди: '+ss);

       outtextxy(30,40+m,'Организация: '+ p2^.next^.next^.org);

       str(p2^.next^.next^.info,ss);

       outtextxy(30,50+m,'Кол-во фото: '+ss);

   end;

   p2:=p2^.next;

   m:=m+40;

   outtextxy(30,150 ,'Нажмите <Enter>');

   y:=readkey;

 

end;{конец процедуры Viv(локальн.)}

begin {начало процедуры Pr}

setviewport(270,10,getmaxx-10,getmaxy-250,true);

Clearviewport;               {табличка}

setfillstyle(1,8);

setlinestyle(0,0,3);

setcolor(3);

rectangle(0,0,358,209);

rectangle (4,4,354,205);

setcolor(3);

settextstyle(2,0,5);

outtextxy(30,10 ,'Просмотр очереди репортеров:');

p:=golova2;

p^.cur:=p^.head;

ss:='';

if (p^.cur=nil) or (golova2=nil)

then

begin

outtextxy(30,30 ,'Очередь пуста');

outtextxy(30,150 ,'Нажмите <Enter>');

y:=readkey;

end else if (p^.cur<>nil) then

begin

p2:=p^.head;

while (p2<>nil) do

begin

   viv; {вывод порции информации}

end;

 

end;

graphdefaults; {полный экран}

end; {конец процедуры Pr}

procedure pros;

{Просмотр списка репортеров на экране в прямом направлении}

var

 p:tl1list; p2:link; {Список репортеров}

 k,t:integer;

 cursor:link;

 {k - Смещение координаты на экране}

 {t- Вывод на экран до 6 репортеров}

 yy:char;{Задержка информации на экране}

begin

if (cursor1^.next<>nil) and (cursor1{p^.head}<>nil) and (golova2<>nil) then

begin

k:=0;

t:=1;

fon;

cursor1:=cursor1^.next;

p2:=cursor1;

if (p2<>nil) and( p^.head<>nil)

then

while (p2<>nil) and (t<=6) do

begin

     men(x+k,y-5,p2^.num,p2^.info,p2^.org);

     k:=k+105;

     p2:=p2^.next;

     t:=t+1;

end;

end;

yy:=readkey;

end;


procedure pros1;

{Просмотр списка репортеров в обратном направлении на экране}

var

 p:tl1list; p2:link; {Список репортеров}

 k,t:integer;

 {k - Смещение координаты на экране}

 {t- Вывод на экран до 6 репортеров}

 yy:char;{Задержка информации на экране}

begin

if (cursor1^.prev<>nil) and (p^.posl<>nil) and (p^.head<>nil)

and (golova2<>nil) and(cursor1<>nil)

then

begin

flag1:=true;

cursor1:=cursor1^.prev;

p2:=cursor1;

if (cursor1<>p^.head)then

begin

  t:=1;

  k:=0;

  pam(0,getmaxy-256,getmaxx-105,getmaxy-132,ukaz1);

  fon;

  vstav(105, getmaxy-256,ukaz1);

  men(x+k,y-5,p2^.num,p2^.info,p2^.org);

if (cursor1<>nil) and (cursor1=p^.head)then

   begin

     flag1:=false;

     pam(0,getmaxy-256,getmaxx-105,getmaxy-132,ukaz1);

     fon;

     vstav(105, getmaxy-256,ukaz1);

     men(x+k,y-5,p2^.num,p2^.info,p2^.org);

end;

end;

end;

yy:=readkey;

end;

procedure udalenie1;

 {Удаление элемента(не первого) из списка фоторепортеров}

var

p:tl1list; {указатель на голову списка фоторепортеров}

p2:link; {указатель на элемент списка фоторепортеров}

pf:tl1list1; {указатель на голову списка фирм}

p2f:tlink1; {указатель на элемент списка фирм}

el:string; {организация}

begin

p:=golova2;

el:=p^.cur^.org;

z.rep:=z.rep-1;

z.rep1:=z.rep1+1;

begin

if (p^.cur^.org=el) and (p^.cur^.next=nil)

and (p^.cur<>p^.head) then      {последний не один}

  begin

    P^.posl:=p^.cur^.prev;

    p^.cur^.prev^.next:=nil;

    dispose(p^.cur);

    p^.cur:=p^.head;

  end else

  if (p^.cur^.org=el) and (p^.cur<>p^.head) and

  (p^.cur^.next<>nil) then {не первый не последний}

  begin

     p^.cur^.prev^.next:=p^.cur^.next;

     p^.cur^.next^.prev:=p^.cur^.prev;

     p2:=p^.cur;

     p^.cur:=p^.cur^.next;

     dispose(p2);

  end;

end;

end;

procedure udalenie;

{Удаление первого элемента из списка фоторепортеров}

var

 p:tl1list; {указатель на голову списка фоторепортеров}

 p2:link; {указатель на элемент списка фоторепортеров}

 pf:tl1list1; {указатель на голову списка фирм}

 p2f:tlink1;{указатель на элемент списка фирм}

 el:string;{организация}

 {nn:string;}

begin

p:=golova2;

z.rep:=z.rep-1;

z.rep1:=z.rep1+1;

el:=p^.cur^.org;

p^.cur:=p^.head;

if (p^.cur^.org=el) and (p^.cur^.next<>nil) and (p^.cur=p^.head) then

  begin {голова списка - первый}

      p^.head:=p^.cur^.next;

    p^.head^.prev:=p^.cur^.prev;

    if p^.cur<>nil then dispose(p^.cur);

    p^.cur^.prev:=p^.head;

    p^.cur:=p^.cur^.prev;

  end else

if (p^.cur=p^.head) and (p^.cur^.next=nil)

and (p^.cur^.org=el) then {один элемент}

  begin

      if p^.cur<>nil then dispose(p^.cur);

      p^.head:=nil;

      p^.cur:=nil;

 

  end;

end;

procedure obrabotka1;

{ обслуживание очереди(выбор фоторепортера из очереди, удаление элемента

списка, изменение данных о состояния запасов фотоматериалов)}

{Содержит процедуру obk-обслуживание обычных фоторепортеров}

var

p:tl1list; {указатель на голову списка фоторепортеров}

p2:link; {указатель на элемент списка фоторепортеров}

rn:integer; {разность значений фотоматериалов и реактивов}

flag,fl,ff:boolean;

{flag-признак, что нужно определить запасы общих фотоматериалов,

f1- признак, что нужно определить запасы фотоматериалов фирмы,

ff-признак, что в очереди не все папарацци}

pf:tl1list1; {указатель на голову списка фирм}

p2f:tlink1;{указатель на элемент списка фирм}

procedure obk;

{Обслуживание фоторепортеров}

begin {obk}

       begin

          rn:=pf^.cur^.par1-pf^.cur^.par2;

          if (rn>=0) then {больше бумаги}

          begin

            if (pf^.cur^.par2>=p^.cur^.info)

            and (p^.cur<>nil) then {реактивов больше заказов

                                                       фото}

              begin

                pf^.cur^.par2:=pf^.cur^.par2-p^.cur^.info;

                pf^.cur^.par1:=pf^.cur^.par1-p^.cur^.info;

                z.ft1:=z.ft1-p^.cur^.info;

                z.rk:=z.rk-p^.cur^.info;

                z.ft:=z.ft+p^.cur^.info;

                z.bum:=z.bum-p^.cur^.info;

                p^.cur^.info:=0;

                if p^.cur=p^.head then

                 begin

                  udalenie; {удаление первого}

                  p^.cur:=P^.head;

                 end else

                  begin

                   udalenie1; {удаление не первого}

                   p^.cur:=P^.head;

                  end

              end else

            if (pf^.cur^.par2<p^.cur^.info)

            and (p^.cur<>nil) then

              begin      {реактивов < заказов фото}

                pf^.cur^.par1:=pf^.cur^.par1-p^.cur^.info ;

                z.ft:=z.ft+p^.cur^.info;

                z.bum:=z.bum-p^.cur^.info;

                z.ft1:=z.ft1+p^.cur^.info;

                z.rk:=z.rk-p^.cur^.info;

                p^.cur^.obs:=1;

                if pf^.cur^.par1<0 then pf^.cur^.par1:=0;

                p^.cur^.info:=p^.cur^.info-pf^.cur^.par2;

                z.ft1:=z.ft1-p^.cur^.info;

                pf^.cur^.par2:=0;

             end;

           end;

          if (rn<0) then

          begin

            if (pf^.cur^.par1>=p^.cur^.info)

            and (p^.cur<>nil)then

              begin          

                 pf^.cur^.par1:=pf^.cur^.par1-p^.cur^.info;

                 pf^.cur^.par2:=pf^.cur^.par2-p^.cur^.info;

                 z.bum:=z.bum-p^.cur^.info;

                 z.rk:=z.rk-p^.cur^.info;

                 z.ft:=z.ft+p^.cur^.info;

                 z.ft1:=z.ft1-p^.cur^.info;

                 p^.cur^.info:=0;

                 if p^.cur=p^.head then

                  begin

                   udalenie; {удаление первого}

                   p^.cur:=P^.head;

                  end

                else

                begin

                  udalenie1; {удаление не первого}

                  p^.cur:=P^.head;

                end

                 end else

            if (pf^.cur^.par1< p^.cur^.info)

            and (p^.cur<>nil) then

              begin      {бумаги <заказов фото}

                pf^.cur^.par2:=pf^.cur^.par2-p^.cur^.info;

                z.ft:=z.ft+p^.cur^.info;

                z.rk:=z.rk-p^.cur^.info;

                z.ft1:=z.ft1+p^.cur^.info;

                p^.cur^.obs:=1;

                if pf^.cur^.par2<0 then pf^.cur^.par2:=0;

                p^.cur^.info:=p^.cur^.info-pf^.cur^.par1;

                pf^.cur^.par1:=0;

                z.bum:=z.bum-p^.cur^.info;

              end;

          end;

       end;

end; {obk}

procedure ob1;

{поиск общих запасов}

begin

while (pf^.cur^.name <>'obk') and (pf^.cur<>nil) do

       begin

         pf^.predcur:=pf^.cur;

         pf^.cur:=pf^.cur^.next;

      end;

if (pf^.cur^.name ='obk') then obk;

end;

begin{obrabotka1}

 p:=golova2;

 pf:=golova;

 rn:=0;

 if (p^.head<>nil) and (golova2<>nil) then

begin

p^.cur:=p^.head;

while (p^.cur^.obs<>0) and (p^.cur<>nil) do

p^.cur:=p^.cur^.next;

if (p^.cur<>nil) then

   begin

       flag:=false;

       fl:=false;

       ff:=false;

       if p^.cur^.org='pp' then

       begin

        while (p^.cur^.org='pp') and (p^.cur<>nil) do

         begin {поиск не папарацци}

          p^.cur:=p^.cur^.next;

          if (p^.cur^.org<>'pp') and(p^.cur<>nil) then

             ff:=true;

       end;

      if ff=false then

         begin              {все папарацци}

          flag:=true;

          p^.cur:=p^.head;

         end

       else flag:=false;

      if flag=true then

         begin

        pf^.cur:=pf^.head;{поиск запасов для любого и обсл.}

        ob1;

       end

       else {не папарацци}

       begin

        if (p^.cur^.org<>'pp') and (p^.cur^.org='obk')

            and (p^.cur<>nil)

         then

          begin { обыкновенный}

           pf^.cur:=pf^.head;

           ob1; {поиск запасов и обсл.}

          end

         else

         begin

          if (p^.cur^.org<>'pp') and (p^.cur^.org<>'obk')

                and (p^.cur<>nil)

           then

            begin { фоторепортер из фирмы }

             pf^.cur:=pf^.head;

             ob1; {поиск запасов для любого и обсл.}

            end;

          if (fl=true) and (p^.cur^.obs=1)then

           begin { для недообсл. репортера фирмы}

             pf^.cur:=pf^.head;

             while (pf^.cur^.name<>p^.cur^.org) and

             (pf^.cur^.next<>nil) do

              begin {поиск запасов фирмы}

               pf^.predcur:=pf^.cur;

               pf^.cur:=pf^.cur^.next;

              end;

              if (pf^.cur^.name=p^.cur^.org) and

               (pf^.cur^.next<>nil) then obk;

                               { нашли и обсл.}

           end;

         end;

end;

end;

if (p^.cur^.org<>'pp') and (p^.cur^.org='obk')

and (p^.cur<>nil) then {первый в очереди обыкновенный}

begin

      pf^.cur:=pf^.head;

      ob1;

end else

if (p^.cur^.org<>'pp') and (p^.cur^.org<>'obk')

and (p^.cur<>nil) then

  begin { первый в очереди из фирмы }

      pf^.cur:=pf^.head;

      ob1;

  end;

if (fl=false)and (p^.cur<>nil) {and (p^.cur^.obs=1)}and

(p^.cur^.org<>'pp') and (p^.cur^.org<>'obk') then

begin

pf^.cur:=pf^.head;

while (pf^.cur^.name<>p^.cur^.org) and

(pf^.cur^.next<>nil) do

    begin

       pf^.predcur:=pf^.cur;

       pf^.cur:=pf^.cur^.next;

    end;

    if (pf^.cur^.name=p^.cur^.org) and

    (p^.cur<>nil) then obk;

end;

end;

prosmotr2(0);{вывод очереди на экран}

cursor1:=p^.head; {Начало очереди}

end;

end; {obrabotka1}

procedure fail;

{ввод данных из файла}

var f:text;

t:string[5]; {Название фирмы}

m:char;{Признак организации}

w,d:integer;

p:tl1list; {указатель на голову списка фоторепортеров}

p2:link; {указатель на элемент списка фоторепортеров}

rn:integer; {разность значений фотоматериалов и реактивов}

pf:tl1list1; {указатель на голову списка фирм}

pf2:tlink1;

i:integer;

fl:boolean;

begin

if flag2=true then

begin

assign(f,'firma.txt');

{$I-}

reset(f);

if ioresult<>0 then okno else

begin

{$I+}

p:=golova2;

if golova2=nil then

begin

    new(p);     {создание головы списка}

    p^.head:=nil;

    p^.posl:=nil;

    p^.cur:=nil;

    golova2:=p;

end;

i:=0;

while (m<>'0') do

begin        {Создание списка репортеров}

     readln(f,m,w,t);

     i:=i+1;

if (p^.head=nil) and (m<>'0') then

  begin

     new(p2);     { Первый элемент }

     p2^.next:=nil;

     p^.head:=p2;

     p^.head^.prev:=nil;

     p^.cur:=p2;

     p^.posl:=p2;

     delete(t,1,1); {удаляем первый пробел в названии фирмы}

     p2^.org:=t;

     p2^.num:=i;

     p2^.info:=w;

     p2^.obs:=0;

     p2^.next:=nil;

  end else if(p^.head<>nil) and (m<>'0') then

     begin

     new(p2);

     delete(t,1,1);    {Остальные элементы}

     p2^.org:=t;

     p2^.info:=w;

     p2^.num:=i;

     p2^.next:=nil;

     p^.cur:=p^.posl;

     p^.cur^.next:=p2;

     p2^.prev:=p^.cur;

     p^.posl:=p2;

  end;

end;

  i:=0;

while not eof(f) do

begin        {Создание списка фирм}

     readln(f,m,w,d,t);

     i:=i+1;

  pf:=golova;

if golova=nil then

begin

    new(pf);    

    pf^.head:=nil;

    pf^.predcur:=nil;

    pf^.cur:=nil;

    golova:=pf;

end;

if pf^.head=nil then

    begin

      new(pf2);      {первый элемент}

      {p2^.name:='';}

      pf2^.next:=nil;

         pf^.head:=pf2;

      pf^.cur:=pf2;

      pf^.predcur:=pf2;

      delete(t,1,1);

      pf2^.name:=t;

      pf2^.par1:=w;

      pf2^.par2:=d;

      pf2^.next:=nil;

    end else

    begin

      pf^.cur:=pf^.head;

      pf^.predcur:=pf^.head;

      fl:=false;

      while (t>pf^.cur^.name) and (pf^.cur<>nil) do

       begin

          fl:=true;

          pf^.predcur:=pf^.cur;

          pf^.cur:=pf^.cur^.next; {Поиск места вставки}

      end;

      if t=pf^.cur^.name then

       begin

         pf^.cur^.par1:=pf^.cur^.par1+w;

         pf^.cur^.par2:=pf^.cur^.par2+d;

                                   {Пополнение запасов}

       end ;

        if (fl=true) and (pf^.cur<>nil)and (t<>pf^.cur^.name) then

      begin

         new(pf2);

         delete(t,1,1);   {Вставка в середину перед}

         pf2^.name:=t;

         pf2^.par1:=w;

         pf2^.par2:=d;

         Pf2^.next:=Pf^.predcur^.next ;

         pf^.predcur^.next:=Pf2;

         pf^.cur:=pf2;

      end;

       if (fl=true) and (pf^.cur=nil)and (t<>pf^.cur^.name) then

      begin

         new(pf2);

         delete(t,1,1);

         pf2^.name:=t;           {в конец}

         pf2^.par1:=w;

         pf2^.par2:=d;

         Pf2^.next:=nil ;

         pf^.predcur^.next:=Pf2;

         pf^.predcur:=pf2;

         pf^.cur:=pf2;

     end;

      if (fl=false) and (t<>pf^.cur^.name) then

      begin

         new(pf2);

         delete(t,1,1);

         pf2^.name:=t;

         pf2^.par1:=w;

         pf2^.par2:=d;

         pf2^.next:=pf^.cur;   {Вставка в начало}

         pf^.cur:=pf2;

         pf^.predcur:=pf2;

         pf^.head:=pf2;

      end;

    end;

   end;

    p^.cur:=p^.head;

       fon;

      prosmotr2(0);   {вывод очереди на экран}

        pf^.cur:=pf^.head;

      cursor1:=p^.head;

      close(f);

      end;

      flag2:=false;

   end;

end;

procedure fail1;

{вывод данных из файла}

var f:text;

t:string[5]; {Название фирмы}

m:char;{Признак организации}

w,d:integer;

p:tl1list; {указатель на голову списка фоторепортеров}

p2:link; {указатель на элемент списка фоторепортеров}

rn:integer; {разность значений фотоматериалов и реактивов}

pf:tl1list1; {указатель на голову списка фирм}

pf2:tlink1;

i:integer;

fl:boolean;

begin

assign(f,'firma.txt');

rewrite(f);

p:=golova2;

if golova2<>nil then

begin

  p2:=p^.head;

  while p2<>nil do

  begin

  writeln(f,'r ', p2^.info,' ',p2^.org);

  p2:=p2^.next;

  end;

end;

  writeln(f,'0',' ',0,' ','0');

pf:=golova;

if golova<>nil then

begin

  pf2:=pf^.head;

  while pf2<>nil do

  begin

  writeln(f,'f',' ', pf2^.par1,' ',pf2^.par1,' ',pf2^.name);

  pf2:=pf2^.next;

  end;

end;

close(f);

end;

begin

end.

unit ris; {Модуль графических изображений}

Interface

uses crt,graph,dan;

procedure zast;

procedure dom;

procedure men(x,y:integer;rep,k:integer;firma:string );

procedure fon;

implementation

procedure zast;

{ Заставка- сведения о курсовой работе}

begin

cleardevice;

setbkcolor(15);

setlinestyle(0,0,1);

setcolor(5);

setfillstyle(7,11); {7-штриховка}

rectangle(0,0,getmaxx,getmaxy);setfillstyle(7,11);

                                   {7-штриховка}

rectangle(0,0,getmaxx,getmaxy);

rectangle(10,10,getmaxx-10,getmaxy-10);

floodfill(x+23,y+21,5);

settextstyle(1,0,2);

outtextxy(200,60 ,'КУРСОВАЯ РАБОТА ');

outtextxy(100,100 ,'по дисциплине: "ПРОГРАММИРОВАНИЕ" ');

outtextxy(70,140 ,'Тема: "Моделирование работы фотоателье"');

settextstyle(2,0,6);

outtextxy(250,240 ,'Выполнил:студент группы 2351 ');

outtextxy(350,260 ,'Иванов И.И. ');

settextstyle(0,0,1);

outtextxy(100,400 ,' для продолжения нажмите <Enter>');

f:=readkey;

end;

procedure dom;{рисует домик-фотоателье}

begin

setlinestyle(0,0,1);

setcolor(5);

rectangle(40,getmaxy-190-y,100,getmaxy-110-y);{лицевая стена}

line(100,getmaxy-110-y,140,getmaxy-150-y); {боковая стена}

line(30,getmaxy-190-y,110,getmaxy-190-y);

line(30,getmaxy-190-y,70,getmaxy-245-y);

line(70,getmaxy-245-y,110,getmaxy-190-y);

setcolor(5);

line(110,getmaxy-190-y,150,getmaxy-230-y); {крыша}

line(140,getmaxy-220-y,140,getmaxy-150-y);

line(70,getmaxy-245-y,110,getmaxy-280-y);

line(110,getmaxy-280-y,150,getmaxy-230-y);

setfillstyle(1,4);

floodfill(100,getmaxy-250-y,5);

setfillstyle(1,7);

floodfill(50,getmaxy-200-y,5);

floodfill(50,getmaxy-150-y,5);

setfillstyle(1,8);

floodfill(110,getmaxy-150-y,5);

setcolor(11);

rectangle(55,getmaxy-170-y,85,getmaxy-135-y); {окно}

setfillstyle(1,8);

floodfill(70,getmaxy-150-y,11);

line(70,getmaxy-170-y,70,getmaxy-135-y);

line (55,getmaxy-157-y,85,getmaxy-157-y);

setcolor(7);

line(122,getmaxy-185-y,122,getmaxy-145-y); {дверь}

line (135,getmaxy-200-y,135,getmaxy-158-y);

line(122,getmaxy-185-y,135,getmaxy-200-y);

line (122,getmaxy-145-y,135,getmaxy-158-y);

setfillstyle(1,6);

floodfill(130,getmaxy-190-y,7);

line(125,getmaxy-173-y,125,getmaxy-170-y);

setcolor(11);

arc(70,getmaxy-205-y,0,180,14); {чердачное окно}

line(56,getmaxy-205-y,84,getmaxy-205-y);

setfillstyle(1,8);

floodfill(70,getmaxy-208-y,11);

setcolor(14);

settextstyle(2,0,5);

 outtextxy(55, getmaxy-187-y,'ФОТО'); {надпись фото}

end;

 

procedure men(x,y:integer;rep,k:integer;firma:string );

{рисунок репортера,

входные данные:


Дата добавления: 2018-06-27; просмотров: 349; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!