home *** CD-ROM | disk | FTP | other *** search
- begin (* givequiz *)
- numwrong := 0;
- writeln;
- for k := 1 to numquizquestions do
- begin
- wrong[k] := false;
- line := quizitems[order[k]];
- decode(line,german,english,genderchar,error);
- if error then
- begin
- writeln('FORMAT ERROR IN DATA:');
- putstr(line,TRMOUT);
- end
- else
- case quiz of
- GERMANTOENGLISH: begin
- putstr(german,TRMOUT);
- write('? ');
- if getline(response,TRMIN,MAXSTR) then
- begin
- stripnl(response);
- ucline(response);
- answerok := match(response,english);
- end
- else answerok := false;
- if not answerok then
- begin
- write(' NO ... '); putstr(english,TRMOUT);
- writeln;
- wrong[k] := true;
- numwrong := numwrong + 1;
- end
- end;
- ENGLISHTOGERMAN: begin
- putstr(english,TRMOUT); write('? ');
- if getline(response,TRMIN,MAXSTR) then
- begin
- stripnl(response);
- ucline(response);
- answerok := match(response,german);
- end
- else answerok := false;
- if not answerok then
- begin
- write(' NO ... '); putstr(german,TRMOUT);
- writeln;
- wrong[k] := true;
- numwrong := numwrong + 1;
- end;
- end;
- GENDER: begin
- putstr(german,TRMOUT); write('? ');
- repeat
- genderresponse := toupper(getc(c));
- until genderresponse in [NEWLINE,ord('N'),ord('M'),ord('F')];
- if genderresponse <> NEWLINE then writeln;
- if genderresponse <> genderchar then
- begin
- if genderchar = ord('M') then
- writeln(' NO ... MASCULINE')
- else if genderchar = ord('F') then
- writeln(' NO ... FEMININE')
- else
- writeln(' NO ... NEUTER');
- wrong[k] := true;
- numwrong := numwrong + 1;
- end;
- end;
- end (* case *);
- end (* for k *);
- end (* givequiz *);
-
- procedure givescore(numquestions,numwrong:integer);
-
- begin
- writeln;
- writeln(numquestions,' ITEMS GIVEN, ',numwrong,' WRONG.');
- if numquestions > 0 then
- writeln('SCORE = ',(numquestions-numwrong)*100/numquestions:3:0,
- ' PERCENT.');
- writeln;
- end;
-
- procedure getrepeatoption(var option:repeatoption);
-
- var c :character;
- j,k :integer;
- begin
- writeln('SELECT ONE:'); writeln;
- writeln('1 - REPEAT WITH SAME WORD LIST');
- writeln('2 - REPEAT ONLY MISSED ITEMS');
- writeln('3 - NEW QUIZ');
- writeln('4 - EXIT PROGRAM');
- repeat
- writeln; write('? ');
- c := getc(c);
- until c in [ord('1')..ord('4')];
- writeln;
- option := SAMEWORDS;
- j := c-ord('1');
- for k := 1 to j do option := succ(option);
- end;
-
- procedure reinit(var option: repeatoption; wrong: booleanarray;
- numwrong: integer; var numquizquestions: integer);
-
- var
- j,k :integer;
-
- begin
- if option = WRONGWORDS then
- begin
- j := 1;
- for k:=1 to numquizquestions do
- if wrong[k] then
- begin
- order[j] := order[k];
- j := j + 1;
- end;
- numquizquestions := numwrong;
- end
- else if option = SAMEWORDS then
- begin
- numquizquestions := numquestions;
- for k:=1 to numquestions do order[k] := k;
- end;
- if option in [WRONGWORDS,SAMEWORDS] then clrscr;
- end;
-
- begin (* main program *)
- lowvideo; { Turbo intrinsic }
- quit := false;
- ioinit(2);
- randomize; { Turbo intrinsic fn. }
- while (not quit) do
- begin
- clrscr; { Turbo intrinsic fn. }
- writeln('GERMAN VOCABULARY QUIZ PROGRAM');
- writeln;
- writeln('BY JON DART ... VERSION 2.0 (01-MAR-86)');
- openfiles(nounfile,nonounfile);
- getquiztype(quiz);
- readsizes(numnouns,numnonouns);
- if quiz = GENDER then
- maxitems := numnouns
- else
- maxitems := numnouns + numnonouns;
- getnumquestions(quiz,numquestions,maxitems);
- if numquestions > 0 then
- begin
- fillarray(quiz,quizitems,numquestions,
- numnouns,numnonouns,maxitems);
- for k:=1 to numquestions do order[k] := k;
- numquizquestions := numquestions;
- repeat
- scramble(order,numquizquestions);
- givequiz(quiz,order,numquizquestions,quizitems,
- wrong,numwrong);
- givescore(numquizquestions,numwrong);
- getrepeatoption(option);
- reinit(option,wrong,numwrong,
- numquizquestions);
- until option in [NEWQUIZ,EXIT];
- quit := option = EXIT;
- end;
- pclose(nounfile);
- pclose(nonounfile);
- end;
- end.