Feladat:
Egy tetszõleges vers gyakoriság-elemzése.
Környezet:
IBM PC-kompatibilis gép, DOS kompatibilis operációs rendszer (futtatva csak OS/2 Warp 4.0-n volt).
Használat:
A program indítása: A program az a:infalk.exe beírásával indítható, ahol a az »a:» a program elérési útja, a infalk.exe pedig a neve.
A program bemenete: Eg tetszõleges szöveg (szövegfile-bõl vagy billenty¹zetrõl).
A program eredménye: Az alábbi adatok:
Összes sor, szó, bet¹. A sorok hossza (karakterben), az egy sorra juto szavak szama (kerekített átlag), az egyes szavak hossza, a szavak atlagos hossza, az ASCII-437-es kódtábla (amerikai kiosztás) karaktereinek elõfordulása (db/elem).
Hibalehetõségek:
Ha a bevitt adat eleme a program által megatt tartománynak, akkor azt az atot újra bekéri.
Bármilyen egyéb probléma esetén lépjen kapcsolatba a program szerzõjével, akit (szamosp(a)inf.elte.hu) címen keresztül tud elérni.
Feladat:
Egy tetszõleges vers gyakoriság-elemzése.
Specifikáció:
Bemenet: sÎszöveg
Kimenet: db:tömb[0..255] γ; hossz:tömb[1..max] γ;
betudb,szodb,sordb γ;
szo,sor:array[1..max] of rec; {max: legfeljebb ennyi sort engedünk meg: teszteléskor ennek a maximuma "maxint/4" volt - ez azonban több helyet foglal}
rec=rekord hossza γ;
zgsmsh,zgtmsh,melymgr,magasmgrγ;
Elõfeltétel: Nincs. {Ha nem létezik az input-file, akkor hibaüzenetet küld.}
Utófeltétel: Megszámolás(nem(eof[szöveg]), a szöveg bet¹i, betudb),
Megszámolás(nem(eof[szöveg]), a szöveg szavai, szodb),
Megszámolás(nem(eof[szöveg]), a szöveg sorai, sordb),
"i-re (i γ+): szo[i].hossza:=¯bet¹k, ahol bet¹Îszo[i].
"i-re (iγ+): sor[i].hossza:=¯bet¹k, ahol bet¹Îsor[i].
Környezet:
IBM PC-kompatibilis gép, S kompatibilis operációs rendszer.
(teszteléskor: OS/2 Warp 4.0 magyar, Fp 5.0)
Turbo Pascal (min. 5.5) fejlesztõi környezet, Crt unit. (tesztelve: TP 7.0)
Használat:
A program indítása:
A program indítása: A program az a:infalk.exe beírásával indítható, ahol a az »a:» a program elérési útja, a infalk.exe pedig a neve.
A feladatot megoldó program mûködésének algoritmusa - egy lehetséges változat:
Eljárások:
Alapprogram
ciklus
foprogram;
Ki:('Ha be akarja fejezni, nyomja meg az ESC-billentyut!');
Be:(vege);
ciklus amig (vege=#27);
Alapprogram vége
Fprogram eljárás;
változó kihova,behonnan:char; fnev:string;
szoveg:string; tart:text; cv:egész;x:char;
eljárás nullaz;
változó j:egész;
eljárás-kezdet
betudb:=0; sordb:=1; szodb:=1;
fvagy j:=1 to max eljárás-kezdet
szo[j].hossza:=0; sor[j].hossza:=0; eljárás-vége;
zgsmsh:=0; zgtmsh:=0; melymgr:=0; magasmgr:=0;
eljárás-vége;
eljárás cim;
eljárás-kezdet
Ki:('Vers gyakorisag-mero program':2);
Ki:('Szamoskozi Peter - 2000.november':3);
Ki:;
eljárás-vége;
eljárás befele;
változó i:egész;
eljárás-kezdet
nullaz;
clrscr;
cim;
ciklus
Ki:;
Ki:('Honnan olvassam a szoveget? (File, Bill.)'); Be:(behonnan);
hozzarendel(szf,'e:\1\2\file.txt');
ciklus amig ((behonnan='f') vagy (behonnan='b'));
ha behonnan='f' akkor hozzarendel(szf,'e:\1\2\file.txt')
egyébként eljárás-kezdet hozzarendel(tart,'tart.txt'); reKi:(tart);
Ki:('A befejezo-karakter a "kukac" (_a_)'); cv:=1;
ciklus
Ki:('Kerem a(z) ',cv,'. sort: ');
Be:(szoveg); Ki:(tart,szoveg); x:=szoveg[length(szoveg)];
növel(cv);
ciklus amig (x='_a_'); close(tart);
hozzarendel(szf,'tart.txt'); eljárás-vége;
fvagy i:=1 to 255 db[i]:=0;
eljárás-vége; {proc. befele}
eljárás-kezdet
befele;
Ki:('Szamolok...'); szamol;
ciklus
Ki:('Hova irjam az eredmenyt? /File, Monitvagy/'); Be:(kihova);
ciklus amig ((kihova='f') vagy (kihova='m'));
ha kihova='f' akkor hozzarendel(f,'ossz.txt') egyébként hozzarendelcrt(f);
ha (kihova='f') akkor Ki:('Az eredmenyek az "ossz.txt" file-ban vannak')
egyébként Ki:('Az eredmenyek: ');
kiir(f);
Fõprogram eljárás-vége;
Szamol eljárás;
eljárás szonakvege(c:char; változó szvege:egész);
változó sv:egész;
eljárás-kezdet
sv:=vagyd(c);
ha (sv=32) akkor szvege:=0 egyébként szvege:=1;
eljárás-vége;
eljárás sorvege(változó c:char; változó svege:egész);
változó sv:egész;
eljárás-kezdet
sv:=vagyd(c);
ha (sv=13) akkor svege:=0 egyébként svege:=1;
eljárás-vége;
eljárás fajta;
változó li:egész; k:char; i,j:egész;
eljárás-kezdet
megnyit(szf);
i:=1; j:=1;
ciklus amig nem(eof(szf)) eljárás-kezdet
Be:(szf,k); növel(db[vagyd(k)]); növel(betudb); k:=nagybet¹(k);
ha ((k='B') vagy (k='D') vagy (k='G') vagy (k='V') vagy (k='Z')) akkor növel(zgsmsh)
egyébként ha ((k='F') vagy (k='H') vagy (k='K') vagy (k='P') vagy (k='S') vagy (k='T')) akkor növel(zgtmsh)
egyébként ha ((k='A') vagy (k='O') vagy (k='U')) akkor növel(melymgr)
egyébként ha ((k='E') vagy (k='I')) akkor növel(magasmgr);
sorvege(k,li);
ha (li=1) akkor növel(sor[sordb].hossza)
egyébként eljárás-kezdet növel(sordb); {növel(i);} eljárás-vége;
szonakvege(k,li);
ha (li=1) akkor növel(szo[szodb].hossza)
egyébként növel(szodb); {növel(j); space}
eljárás-vége;
zár(szf);
eljárás-vége;
eljárás-kezdet
fajta;
Számol eljárás-vége;
Kiir eljárás (változó f:szöveg);
változó i:egész; szoatlag:egész;
yy,mm,dd,yow:wvagyd; {a datumhoz}
eljárás kicim;
eljárás-kezdet
Ki:(f,' ');
Ki:(f,' A megadott szoveg gyakorisagi elemzese');
AktualisDatum(yy,mm,dd,yow);
Ki:(f,' Az elemzes keszult: ',yy,'.',mm,'.',dd,'.');
Ki:(f,'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
Ki:(f,' ');
eljárás-vége;
eljárás-kezdet
reKi:(f);
kicim;
Ki:(f,'Az osszes sor: '); Ki:(f,sordb);
Ki:(f,' ');
szodb:=db[32]+sordb-2;
Ki:(f,'A szavak szama: '); Ki:(f,szodb);
Ki:(f,' ');
Ki:(f,'A sorok hossza (sor/karakter)');
fvagy i:=1 to sordb eljárás-kezdet
Ki:(f,i); Ki:(f,' - ');
ha ((i>2) and ((i mod 10)=0)) akkor
eljárás-kezdet Ki:(f,sor[i].hossza); Ki:(f,','); eljárás-vége
egyébként eljárás-kezdet Ki:(f,sor[i].hossza); Ki:(f,', '); eljárás-vége;
eljárás-vége;
Ki:(f,''); Ki:(f,' ');
Ki:(f,'Az egy sorra juto szavak szama (atlag): ');
Ki:(f,(szodb maradékosan-osztva sordb));
Ki:(f,'');
Ki:(f,'A szavak hossza: (szo[hossz])');
fvagy i:=1 to szodb eljárás-kezdet {Ez nem teljesen OK a TP7.0-ban}
Ki:(f,i); Ki:(f,' - ');
ha ((i>2) and ((i mod 10)=0)) akkor
eljárás-kezdet Ki:(f,szo[i].hossza); Ki:(f,','); eljárás-vége
egyébként eljárás-kezdet Ki:(f,szo[i].hossza); Ki:(f,', '); eljárás-vége;
eljárás-vége;
Ki:(f,''); Ki:(f,' ');
Ki:(f,'A szavak atlagos hossza: ');
szoatlag:=0;
fvagy i:=1 to szodb eljárás-kezdet
szoatlag:=(szoatlag+szo[i].hossza);
eljárás-vége;
szoatlag:=(szoatlag maradékosan-osztva szodb);
Ki:(f,szoatlag);
Ki:(f,' ');
Ki:(f,'Az szovegben levo betuk, ABC-szerint, Pl: betu(db)');
fvagy i:=32 to 255 eljárás-kezdet
Ki:(f,chr(i)); Ki:(f,':'); Ki:(f,'['); Ki:(f,db[i]); Ki:(f,']');
Ki:(f,', ');
ha ((i mod 10)=0) akkor Ki:(f,'');
eljárás-vége;
Ki:(f,''); Ki:(f,' ');
Ki:(f,'A kulonbozo betufajtak darabszama');
Ki:(f,'zonges massalhangzok: '); Ki:(f,zgsmsh);
Ki:(f,'zongetlen massalhangzok: '); Ki:(f,zgtmsh);
Ki:(f,'mely, (rovid) maganhangzok: '); Ki:(f,melymgr);
{**}Ki:(f,'');
Ki:(f,'magas (rovid) maganhangzok: '); Ki:(f,magasmgr);
Kiir eljárás-vége;
Deklaráció:
Konstans max=kerekít(maxint/4); {szo es sorhossz}
Típus rekord=record hossza:egész; eljárás-vége;
Változó db:array[0..255] egész;
hossz:tömb[1..max] egész;
betudb,szodb,sordb:egész;
szo,sor:tömb[1..max] rekord;
zgsmsh,zgtmsh,melymgr,magasmgr:egész;
f:szöveg; {a kimenetnek}
szf:szöveg; {innen olvas}
vege:karakter;
Budapest, 2000. november 8.