program tesztprogram; {Szamoskozi Peter - szamosp(a)inf.elte.hu Budapest, 2000. szeptember 30. - GPL} uses {newdelay,}crt; const maxvalasz=10; type vtip=(egy,tobb,mind); valasz=record szoveg:string; pontszam:integer; end; kerdes=record vdb:integer; szov:string; tip:vtip; valaszok:array[1..maxvalasz] of valasz; end; var f:file of kerdes; fnev:string; k:kerdes; {A teszt neve, mint filenev} maxpont:integer; {A maximalisasn adhato pontszam} fp:integer; osszpont:integer; {Az elert pontszam} kp:longint; n:integer; {A kerdesek szama} jelolt:array[0..maxvalasz] of boolean; {Egy adott valaszt mar valasztotta-e} mire:string; {Tanarkent vagy diakkent?} vegenbe:string; {Abbahagyja-e - ez kell az ellenorzeshez /val(a,b,c)/} vegee:integer; {A "folytassam-e az egeszet, azaz "ujra-e" valtozoja} vegenok:integer; {ld. "vegenbe"} procedure letrehoz; {-- A teszt adatainak megadasa --} var be:string; ok:integer; {A val(a,b,c) ebben tarolja a hibauzenet kodjat} begin clrscr; repeat writeln('Mi legyen a teszt cime? (legfeljebb 8 karakter)'); readln(fnev); until length(fnev)<=8; {$I-} assign(f,fnev+'.tkf'); {A Teszt Kerdeseit tartalmazo File} rewrite(f); repeat write('A kerdesek szama: '); readln(be); val(be,n,ok); until (ok=0); {Illik a termeszetes szamokhoz tartozo kerdesszamot megadni} end; procedure kerdesbe; {-- A kerdesek adatainak megadasa --} const valtip:array[egy..mind] of string=('e','t','m'); var be:string; {foleg a val(a,b,c)-hez} sv:char; {foleg egy-egy billentyure fog figyelni} ok:integer; {foleg a val(a,b,c)-hez} vt:vtip; i,j:integer; begin writeln; for i:=1 to n do {Mindegyik kerdesnel...} begin write('A(z) ',i,'. kerdes szovege: '); readln(k.szov); repeat write('A valaszok szama: '); readln(be); val(be,k.vdb,ok); {ld. kerdesszamok, feljebb} until (ok=0); repeat write('A kerdesra adhato valaszok mennyisege (Egy, Tobb, Mind)? '); readln(sv); until (sv='e') or (sv='E') or (sv='t') or (sv='T') or (sv='m') or (sv='M'); case sv of {A kesobbi konnyebb muveletvegzes miatt} 'e','E': sv:='e'; 't','T': sv:='t'; 'm','M': sv:='m'; end; vt:=egy; while valtip[vt]<>sv do vt:=succ(vt); k.tip:=vt; for j:=1 to k.vdb do {valaszonkent} begin writeln('A(z) ',j,'. valasz szovege:'); readln(k.valaszok[j].szoveg); repeat write('Az erre adando pontszam: '); readln(be); val(be,k.valaszok[j].pontszam,ok); until (ok=0); end; write(f,k); {Ezeket mind elmentjuk az "f" file-ba...} writeln; end; close(f); {...amit szepen be is zarunk} {$I+} end; procedure tesztfile; begin repeat clrscr; writeln('Melyik file-ban levo kerdeseket akarja feltenni?'); writeln('(legfeljebb 8 karakter)'); readln(fnev); assign(f,fnev+'.tkf'); { a Teszt KerdesFile-ja :-) } {$I-} reset(f); close(f); {$I+} until (ioresult=0); {Egyalatalan letezik-e ez a file, stb.} reset(f); n:=filesize(f); {Mivel tipusos a file => a kerdesek szama:=fsize(f)} end; procedure valaszbe; {-- Kerdes ki, valasz be --} var i,j:integer; sv:string; {segedvaltozok} ok:integer; ksz:integer; begin osszpont:=0; maxpont:=0; for i:=1 to n do {Kerdesenkent} begin clrscr; read(f,k); writeln(k.szov); writeln; fp:=0; kp:=0; for j:=1 to k.vdb do {Az egy kerdeshez tartozo lehetosegek felkinalasa} begin writeln(j,'. ',k.valaszok[j].szoveg); writeln; if k.valaszok[j].pontszam>0 then fp:=fp+k.valaszok[j].pontszam; end; case k.tip of {valaszlehetosegek} egy: writeln('Egy jo megoldas van'); tobb: writeln('Tobb jo megoldas, elfogadhato a reszeredmeny'); mind: writeln('Tobb jo megoldas, reszeredmeny nem elfogadhato'); end; writeln; for j:=1 to k.vdb do begin jelolt[j]:=false; end;{Eddig me'g semmit nem jeloltunk meg} repeat repeat write('A helyesnek velt valasz sorszama /zaras:0/: '); readln(sv); val(sv,ksz,ok); until (ok=0); if (jelolt[ksz]) then writeln('Ezt a valaszt mar megjelolte') else jelolt[ksz]:=true; { Jeloljuk meg az "A"-t... :-) } until ksz=0; {Ha "0"-t kap, megy tovabb} for j:=1 to k.vdb do if jelolt[j] then kp:=kp+k.valaszok[j].pontszam; case k.tip of egy : if kp>0 then osszpont:=osszpont+kp; tobb: if kp>0 then osszpont:=osszpont+kp; mind: if kp=fp then osszpont:=osszpont+kp; end; maxpont:=maxpont+fp; end; {Mindegyik kerdest feltette} end; {-- Valaszbeolvas vege --} procedure kiertekel; {-- A teszt kiertekelese --} var filebae:string; filebanev:string; filebaf:string; fuz:string; fuznev:string; fuznevf:file; f:text; procedure hovairjam; begin writeln('Irjam file-ba? /i:igen - egyebkent nem/'); readln(filebae); if ((filebae='i') or (filebae='I')) then begin writeln('Fuzzem egy masikhoz? /i:igen - egyebekent nem/'); readln(fuz); if ((fuz='i') or (fuz='I')) then begin{ha hozzafuzi} repeat writeln; write('Kerem a letezo file nevet: '); readln(fuznev); assign(fuznevf,fuznev); {$I-} reset(fuznevf); close(fuznevf); {$I+} writeln('Ez a szolgalatatas meg nem uzemel'); {Append(fnuznev,szovegek)-el kellene meghivni a lentebbi kiirasokat} until {(ioresult=0)} 1=1; end {hozzafuzes vege} else begin repeat {uj file-ba ment} writeln('Kerem a file nevet: '); readln(filebanev); until (length(filebanev)<=8); filebanev:=filebanev+'.txt'; assign(f,filebanev); end; end; if ((filebae<>'i') or (filebae<>'I')) then begin {kepernyore ir} assigncrt(f); end; end; procedure beirom(var f:text); {Ahova irni fogja} begin {clrscr; - Mivel file-ba is irkalhatunk, igy sok ertelme nincs} {gotoxy(15,3);} rewrite(f); writeln(f,'A ', fnev, 'teszt eredmenye:'); writeln(f,'----------------------------'); {gotoxy(5,6);} writeln; write(f,'Legmagasabb elerheto pontszam: '); {gotoxy(35,6);} writeln(f,maxpont); {gotoxy(5,8);} writeln; write(f,'Elert pontszam: '); {gotoxy(35,8);} writeln(f,osszpont); {gotoxy(5,10);} writeln; write(f,'Teljesitmeny: '); {gotoxy(35,10);} writeln(f,(100*osszpont)div(maxpont),'%'); repeat until keypressed; close(f); end; begin hovairjam; {File-ba vagy a monitorra?} beirom(f); {Az elozo sorban feltett kerdesre adott valaszhelyre beirja a teszt eredmenyet} end; {-- A teszt kiertekelesenek vege --} procedure hasznal(tanare:string); begin clrscr; if ((tanare='i') or (tanare='I')) then begin letrehoz; {Legyen mibol dolgozni...} kerdesbe; {... es mikkel} end else begin tesztfile; {Honnan akarjuk a kerdeseket feltenni?} valaszbe; {Most tessuk fel oket} kiertekel; {A felhasznalonak mit sikerult elernie} end; end; BEGIN {-- A foprogram eleje --} repeat writeln('Tanari hasznalatra? /i:igen - egyebkent diakra/'); readln(mire); hasznal(mire); repeat writeln(' Ujra? (1/0) '); readln(vegenbe); val(vegenbe,vegee,vegenok); until ( (vegenok=0) and ((vegee=1) or (vegee=0)) ); until (vegee=0); close(f); {Ebbol olvastuk a kerdeseket} END. {-- A foprogram vege --}