home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1996 May
/
PCW596.iso
/
polskie
/
eduk
/
genfast
/
demo_07.pak
/
MULTITST.DA_
< prev
next >
Wrap
Text File
|
1996-02-08
|
17KB
|
876 lines
;==========================================================================
; TEST WIELOKROTNEGO WYBORU -- PLIK PRZYK£ADOWY
; (C) 1995 RangelSoft Robert Grzegorzewski
;==========================================================================
;**************************************************************************
; UWAGA! Aby zmodyfikowaì test na wÆasne potrzeby (tzn. zdefiniowaì
; innå liczbæ pytañ, losowañ, odpowiedzi itp.) naleºy zmieniì
; warto₧ci przypisywane odpowiednim zmiennym w róºnych miejscach
; tego pliku, a wyróºnione przy pomocy linii "gwiazdkowych", tak jak
; niniejszy tekst...
;**************************************************************************
; OPIS WYKORZYSTYWANEJ STRUKTURY DANYCH (TABLICY)
; W tablicy przechowywane så nastæpujåce informacje w komórkach:
; 1 - numer strony rozpoczynajåcej pytania z odpowiedziami
; 2 - numer strony koñczåcej pytania
; 3 - liczba pytañ do wylosowania - nie moºe byì wiæksza niº liczba pytañ !
; warto₧ì pomniejszana w miaræ losowania pytañ
;
; 4, 5 - informacje o numerach juº zadanych pytañ
; 6 - kopia informacji o liczbie pytañ do wylosowania - dla statystyki
; 7 - informacja o wÆa₧ciwej odpowiedzi numer 1
; 0 gdy wÆa₧ciwe jest NIE, 1 - gdy TAK
; 8 - jak wyºej dla odpowiedzi numer 2
; 9 - jak wyºej dla odpowiedzi numer 3
; 10 - liczba peÆnych odpowiedzi na pytania
; 11 - liczba waºona odpowiedzi czæ₧ciowych danych poprawnie
; 12 - liczba odpowiedzi czæ₧ciowych danych poprawnie
; 13 - caÆkowita liczba waºona odpowiedzi czæ₧ciowych
; 14 - caÆkowita liczba odpowiedzi czæ₧ciowych
; 20 do 29 - informacja o stanie przycisków odpowiedzi
; 100 do ... - numery stron zawierajåcych pytania
;
;
; Informacje o zawarto₧ci tej tablicy så wykorzystywane przez istniejåce
; juº procedury, dlatego teº nie trzeba ich we wÆasnym zakresie
; oprogramowywaì. Wszelkie zmiany wprowadzone w numeracji komórek i ich
; zawarto₧ci mogå powodowaì nieprawidÆowe dziaÆanie testu.
; inicjalizacja tablicy
[procedure InitArray]
@LoadCode('ARRAY.SYS');
@C := 3;
@ExecuteCode;
@Return;
; zainicjowanie ekranu
[procedure InitScreen]
@A := 1;
@DisableStatusBar;
@SetColors(2,2);
@Bar(0,0,639,479);
@SetColors(8,15);
@DrawButton(15,425,80,470,7,0,'KONIEC.RBM','Zakoñczenie testu');
@DrawButton(130,425,350,470,3,30,'ARR4SZT.RBM','Akceptacja odpowiedzi');
@UpArea(400,425,625,470,7);
@DownArea(405,430,620,465,7);
@DisableHypertext;
@Return;
[procedure ResetujPola]
@A := 20;
@B := 0;
@C := 1;
@Repeat:10;
@ExecuteCode;
@A := %A + 1;
@Next;
@Return;
[procedure Procenty]
@PushVariables;
@A:=6;
@C:=2;
@ExecuteCode;
@K:=%B;
@A:=3;
@ExecuteCode;
@L:=%K-%B;
@DownArea(405,430,620,465,7);
@SetColors(5,5);
@Bar(407,432,407+210*(%L/%K),463);
@SetColors(15,15);
@WriteString(400,425,625,470,'[%L*100/%K:0] %');
@PopVariables;
@Return;
; narysowanie ekranu z miejscem na 2 odpowiedzi
[procedure TwoAnswers]
@DownArea(15,195,625,267,7)
@UpArea(20,200,110,262,7);
@SetPosition(30,204);
@SetColors(0,15);
@Picture('TAK_NIE.CGV');
@DownArea(84,205,100,225,3);
@DownArea(84,237,100,257,3);
@UpArea(120,200,620,262,7);
@SetInvisibleButton(84,205,100,225,20);
@SetInvisibleButton(84,237,100,257,21);
@DownArea(15,312,625,384,7);
@UpArea(20,317,110,379,7);
@SetPosition(30,321);
@Picture('TAK_NIE.CGV');
@DownArea(84,322,100,342,3);
@DownArea(84,354,100,374,3);
@UpArea(120,317,620,379,7);
@SetInvisibleButton(84,322,100,342,22);
@SetInvisibleButton(84,354,100,374,23);
@Return;
; to samo tylko dla 3 odpowiedzi
[procedure ThreeAnswers]
@DownArea(15,166,625,238,7);
@UpArea(20,171,110,233,7);
@SetPosition(30,175);
@SetColors(0,15);
@Picture('TAK_NIE.CGV');
@DownArea(84,176,100,196,3);
@DownArea(84,208,100,228,3);
@UpArea(120,171,620,233,7);
@SetInvisibleButton(84,176,100,196,24);
@SetInvisibleButton(84,208,100,228,25);
@DownArea(15,254,625,326,7);
@UpArea(20,259,110,321,7);
@SetPosition(30,263);
@Picture('TAK_NIE.CGV');
@DownArea(84,264,100,284,3);
@DownArea(84,296,100,316,3);
@UpArea(120,259,620,321,7);
@SetInvisibleButton(84,264,100,284,26);
@SetInvisibleButton(84,296,100,316,27);
@DownArea(15,342,625,414,7);
@UpArea(20,347,110,409,7);
@SetPosition(30,351);
@Picture('TAK_NIE.CGV');
@DownArea(84,352,100,372,3);
@DownArea(84,384,100,404,3);
@UpArea(120,347,620,409,7);
@SetInvisibleButton(84,352,100,372,28);
@SetInvisibleButton(84,384,100,404,29);
@Return;
; wy₧wietlenie duºego znaku zapytania
[procedure Question]
@SetColors(2,2);
@Bar(0,0,639,424);
@If (%J = 2) Then Call:TwoAnswers;
@If (%J = 3) Then Call:ThreeAnswers;
@DownArea(15,15,625,140,7);
@LoadPart(35,25,'QUESTCHR.RES');
@SetColors(15,15);
@SetPosition(150,40);
@Return;
; zapisanie numerów stron pierwszej i ostatniej z pytaniami
[procedure SaveQuestionsPages]
@A := 1;
@B := %K;
@C := 1;
@ExecuteCode;
@A := 2;
@B := %L;
@ExecuteCode;
@Return;
; zapisanie liczby losowanych pytañ - nie moºe byì ona wiæksza
; od liczby zdefiniowanych pytañ
[procedure SaveQuestionsNumbers]
@A := 3;
@B := %K;
@C := 1;
@ExecuteCode;
@A := 6;
@ExecuteCode;
@Return;
; zapisanie informacji na potrzeby losowania pytañ
[procedure FirstAndLastQuestion]
@A := 4;
@B := %K;
@C := 1;
@ExecuteCode;
@A := 5;
@B := %L;
@C := 1;
@Execute Code;
@C := 1;
@D := %L - %K + 1;
@Repeat:%D;
@A := %K;
@B := %K;
@ExecuteCode;
@K := %K + 1;
@Next;
@Return;
; narysowanie we wskazanym miejscu znaku zakre₧lenia opcji
[procedure CrossOption]
@Line(%A+2,%B+10,%A+5,%B+13);
@Line(%A+6,%B+13,%A+13,%B+6);
@Line(%A+3,%B+10,%A+5,%B+12);
@Line(%A+6,%B+12,%A+12,%B+6);
@Return;
; wylosowanie numeru pytania
[procedure GetQuestion]
@A := 4;
@C := 2;
@ExecuteCode;
@K := %B;
@A := 5;
@ExecuteCode;
@L := %B;
@Random(%K,%L,%D);
@A := %D;
@C := 2;
@ExecuteCode;
@E := %B;
@A := %K;
@C := 2;
@ExecuteCode;
@F := %B;
@A := %D;
@C := 1;
@ExecuteCode;
@A := 4;
@B:=%K+1;
@C := 1;
@ExecuteCode;
@A := 3;
@C := 2;
@ExecuteCode;
@B := %B - 1;
@C := 1;
@ExecuteCode;
@Return;
; sprawdzenie ilo₧ci zadanych pytañ
[procedure CheckQuestions]
@A := 3;
@C := 2;
@ExecuteCode;
@Return;
; parametry odpowiedzi 1 - zapisanie informacji o prawidÆowej
; odpowiedzi (TAK lub NIE) przekazanej w zmiennej A (0 - NIE, 1 - TAK)
[procedure Answer1]
@If (%J = 2) Then Begin
@SetPosition(130,210);
@Else
@SetPosition(130,181);
@End;
@B := %A;
@A := 7;
@C := 1;
@ExecuteCode;
@SetColors(0,14);
@Return;
; analogicznie dla odpowiedzi 2
[procedure Answer2]
@If (%J = 2) Then Begin
@SetPosition(130,327);
@Else
@SetPosition(130,269);
@End;
@B := %A;
@A := 8;
@C := 1;
@ExecuteCode;
@SetColors(0,14);
@Return;
; analogicznie dla odpowiedzi 3
[procedure Answer3]
@B := %A;
@A := 9;
@C := 1;
@ExecuteCode;
@SetPosition(130,357);
@SetColors(0,14);
@Return;
[procedure SaveNewChoice]
@G := %C;
@H := %D;
@C := 1;
@ExecuteCode;
@A := %G;
@B := %H;
@ExecuteCode;
@Return;
; zapisanie poprawnej peÆnej odpowiedzi
[procedure SaveBigPoint]
@A := 10;
@C := 2;
@ExecuteCode;
@B := %B + 1;
@C := 1;
@ExecuteCode;
@Return;
; zapisanie odpowiedzi czæ₧ciowej
[procedure Save2SmallPoints]
@A := 11;
@C := 2;
@ExecuteCode;
@B := %B + (%F * 3);
@C := 1;
@ExecuteCode;
@A := 12;
@C := 2;
@ExecuteCode;
@B := %B + %F;
@C := 1;
@ExecuteCode;
@Return;
; zapisanie odpowiedzi czæ₧ciowej
[procedure Save2AllSmall]
@A := 13;
@C := 2;
@ExecuteCode;
@B := %B + 6;
@C := 1;
@ExecuteCode;
@A := 14;
@C := 2;
@ExecuteCode;
@B := %B + 2;
@C := 1;
@ExecuteCode;
@Return;
; sprawdzenie poprawno₧ci odpowiedzi
[procedure Save2Points]
@F := 0;
@If (%K = %G) Then Begin
@If (%K <> %H) Then Begin
@F := %F + 1;
@End;
@End;
@If (%L = %D) Then Begin
@If (%L <> %E) Then Begin
@F := %F + 1;
@End;
@End;
@If (%F = 2) Then Call:SaveBigPoint;
@Call:Save2SmallPoints;
@Call:Save2AllSmall;
@Return;
; zapisanie odpowiedzi czæ₧ciowej
[procedure Save3SmallPoints]
@A := 11;
@C := 2;
@ExecuteCode;
@B := %B + (%J * 2);
@C := 1;
@ExecuteCode;
@A := 12;
@C := 2;
@ExecuteCode;
@B := %B + %J;
@C := 1;
@ExecuteCode;
@Return;
; zapisanie odpowiedzi czæ₧ciowej
[procedure Save3AllSmall]
@A := 13;
@C := 2;
@ExecuteCode;
@B := %B + 6;
@C := 1;
@ExecuteCode;
@A := 14;
@C := 2;
@ExecuteCode;
@B := %B + 3;
@C := 1;
@ExecuteCode;
@Return;
; sprawdzenie poprawno₧ci odpowiedzi
[procedure Save3Points]
@A := 0;
@If (%J = %D) Then Begin
@If (%J <> %E) Then Begin
@A := 1;
@End;
@End;
@If (%K = %F) Then Begin
@If (%K <> %G) Then Begin
@A := %A + 1;
@End;
@End;
@If (%L = %H) Then Begin
@If (%L <> %I) Then Begin
@A := %A + 1;
@End;
@End;
@J := %A;
@If (%J = 3) Then Call:SaveBigPoint;
@Call:Save3SmallPoints;
@Call:Save3AllSmall;
@Return;
; wywoÆanie sprawdzania poprawno₧ci odpowiedzi
[procedure CheckAnswers]
@If (%J = 2) Then Begin
@A := 7;
@C := 2;
@ExecuteCode;
@K := %B;
@A := 8;
@ExecuteCode;
@L := %B;
@A := 20;
@ExecuteCode;
@G := %B;
@A := 21;
@ExecuteCode;
@H := %B;
@A := 22;
@ExecuteCode;
@D := %B;
@A := 23;
@ExecuteCode;
@E := %B;
@Call:Save2Points;
@Else
@A := 7;
@C := 2;
@ExecuteCode;
@J := %B;
@A := 8;
@ExecuteCode;
@K := %B;
@A := 9;
@ExecuteCode;
@L := %B;
@A := 24;
@ExecuteCode;
@D := %B;
@A := 25;
@ExecuteCode;
@E := %B;
@A := 26;
@ExecuteCode;
@F := %B;
@A := 27;
@ExecuteCode;
@G := %B;
@A := 28;
@ExecuteCode;
@H := %B;
@A := 29;
@ExecuteCode;
@I := %B;
@Call:Save3Points;
@End;
@Return;
; poczåtek wykonywania pliku testu
[1]
@Call:InitArray;
@Call:InitScreen;
@DefKeyboardHandler(80);
@ShowScreen;
;**************************************************************************
; Informacje o pierwszej (K) i ostatniej (L) stronie z pytaniami
@K := 100;
@L := 104;
;**************************************************************************
@Call:SaveQuestionsPages;
@Call:FirstAndLastQuestion;
;**************************************************************************
; Liczba pytañ do losowania
@K := 5;
;**************************************************************************
@Call:SaveQuestionsNumbers;
[10]
@Call:CheckQuestions;
@If (%B = 0) then GoTo:50;
@DisableUserButtons;
@Call:GetQuestion;
@GoSub:%E;
@SetColors(8,15);
@SetButton(15,425,80,470,7,0,'KONIEC.RBM','Zakoñczenie testu');
@SetButton(130,425,350,470,3,30,'ARR4SZT.RBM','Akceptacja odpowiedzi');
@Call:Procenty;
@SetColors(0,15);
[11]
@CheckEvents;
[procedure MouseUp]
[19]
@GetMousePosition;
@if (%Z <> 0) then goto:19;
@Return;
; strony od 20 do 29 - dziaÆania na polach do zakre₧lenia przy odpowiedziach
[20]
@A := 84;
@B := 205;
@Call:CrossOption;
@DownArea(84,237,100,257,3);
@SetColors(0,15);
@ReverseArea(30,205,80,225)
@SetColors(15,0);
@ReverseArea(30,237,80,257);
@SetColors(0,15);
@A := 20;
@B := 1;
@C := 21;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[21]
@A := 84;
@B := 237;
@Call:CrossOption;
@DownArea(84,205,100,225,3);
@SetColors(0,15);
@ReverseArea(30,237,80,257)
@SetColors(15,0);
@ReverseArea(30,205,80,225);
@SetColors(0,15);
@A := 21;
@B := 1;
@C := 20;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[22]
@A := 84;
@B := 322;
@Call:CrossOption;
@DownArea(84,354,100,374,3);
@SetColors(0,15);
@ReverseArea(30,322,80,342)
@SetColors(15,0);
@ReverseArea(30,354,80,374);
@SetColors(0,15);
@A := 22;
@B := 1;
@C := 23;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[23]
@A := 84;
@B := 354;
@Call:CrossOption;
@DownArea(84,322,100,342,3);
@SetColors(0,15);
@ReverseArea(30,354,80,374)
@SetColors(15,0);
@ReverseArea(30,322,80,342);
@SetColors(0,15);
@A := 23;
@B := 1;
@C := 22;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[24]
@A := 84;
@B := 176;
@Call:CrossOption;
@DownArea(84,208,100,228,3);
@SetColors(0,15);
@ReverseArea(30,176,80,196)
@SetColors(15,0);
@ReverseArea(30,208,80,228);
@SetColors(0,15);
@A := 24;
@B := 1;
@C := 25;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[25]
@A := 84;
@B := 208;
@Call:CrossOption;
@DownArea(84,176,100,196,3);
@SetColors(0,15);
@ReverseArea(30,208,80,228)
@SetColors(15,0);
@ReverseArea(30,176,80,196);
@SetColors(0,15);
@A := 25;
@B := 1;
@C := 24;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[26]
@A := 84;
@B := 264;
@Call:CrossOption;
@DownArea(84,296,100,316,3);
@SetColors(0,15);
@ReverseArea(30,264,80,284)
@SetColors(15,0);
@ReverseArea(30,296,80,316);
@SetColors(0,15);
@A := 26;
@B := 1;
@C := 27;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[27]
@A := 84;
@B := 296;
@Call:CrossOption;
@DownArea(84,264,100,284,3);
@SetColors(0,15);
@ReverseArea(30,296,80,316)
@SetColors(15,0);
@ReverseArea(30,264,80,284);
@SetColors(0,15);
@A := 27;
@B := 1;
@C := 26;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[28]
@A := 84;
@B := 352;
@Call:CrossOption;
@DownArea(84,384,100,404,3);
@SetColors(0,15);
@ReverseArea(30,352,80,372)
@SetColors(15,0);
@ReverseArea(30,384,80,404);
@SetColors(0,15);
@A := 28;
@B := 1;
@C := 29;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
[29]
@A := 84;
@B := 384;
@Call:CrossOption;
@DownArea(84,352,100,372,3);
@SetColors(0,15);
@ReverseArea(30,384,80,404)
@SetColors(15,0);
@ReverseArea(30,352,80,372);
@SetColors(0,15);
@A := 29;
@B := 1;
@C := 28;
@D := 0;
@Call:SaveNewChoice;
@Call:MouseUp;
@GoTo:11;
; sprawdzenie odpowiedzi po naci₧niæciu przycisku '>>>>'
; lub klawisza <ENTER> na klawiaturze
[30]
@Call:CheckAnswers;
; resetowanie komórek zawierajåcych stan pól aktywnych odpowiedzi
@Call:ResetujPola;
@GoTo:10;
; okienko statystyki testu (po jego zamkniæciu nastæpuje powrót do menu)
[50]
@DisableUserButtons;
@DefKeyboardHandler(81);
@DialogBox(150,150,490,300,7,'Statystyka testu');
@SetColors(0,15);
@SetPosition(170,191);
@FastWrite('Liczba peÆnych odpowiedzi : /');
@SetPosition(170,211);
@FastWrite('Liczba punktów czæ₧ciowych : /');
@SetPosition(170,231);
@FastWrite('Liczba punktów waºonych : /');
@DrawButton(270,260,370,280,9,0,'Akceptacja','Zakoñczenie')
@SetColors(15,15);
@A := 10;
@C := 2;
@ExecuteCode;
@WriteValue(396,190,428,198,0,0,%B);
@A := 6;
@ExecuteCode;
@WriteValue(438,190,480,198,0,0,%B);
@A := 12;
@ExecuteCode;
@WriteValue(396,210,428,218,0,0,%B);
@A := 14;
@ExecuteCode;
@WriteValue(438,210,480,218,0,0,%B);
@A := 11;
@ExecuteCode;
@WriteValue(396,230,428,238,0,0,%B);
@A := 13;
@ExecuteCode;
@WriteValue(438,230,480,238,0,0,%B);
@CheckEvents;
; obsÆuga zdarzeñ pochodzåcych z klawiatury
[80]
@if (%Z = $011B) then goto:0;
@if (%Z = $1C0D) then goto:30;
@CheckEvents;
[81]
@if (%Z = $011B) then goto:0;
@if (%Z = $1C0D) then goto:0;
@CheckEvents;
;**************************************************************************
;**************************************************************************
;**************************************************************************
; na stronach 100 - 104 (w tym przykÆadzie) definicja pytañ i odpowiedzi
; - kaºda strona musi posiadaì wszystkie wykazane na nich elementy
; i musi byì zakoñczona poleceniem RETURN
[100]
; okre₧lenie liczby odpowiedzi w zmiennej J (dopuszczalne warto₧ci to 2 lub 3)
@J := 3;
@Call:Question;
Pytanie numer 1
; w zmiennej A okre₧lenie poprawno₧ci odpowiedzi
; w tym przypadku odpowiedª TAK (A = 1)
@A := 1;
@Call:Answer1;
Odpowiedz numer jeden
Linia druga odpowiedzi
No i linia trzecia
; analogicznie dla odpowiedzi 2
@A := 1;
@Call:Answer2;
Odpowiedz numer dwa
Linia druga odpowiedzi
No i linia trzecia
; i trzeciej
@A := 1;
@Call:Answer3;
Odpowiedz numer trzy
Linia druga odpowiedzi
No i linia trzecia
; kaºda strona z pytaniem musi koñczyì siæ poleceniem RETURN
@Return;
[101]
@J := 2;
@Call:Question;
Pytanie numer 2
@A := 0;
@Call:Answer1;
Odpowiedz numer jeden
Linia druga odpowiedzi
No i linia trzecia
@A := 0;
@Call:Answer2;
Odpowiedz numer dwa
Linia druga odpowiedzi
No i linia trzecia
@Return;
[102]
@J := 3;
@Call:Question;
Pytanie numer 3
@A := 0;
@Call:Answer1;
Odpowiedz numer jeden
Linia druga odpowiedzi
No i linia trzecia
@A := 0;
@Call:Answer2;
Odpowiedz numer dwa
Linia druga odpowiedzi
No i linia trzecia
@A := 0;
@Call:Answer3;
Odpowiedz numer trzy
Linia druga odpowiedzi
No i linia trzecia
@Return;
[103]
@J := 2;
@Call:Question;
Pytanie numer 4
@A := 1;
@Call:Answer1;
Odpowiedz numer jeden
Linia druga odpowiedzi
No i linia trzecia
@A := 1;
@Call:Answer2;
Odpowiedz numer dwa
Linia druga odpowiedzi
No i linia trzecia
@Return;
[104]
@J := 3;
@Call:Question;
Pytanie numer 5
@A := 0;
@Call:Answer1;
Odpowiedz numer ~jeden~
Linia druga odpowiedzi
No i linia trzecia
@A := 0;
@Call:Answer2;
Odpowiedz numer dwa
Linia ~druga~ odpowiedzi
No i linia trzecia
@A := 0;
@Call:Answer3;
Odpowiedz numer trzy
Linia druga odpowiedzi
No i linia ~trzecia~
@Return