Program ktorý može byť skompilovaný oboma druhmi kompilátorov Pascalu a po spustení vypíše ANO, ak bol skompilovany kompilátorom s vnoreným zátvorkovanim a NIE, ak bol skompilovaný kompilátorom s nevnoreným zátvorkovaním

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Program: Z_pismenkovej_ulice.pas
need: Dom.txt

Program ktorý može byť skompilovaný oboma druhmi kompilátorov Pascalu a po spustení vypíše ANO, ak bol skompilovany kompilátorom s vnoreným zátvorkovanim a NIE, ak bol skompilovaný kompilátorom s nevnoreným zátvorkovaním.

Na vstupe je daný počet poschodí a počet okien na jednom poschodí domu na Písmenkovej ulici. Ďalej je daný počet okien, kde nikto nie je doma a zoznam týchto okien. Každé okno je dané dvojicou a,b, kde a je poschodie a b číslo okna na poschodí zľava. Ďalej je dané okno, kde to nevydržali a zasvietili. Odsimulujte na obrazovke jeden zo sposobov, ako sa možu rozsvecovať ostatné okná.
{  ==============                                                              }
{  KSP 15. rocnik   z1515: Z pismenkovej ulice        Copyright (c) Jan Mojzis }
{  ==============                                                              }
{  Zadanie:                                                                    }
{  Napiste program, kt. moze byt skompilovany oboma druhmi kompilatorov Pascalu}
{  a po spusteni vypise ANO, ak bol skompilovany kompilatorom s vnorenym       }
{  zatvorkovanim a NIE, ak bol skomp. kompilatorom s nevnorenym zatvorkovanim  }
{  ----------------------------------------------------------------------------}
{  Na vstupe je dany pocet poschodi a pocet okien na jednom poschodi domu na   }
{  Pismenkovej ulici. Dalej je dany pocet okien, kde nikto nie je doma a zoznam}
{  tychto okien. Kazde okno je dane dvojicou a,b, kde a je poschodie a b cislo }
{  okna na poschodi zlava. Dalej je dane okno, kde to nevydrzali a zasvietili. }
{  Odsimulujte na obrazovke jeden zo sposobov, ako sa mozu rozsvecovat ostatne }
{  okna.                                                                       }
{  POZNAMKA:                                                                   }
{          CRT_EFD nie je sucastou tohto riesenia. Kniznicu CRT_EFD pre pracu s}
{          konzolovymi vypismi mozete stiahnut napriklad na:                   }
{          http://www.stano.wz.sk/index.php?id=8                               }
{                                                                              }
{  Author: (c) 2007 Jan Mojzis                                                 }
{  Date  : 06.07.2008                                     http://www.trsek.com }
 
program z_pismenkovej_ulice;
uses crt;
var
  f : file;
  p_posch : integer;
  p_okn_posch : integer;
  p_nikto : integer;
  c_begin : integer;
  okno,poschodie : integer;
  i,i2 : integer;
  vetvacislo : byte = 0;
  dom : array [1..100,1..100] of byte;
 
procedure PUSTISAVPRAVO(x,y : Integer); forward;
procedure  PUSTISAVLAVO( x, y : integer); forward;
procedure PUSTISAHORE(x,y : Integer); forward;
procedure  PUSTISADOLE( x, y : integer); forward;
 
procedure skontroluj (x,y : integer);  { pocitac ide len jednym }
begin                                  { smerom za cas }
{     PUSTISAHORE(x, y);      }        { mozme ale menit kade zacne ist }
{     PUSTISADOLE( x, y);      }       { ale zmenit musime kazdu rek. vetvu }
           PUSTISAVLAVO( x, y);        { lebo kazda sa snazi ist najprv preddef }
{     PUSTISAVPRAVO( x, y);   }        { smerom (u mna dolava a hore, potom doprava a dole) }
end;
 
 procedure PUSTISAVPRAVO(x,y : Integer);  { rekurzivna vetva vpravo }
 begin
 vetvacislo:=vetvacislo+1;
      if (x > -1) and (y > -1) and
          (x <= p_okn_posch) and (y <= p_posch) then begin
      if (dom[x,y] = byte('-')) {and (matica [Coll,Roww] = #0)} then begin
            dom[x,y]:=byte('*');  gotoxy(x,y); write('*');
         readln;
          gotoxy(p_okn_posch+2, 6); write('Vetva # ',vetvacislo, '  ');
            PUSTISAVLAVO(x-1, y);
            PUSTISAVPRAVO(x+1, y);
            PUSTISAHORE( x, y-1);
            PUSTISADOLE( x, y+1);
            end;
            end;
     vetvacislo:=vetvacislo-1;
 end;
 
 procedure PUSTISAVLAVO(x,y : Integer); { rekurzivna vetva vlavo }
 begin
 vetvacislo:=vetvacislo+1;
      if (x > -1) and (y > -1) and
          (x <= p_okn_posch) and (y <= p_posch) then begin
      if (dom[x,y] = byte('-')) {and (matica [Coll,Roww] = #0)} then begin
            dom[x,y]:=byte('*'); gotoxy(x,y); write('*');
         readln;
          gotoxy(p_okn_posch+2, 6); write('Vetva # ',vetvacislo, '  ');
            PUSTISAVLAVO(x-1, y);
            PUSTISAVPRAVO(x+1, y);
            PUSTISAHORE( x, y-1);
            PUSTISADOLE( x, y+1);
            end;
            end;
     vetvacislo:=vetvacislo-1;
 end;
 procedure PUSTISAHORE(x,y : Integer);  { rekurzivna vetva hore }
 begin
 vetvacislo:=vetvacislo+1;
      if (x > -1) and (y > -1) and
          (x <= p_okn_posch) and (y <= p_posch) then begin
      if (dom[x,y] = byte('-')) {and (matica [Coll,Roww] = #0)} then begin
            dom[x,y]:=byte('*'); gotoxy(x,y); write('*');
         readln;
          gotoxy(p_okn_posch+2, 6); write('Vetva # ',vetvacislo, '  ');
            PUSTISAVLAVO( x-1, y);
            PUSTISAVPRAVO( x+1, y);
            PUSTISAHORE( x, y-1);
            PUSTISADOLE( x, y+1);
      end;
        end;
     vetvacislo:=vetvacislo-1;
   end;
 {---------------------------------------------}
 procedure PUSTISADOLE(x,y : Integer);   { rekurzivna vetva dole }
 begin
 vetvacislo:=vetvacislo+1;
      if (x > -1) and (y > -1) and
          (x <= p_okn_posch) and (y <= p_posch) then begin
      if (dom[x,y] = byte('-')) {and (matica [Coll,Roww] = #0)} then begin
            dom[x,y]:=byte('*'); gotoxy(x,y); write('*');
         readln;
          gotoxy(p_okn_posch+2, 6); write('Vetva # ',vetvacislo, '  ');
            PUSTISAVLAVO( x-1, y);
            PUSTISAVPRAVO( x+1, y);
            PUSTISAHORE( x, y-1);
            PUSTISADOLE( x, y+1);
      end;
      end;
     vetvacislo:=vetvacislo-1;
 end;
 
 
begin
assign(f, 'dom.txt');
reset(f);
read(f,p_posch);
read(f,p_okn_posch);
read(f,p_nikto);
gotoxy(p_okn_posch+2, 1); write('Rozsvetcovanie domov podla Janka');
gotoxy(p_okn_posch+2, 2); write('Dom ma : ', p_posch, ' poschodi a ', p_okn_posch, ' okien na kazdom poschodi');
gotoxy(p_okn_posch+2, 3); write('doma niesu v ', p_nikto, ' bytoch (0)');
{setlength(dom,(p_posch*p_okn_posch)+1);  }
okno:=1;
poschodie:=1;
for i := 1 to p_okn_posch do begin
   for i2 := 1 to p_posch do begin
      dom[i,i2]:=byte('-'); gotoxy(i,i2); write('-');
   end;
end;
   if (p_nikto <> 0) then
       for i := 1 to p_nikto do begin
         read(f,poschodie);  { kde niesu doma }
         read(f,okno);
         dom[okno,poschodie]:=byte('0');
         gotoxy(okno,poschodie); write('0');
       end;
read(f,poschodie);    { kde zacali svietit }
read(f,okno);
gotoxy(p_okn_posch+2, 4); write('Svietit zacali ako prvy na ', poschodie, ' p. v ',p_okn_posch, ' okne.');
gotoxy(p_okn_posch+2, 5); write('Drzte [ENTER]');
closefile(f);
skontroluj (okno,poschodie);
readln;
end.