Umístnení souboru www.TrSek.com/cover/mojzis/z_pismenkovej_ulice.pas{ ============== }
{ 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 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.