A 43-as sorsz m£ beadand˘ dokumet ci˘j nak kieg‚szĦt‚se (a teljes algoritmus) {viz:0.0 - szfold: >0} Elj r s foprogram; szgdb:=0; sorkihagy(10-szer); fileok; cim; adatbeker; adatkiir; igaze(tomb); bez r(fbe); bez r(fki); kiĦr('Folytassam? '); beolvas(be); ha ( nagybet(be)<>'N' ) akkor foprogram; alg. v‚ge; {- foporgram -} Elj r s fileok; {olvasas} muv:=false; mibol(muv); probaszam:=2; ha filebol akkor fnevbeker(probaszam,fbe,muv); egy‚bk‚nt assigncrt(fbe); ha probaszam=0 akkor assigncrt(fbe); olvas sranyit(fbe); {iras} muv:=true; mibol(muv); probaszam:=2; ha fileba akkor fnevbeker(probaszam,fbe,muv); egy‚bk‚nt assigncrt(fki); ha probaszam=0 akkor assigncrt(fki); Ħr sranyit(fki); alg. v‚ge {fileok} Elj r s fnevbeker(v ltoz˘ hanyszor:eg‚sz; v ltoz˘ ff:text; konstans muvbe:logikai); ha hanyszor>0 akkor kezdet ha nem(muvbe) akkor kezdet {olvas} kiĦr('Melyik file-bol (letezo, 8 kar. hosszu nevu)? '); beolvas(fbenev); ha ((hossz(fbenev)<1) or (hossz(fbenev)>8)) akkor cs”kkent(hanyszor); fnevbeker(hanyszor,ff,muvbe); holvanfile:=(hol van ilyen file); ha holvanfile='' akkor cs”kkent(hanyszor); fnevbeker(hanyszor,ff,muvbe); el g v‚ge {olvas} egy‚bk‚nt kezdet {ir} kiĦr('Melyik file-ba? (8 kar. hosszu nevu - felulirodik!) '); beolvas(fkinev); ha (nem(10) } v ltoz˘ holvanfile:sz”veg; Elj. v‚ge; {-- fnevbeker --} Elj r s mibol(konstans beki:logikai); {be:0,ki:1} ha beki=false akkor kiĦr('File-bol akar dolgozni? '); beolvas(be); ha ( upcase(be)='N' ) akkor filebol:=false egy‚bk‚nt filebol:=true; egy‚bk‚nt kiĦr('File-ba akar dolgozni? '); beolvas(be); ha ( nagybet(be)='N' ) akkor fileba:=false egy‚bk‚nt fileba:=true; v ltoz˘ be:karakter; Elj. v‚ge; {--- mibol ---} v ltoz˘ probaszam:eg‚sz; {a probalkozasok szama} Elj. v‚ge; {-- fileok --} Elj r s adatbeker; ha ( hossz(fkinev)<>0 ) akkor kiĦr(fki,'Automata legyen a feltoltes? '); kiĦr('Automata legyen a feltoltes? '); beolvas(fbe,svbe); ha nagybet(svbe)='N' akkor svlogp:=true; egy‚bk‚nt svlogp:=false; ha ( hossz(fkinev)<>0 ) akkor kiĦr(fki,svbe); tmaxbeker(tmax); tombfeltolt(tomb,tmax,svlogp); alg. v. {adatbeker} Elj r s tmaxbeker(v ltoz˘ ertek:eg‚sz); ha ( hossz(fkinev)<>0 ) akkor kiĦr(fki,'A meresek szama (poz. egesz, >5)? '); kiĦr('A meresek szama (50 ) akkor kiĦr(fki,ertek); v ltoz˘ ok:eg‚sz; ertekbe:sz”veg; Elj. v‚ge; {--- tmaxbeker ---} Elj. v‚ge; {-- adatbeker --} Elj r s adatkiir; kiĦr(fki); kiĦr(fki,'A tomb elemei: '); kiĦr(fki,'[ ',tomb[1]); t:=(tmax-1); Ciklus i:=2-t“l t-ig m:=(i mod 25); ha (m=0) akkor kiĦr(fki,', ',tomb[i],',') egy‚bk‚nt ha (m=1) akkor kiĦr(fki,tomb[i]) egy‚bk‚nt kiĦr(fki,', ',tomb[i]); C. v‚ge; n”vel(m); ha (m=0) akkor kiĦr(fki,', ',tomb[i],' ]') egy‚bk‚nt ha (m=1) akkor kiĦr(fki,tomb[i],' ]') egy‚bk‚nt kiĦr(fki,', ',tomb[i],' ]'); v ltoz˘ i:eg‚sz; m:eg‚sz; t:eg‚sz; Elj. v‚ge; {-- adatkiir --} v ltoz˘ svbe:karakter; svlogp:logikai; be:karakter; Elj. v‚ge; {foprogram}} Elj r s igaze(v ltoz˘ x:tmeresint); {Biz. be: minden sziget legmagasabb pontja egyben csucs is!} igazei:=2; igazemindig(x,igazei); kiĦr(fki,'--- Osszesegeben a(z) allitas: ',ellenoriz(szgdb,szgcsucsigaze)); Fggv‚ny szigetkezdet(konstans T:tmeresint; v ltoz˘ index:eg‚sz):logikai; ha ((T[index]>0) ‚s (T[index]=0)) akkor szigetkezdet:=true; n”vel(szgdb); egy‚bk‚nt szigetkezdet:=false; Fv. v‚ge; Fggv‚ny szigetvege(konstans T:tmeresint; v ltoz˘ index:eg‚sz):logikai; szigetvege:=((T[index]=0) ‚s (T[index]>0)); Fv. v‚ge; Fggv‚ny tulsopart(konstans T:tmeresint;i:eg‚sz):logikai; tulsopart:=(T[i]=tulszel); Fv. v‚ge; Fggv‚ny csucse(konstans x:tmeresint; v ltoz˘ index:tindex):logikai; csucse:=( (x[index]>x[index-1]) ‚s (x[index]1) akkor cs”kkent(n); ellenoriz:=ellenoriz(n,t); egy‚bk‚nt ellenoriz:=t[n]; egy‚bk‚nt ellenoriz:=false; {ha hamis erteket talalt} Fv. v‚ge; {- ellenoriz -} v ltoz˘ szgcsucsigaze:tigaztomb; {a(z) i. szigetnel igaz-e az allitas} lmhcsucsmaxhely:eg‚sz; {a legmag. cs. merete - LegMagHelygyujt} melyik:tindex; {a maxpontkivalaszthoz} be:karakter; {"megegyszer?"} igazei:eg‚sz; Elj. v‚ge; {- Igaze -} Elj r s tombfeltolt(v ltoz˘ t:tmeresint; i:tindex; hogyan:logikai); korabbanvolt:=false; j:=1; t[1]:=tulszel; t[2]:=0; t[tmax]:=tulszel; t[tmax-1]:=0; ha hogyan=true akkor manfeltolt(t,i,j,korabbanvolt) egy‚bk‚nt autofeltolt(t,i,j,korabbanvolt); alg. v. {tombfeltolt} Elj r s manfeltolt(v ltoz˘ t:tmeresint; konstans i:tindex; v ltoz˘ j:tindex; v ltoz˘ volt:logikai); ha volt=false akkor volt:=true; j:=3; ha (j<=(i-2)) akkor ha ( hossz(fkinev)=0 ) akkor kiĦr(fki,'A(z) ',j,'. meres eredmenye? ') egy‚bk‚nt kiĦr(fki,'A(z) ',j,'. meres eredmenye? '); beolvas(fbe,svmerbe); kezdet t[j]:=svmer; n”vel(j); v‚ge; manfeltolt(t,i,j,volt); el g. v‚ge; v ltoz˘ svmer:eg‚sz; svmerbe:karakter; ok:eg‚sz; Elj. v‚ge; {-- manfeltolt --} Elj r s autofeltolt(v ltoz˘ t:tmeresint; konstans i:tindex; v ltoz˘ j:tindex; v ltoz˘ volt:logikai); ha volt=false akkor volt:=true; j:=3; ha (j<=(i-2)) akkor t[j]:=(v‚letlensz m); n”vel(j); autofeltolt(t,i,j,volt); Elj. v‚ge; {-- autofeltolt --} v ltoz˘ korabbanvolt:logikai; j:tindex; Elj. v‚ge; {- tombfeltolt -} *** Elj r s cim; kiĦr_k”z‚pre_al h£zva(fki,'(A 43-as sorszamu) Szigetes pelda megoldasa rekurzioval'); kiĦr_k”z‚pre(fki,'Irta: Szamoskozi Peter (2001. februar 24.)'); sorkihagy; sorkihagy; Elj. v‚ge; {- cim -} F“bb v ltoz˘k, tĦpusok: konstansok maxc=794; {tobbnel "stack overflow..."} tulszel=20; {A tulso partot jelzo ertek a mereseknel} tĦpusok tindex=eg‚sz; telem=eg‚sz; TmeresInt=t”mb[1..maxc]: telem; Tigaztomb=t”mb[1..maxc]: logikai; v ltoz˘k Tomb:tmeresint; Tmax:eg‚sz; {Legfeljebb hany meresunk lehet a tengeren?} szgdb:eg‚sz; {ennyi sziget van}; filebol,fileba:logikai; {Honnan olvasson adatokat?} f,fki,fbe:text; {a file logikai valtozoja}; fkinev,fbenev:sz”veg; {a file neve} muv:logikai; {milyen muveletet akarunk a file-al vegezni? /1-ir,0-olvas/} ---(alg. v‚ge)---