{ ============== } { 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.