home *** CD-ROM | disk | FTP | other *** search
- PROGRAM SPELLTST;
- CONST
- MAX_WORDS = 50; {MAX WORDS ALLOWED IN THE LIST}
- MAX_CHARS = 14; {MAX NUMBER OF CHARACTERS IN A WORD}
- TYPE
- WORDS = STRING[MAX_CHARS];
- STR14 = STRING[MAX_CHARS];
- VAR
- WORDFILE: FILE OF WORDS;
- FILENAME: STRING[14];
- WORD_LIST: ARRAY[1..MAX_WORDS] OF WORDS; {SPELLING WORD ARRAY}
- TEMP_LIST: ARRAY[1..MAX_WORDS] OF WORDS; {TEMP SPELLING WORD ARRAY}
- NUMBER_OF_TRIES, {HOW MANY TRIES ON THE LIST }
- BOTTOM_LIST, {BOTTOM OF LIST MARKER}
- TOTAL_IN_LIST, {TOTAL NUMBER OF WORDS IN LIST}
- DELAY_TIME, {DELAY TIMER}
- RANDOM_WORD,
- DISPLAY_TIME: INTEGER; {HOW LONG TO DISPLAY WORD ON CRT}
- CORRECT: BOOLEAN; {ANSWER CORRECT FLAG}
- SCORE, {NUMBER OF CORRECT SPELLINGS}
- I : INTEGER; {GENERAL PURPOSE COUNTER}
- SPELLING_WORD, {ANSWER TO A SPELLING WORD}
- NAME: STR14; {STUDENTS NAME}
- ANSWER: CHAR;
-
- FUNCTION LOWCASE(LETTER: CHAR): CHAR;
- BEGIN
- IF (ORD(LETTER) >= 65) AND (ORD(LETTER) <= 90)
- THEN LOWCASE := CHR(ORD(LETTER) + 32)
- ELSE
- LOWCASE := LETTER;
- END; {FUNCTION LOWCASE}
-
- FUNCTION FIX_NAME(NAME: STR14): STR14;
- VAR
- I: INTEGER;
- BEGIN
- NAME[1] := UPCASE(NAME[1]);
- FOR I := 2 TO LENGTH(NAME) DO
- NAME[I] := LOWCASE(NAME[I]);
- FIX_NAME := NAME;
- END;
-
- PROCEDURE DISPLAY_OPTIONS;
- VAR
- I,
- LINE,
- COL,
- NUM: INTEGER;
-
- PROCEDURE ADD_NEW_LIST;
- BEGIN
- CLRSCR;
- GOTOXY(5,12);
- WRITE('Enter name of file to store new list of spelling words, ');
- GOTOXY(23,14);
- WRITE('Ex. B:WORDS1 :? ');
- READLN(FILENAME);
- ASSIGN(WORDFILE,FILENAME);
- REWRITE(WORDFILE);
- CLRSCR;
- GOTOXY(5,1);
- WRITELN('Enter each word, one at a time when you see a "?".');
- WRITELN('Enter "endlist" when all the spelling words are entered.');
- NUM := 1;
- LINE := 4;
- COL := 10;
- REPEAT
- GOTOXY(COL,LINE);
- WRITE('WORD #',NUM:2,' ?');
- READ(SPELLING_WORD);
- IF (FIX_NAME(SPELLING_WORD) <> 'Endlist')
- THEN BEGIN
- WORD_LIST[NUM] := SPELLING_WORD;
- NUM := NUM + 1;
- LINE := LINE + 1;
- IF LINE = 25 THEN
- BEGIN
- LINE := 4;
- COL := COL + 20
- END
- END;
- UNTIL FIX_NAME(SPELLING_WORD) = 'Endlist';
- TOTAL_IN_LIST := NUM - 1;
- FOR I := 1 TO TOTAL_IN_LIST DO
- WRITE(WORDFILE,WORD_LIST[I]);
- CLOSE(WORDFILE);
- END; {PROCEDURE ADD_NEW_LIST}
-
- PROCEDURE GET_OLD_LIST(FILENAME: STR14);
- VAR
- I: INTEGER;
- BEGIN
- CLRSCR;
- ASSIGN(WORDFILE,FILENAME);
- RESET(WORDFILE);
- CLRSCR;
- I := 1;
- WHILE NOT(EOF(WORDFILE)) DO
- BEGIN
- READ(WORDFILE,SPELLING_WORD);
- WORD_LIST[I] := SPELLING_WORD;
- I := I + 1;
- END;
- TOTAL_IN_LIST := I - 1;
- CLOSE(WORDFILE);
- END; {PROCEDURE GET_OLD_LIST}
-
- BEGIN (* PROCEDURE DISPLAY_OPTIONS *)
- DELAY_TIME := 3000;
- CLRSCR;
- GOTOXY(28,1);
- WRITE('*****************');
- GOTOXY(28,2);
- WRITE('* SPELLING TEST *');
- GOTOXY(28,3);
- WRITE('*****************');
- GOTOXY(10,5);
- WRITELN('This program will display a word in the middle of the screen for a');
- WRITELN(' short time, then will disappear. You are to then type in the correct');
- WRITELN(' spelling of the word. If you get a word wrong, you will be told and ');
- WRITELN(' that you were wrong and you will be asked to spell in again later.');
- WRITELN(' When you have correctly spelled all the words, the amount of time the');
- WRITELN(' word is to be displayed will be shortened and you will go through the');
- WRITELN(' list again. This will be repeated until you have when through the list');
- WRITELN(' the number of times you selected (1, 2, or 3 times). GOOD LUCK !!');
- GOTOXY(27,18);
- WRITE('What is your name ? ',^G^G);
- READLN(NAME);
- NAME := FIX_NAME(NAME);
- NUMBER_OF_TRIES := 0;
- WHILE (NUMBER_OF_TRIES < 1) OR (NUMBER_OF_TRIES > 3) DO
- BEGIN
- GOTOXY(10,20);
- WRITELN('How many times do you wish to practice the list (1, 2, or 3)?');
- READ(KBD,ANSWER);
- CASE ANSWER OF
- '1': NUMBER_OF_TRIES := 1;
- '2': NUMBER_OF_TRIES := 2;
- '3': NUMBER_OF_TRIES := 3;
- ELSE
- BEGIN
- GOTOXY(1,20);
- CLREOL;
- WRITE(^G^G^G,'ANSWER 1, 2, OR 3 ONLY!!!');
- DELAY(DELAY_TIME - 1000);
- GOTOXY(1,20);
- CLREOL
- END
- END { CASE }
- END;
- GOTOXY(25,24);
- WRITE('It''s nice to meet you, ',NAME,'.');
- DELAY(DELAY_TIME);
- CLRSCR;
- GOTOXY(1,12);
- WRITELN('Enter name of file containing list of spelling words.');
- WRITELN;
- WRITELN(' NOTE: ANSWER "ADD" FOR THE FILENAME IF YOU WANT TO CREAT A NEW');
- WRITELN(' FILE OF SPELLING WORDS');
- WRITELN;
- WRITE('File name (Ex B:WORDS1): ');
- READLN(FILENAME);
- IF FIX_NAME(FILENAME) = 'Add' THEN ADD_NEW_LIST ELSE GET_OLD_LIST(FILENAME);
- CLRSCR;
- GOTOXY(14,12);
- REPEAT
- WRITE(NAME,', are you ready to begin the first round (Y/N)?');
- READ(KBD,ANSWER);
- IF UPCASE(ANSWER) <> 'Y' THEN
- BEGIN
- CLRSCR;
- GOTOXY(22,12);
- WRITE(^G^G)
- END
- UNTIL UPCASE(ANSWER) = 'Y';
- GOTOXY(29,24);
- WRITE('Very good, here we go!');
- DELAY(DELAY_TIME - 1000);
- END; {PROCEDURE DISPLAY_OPTIONS}
-
- PROCEDURE SPELLING_TEST;
- VAR
- CORRECT_COUNT, { NUMBER OF CORRECT TRIES IN A ROW }
- AVERAGE_LENGTH, { AVERAGE LENGTH OF ALL WORDS IN THE LIST }
- WORD_LENGTH, { TOTAL LENGTH OF ALL WORDS }
- I,
- TRY: INTEGER; { TELLS WHICH TRY OR CYCLE THE STUDENT IS IN }
-
- BEGIN { PROCEDURE SPELLING_TEST }
- TRY := 1;
- WORD_LENGTH := 0;
- REPEAT { start spelling test }
- SCORE := 0;
- BOTTOM_LIST := TOTAL_IN_LIST;
- FOR I := 1 TO TOTAL_IN_LIST DO
- BEGIN { copy word list into a temporary list and count number of char }
- TEMP_LIST[I] := WORD_LIST[I];
- WORD_LENGTH := WORD_LENGTH + LENGTH(TEMP_LIST[I])
- END;
- IF TRY = 1 THEN
- BEGIN { compute initial display time based on word size and # of tries}
- AVERAGE_LENGTH := TRUNC(WORD_LENGTH/BOTTOM_LIST) + 1;
- DISPLAY_TIME := (AVERAGE_LENGTH * 500) - (500 * (3 - NUMBER_OF_TRIES))
- END;
- REPEAT {start going through the spelling list}
- DELAY(DELAY_TIME);
- CLRSCR;
- RANDOM_WORD := RANDOM(BOTTOM_LIST) + 1; { PICK A WORD FROM THE LIST}
- GOTOXY(37,12);
- WRITE(TEMP_LIST[RANDOM_WORD]); { DISPLAY ON SCREEN }
- DELAY(DISPLAY_TIME); { LEAVE ON SCREEN FOR DISPLAY_TIME}
- GOTOXY(37,12);
- CLREOL; { ERASE THE WORD }
- GOTOXY(28,24);
- WRITE('What was the word? '); { ASK STUDENT TO SPELL THE WORD }
- READ(SPELLING_WORD); { READ STUDENTS RESPONSE }
- SCORE := SCORE + 1; { INCREMENT THE NUMBER OF WORDS }
- GOTOXY(26,24);
- CLREOL;
- IF SPELLING_WORD = TEMP_LIST[RANDOM_WORD] { IS RESPONSE CORRECT ? }
- THEN { CORRECT ANSWER !! }
- BEGIN
- CORRECT_COUNT := CORRECT_COUNT + 1;{INCREASE CORRECT COUNT }
- IF CORRECT_COUNT > 5 THEN { IF 5 IN A ROW RESET COUNT AND }
- BEGIN { DECREASE DISPLAY TIME }
- CORRECT_COUNT := 0;
- DISPLAY_TIME := DISPLAY_TIME - 50;
- END;
- { DELETE CORRECT ANSWER FROM WORD LIST }
- TEMP_LIST[RANDOM_WORD] := TEMP_LIST[BOTTOM_LIST];
- BOTTOM_LIST := BOTTOM_LIST - 1;
- { PRINT A REWARD MESSAGE }
- I := RANDOM(5) + 1;
- CASE I OF
- 1: WRITE(' Very good!');
- 2: WRITE(' Keep it up, ',NAME);
- 3: WRITE(' That''s correct!');
- 4: WRITE(' Easy isn''t it?');
- 5: WRITE('Another correct answer, ',NAME);
- END;
- END
- ELSE { ANSWER WAS NOT CORRECT LEAVE IN LIST FOR ANOTHER CHANCE }
- BEGIN { TELL STUDENT IT WAS WRONG }
- I := RANDOM(5) + 1;
- GOTOXY(23,22);
- CLREOL;
- CASE I OF
- 1: WRITE(' WRONG!!');
- 2: WRITE(' PAY ATTENTION, ',NAME);
- 3: WRITE(' NO THAT''S NOT CORRECT!!');
- 4: WRITE(' HAVING A HARD TIME?');
- 5: WRITE('THAT IS NOT THE CORRECT WORD, ',NAME);
- END;
- GOTOXY(24,24);
- WRITE('WE WILL TRY THAT ONE AGAIN LATER!');
- CORRECT_COUNT := 0; { RESET CORRECT COUNT FLAG, INCREASE DISPLAY TIME}
- DISPLAY_TIME := DISPLAY_TIME + 30;
- END;
- UNTIL BOTTOM_LIST = 0;
- CLRSCR;
- GOTOXY(14,8);
- WRITE('You are finished with round ',TRY:1,'. It took you ',SCORE:2,' tries');
- GOTOXY(14,10);
- WRITE('to spell the ',TOTAL_IN_LIST:2,' words in your spelling list.');
- GOTOXY(18,12);
- DISPLAY_TIME := (DISPLAY_TIME - 500) + 1;
- TRY := TRY + 1;
- IF TRY <= NUMBER_OF_TRIES THEN
- BEGIN
- REPEAT
- WRITE(NAME,', are you ready to begin round ',TRY:1,' (Y/N)?');
- READ(KBD,ANSWER);
- IF UPCASE(ANSWER) <> 'Y' THEN
- BEGIN
- CLRSCR;
- GOTOXY(22,12);
- WRITE(^G^G)
- END
- UNTIL UPCASE(ANSWER) = 'Y';
- GOTOXY(29,24);
- WRITE('Very good, here we go!');
- DELAY(DELAY_TIME - 1000)
- END
- ELSE
- BEGIN
- GOTOXY(1,24);
- WRITE('It was nice helping you with your spelling, ',NAME,', get an "A" on your test!');
- DELAY(DELAY_TIME + 2000)
- END {IF}
- UNTIL TRY > NUMBER_OF_TRIES;
- END; {PROCEDURE SPELLING_TEST}
-
- BEGIN (* MAIN PROGRAM *)
- RANDOMIZE;
- DISPLAY_OPTIONS;
- SPELLING_TEST;
- END. (* MAIN PROGRAM *)