Uses CRT, Classes, SysUtils; Type TQuestion = Record Text : String; Answers: Array[0..3] of String; End; Const Questions: Array[0..12] of TQuestion = ( ( Text : 'Jak wyglada operator wyboru w C++?'; Answers: ('*a?b:c','a:b?c','a?:b:c','Nie ma czegos takiego') ), ( Text : 'Co znajduje sie w pamieci RAM po wlaczeniu komputera?'; Answers: ('Nic; jest czysta', '*Rozne ''smieci''', '', '') ), ( Text : 'Jak w skrocie mozna nazwac operator wyboru?'; Answers: ('*iif', 'iff', 'fii', 'fif') ), ( Text : 'Jak nazywa sie port do ktorego podlacza sie myszki?'; Answers: ('TCP/IP', 'FireWire', '*PS/2', '') ), ( Text : 'W ktorym roku zostala wydana pierwsza wersja jadra Linux?'; Answers: ('1990', '2000', '1998', '*1991') ), ( Text : 'Jakim typem jadra jest Linux?'; Answers: ('*monolityczne', 'mikrojadro', 'nanokernel', 'exokernel') ), ( Text : 'Jak inaczej nazywa sie architektura IA-32?'; Answers: ('x80-16', '*x86-32', 'x86-33', 'y86-32') ), ( Text : 'Do czego sluzy rejestr EAX (z zalozenia)?'; Answers: ('jako licznik w petli', '*operacje arytmetyczne i logiczne', 'jako bufor danych', 'nie jest on uzywany do niczego') ), ( Text : 'Jak nazywa sie bramka, ktora trzeba wlaczyc aby miec dostep do calej pamieci w komputerze?'; Answers: ('*A20', 'B20', 'C02', 'Nie ma czegos takiego') ), ( Text : 'Jak nazywa sie wskaznik stosu (assembler)?'; Answers: ('EBP', 'ESI', '*ESP', 'AL') ), ( Text : 'Aby uzyskac dostep do mlodszych bitow rejestru AX uzyjesz rejestru...?'; Answers: ('*AL', 'AH', 'EAX', 'RAX') ), ( Text : 'Jak taktowany byl procesor Intel i386DX?'; Answers: ('5 MHz', '1 GHz', '18 MHz', '*16 MHz') ), ( Text : 'Kiedy wymyslono dyskietke?'; Answers: ('1900', '*1950', '1090', '2010') ) (* ( Text : ''; Answers: ('', '', '', '') ) *) ); (* Format pytań: (Text: 'tekst pytania'; Answers: ('pytanie1', 'pytanie2', 'pytanie3', 'pytanie4'))
Poprawną odpowiedź oznacza się poprzez ustawienie '*' na poczatku danej odpowiedzi, np. (Text: 'tekst pytania'; Answers: ('pytanie1', '*pytanie2', 'pytanie3', 'pytanie4')) Poprawną odpowiedzią jest pytanie2
Może być tylko jedna poprawna odpowiedź! *)
Var Done: TStringList; //specialized TList<Integer>
Procedure Clear; Begin TextBackground(LightGray); TextColor(Black); ClrScr; End;
Function RandomQuestion: Integer; Begin Result := -1; Repeat Result := Random(high(Questions)+1); Until (Done.indexOf(IntToStr(Result)) = -1); End;
Procedure Center(Args: Array of Const); Var Str: String; I : Integer; Begin Str := ''; For I := low(Args) To high(Args) Do Case Args[I].vType Of vtInteger : Str := Str+IntToStr(Args[I].vInteger); (* vtExtended : Str := Str+FloatToStr(Args[I].vExtended^); *) vtAnsiString: Str := Str+AnsiString(Args[I].vAnsiString); End; GotoXY(40-Length(Str) div 2, WhereY); Writeln(Str); End;
Var Current, CurrentI, Points, Selected, iTmp: Integer; Key : Char; Str : String; Good, Max, HQ : Integer; Begin Clear; Randomize; Done := TStringList.Create; Points := 0; CurrentI := 1; Repeat Current := RandomQuestion; Selected := 0; Repeat ClrScr; TextColor(Black); Done.Add(IntToStr(Current)); Center(['Pytanie nr.',CurrentI]); Writeln; Writeln; Writeln; Writeln; Center([Questions[Current].Text]); Max := 3; Writeln; Writeln; For iTmp := low(Questions[Current].Answers) To high(Questions[Current].Answers) Do Begin TextColor(Black); Str := Questions[Current].Answers[iTmp];
if (Str = '') Then Begin Max := iTmp-1; Break; End;
if (Str[1] = '*') Then Begin Good := iTmp; Delete(Str, 1, 1); End;
if (Selected = iTmp) Then TextColor(Green);
Center([Str]); End;
Key := ReadKey; Case Key Of 'a': Dec(Selected); 'z': Inc(Selected); End; if (Selected < 0) Then Selected := Max; if (Selected > Max) Then Selected := 0; Until (Key = #13); if (Selected = Good) Then Inc(Points); Inc(CurrentI); Until (CurrentI-2 = high(Questions)); Clear; Writeln('== Wyniki =='); Writeln; Writeln; HQ := high(Questions)+1; Writeln('Ilosc pytan : ',HQ); Writeln('Ilosc dobrych odpowiedzi: ',Points,' (', round(Points/HQ*100), '%)'); Writeln('Ilosc zlych odpowiedzi : ',HQ-Points,' (', round(100-Points/HQ*100), '%)'); Writeln; Writeln; Writeln('// nacisnij dowolny klawisz aby wyjsc //'); ReadKey; Halt; End.
Link do kodu (tam jest poprawne formatowanie, etc.):
http://pastebin.com/S4pD3DhB
PS: zanim ktoś zgłosi, że jestem zły bo daję linka:
Link może być dopełnieniem do odpowiedzi.
W tym wypadku tak jest.
Jest wrzucony kod, a po nim jest wrzucony link do kodu, aby łatwiejsze było jego skopiowanie.
Kod:
Uses CRT, Classes, SysUtils;
Type TQuestion = Record
Text : String;
Answers: Array[0..3] of String;
End;
Const Questions: Array[0..12] of TQuestion =
(
(
Text : 'Jak wyglada operator wyboru w C++?';
Answers: ('*a?b:c','a:b?c','a?:b:c','Nie ma czegos takiego')
),
(
Text : 'Co znajduje sie w pamieci RAM po wlaczeniu komputera?';
Answers: ('Nic; jest czysta', '*Rozne ''smieci''', '', '')
),
(
Text : 'Jak w skrocie mozna nazwac operator wyboru?';
Answers: ('*iif', 'iff', 'fii', 'fif')
),
(
Text : 'Jak nazywa sie port do ktorego podlacza sie myszki?';
Answers: ('TCP/IP', 'FireWire', '*PS/2', '')
),
(
Text : 'W ktorym roku zostala wydana pierwsza wersja jadra Linux?';
Answers: ('1990', '2000', '1998', '*1991')
),
(
Text : 'Jakim typem jadra jest Linux?';
Answers: ('*monolityczne', 'mikrojadro', 'nanokernel', 'exokernel')
),
(
Text : 'Jak inaczej nazywa sie architektura IA-32?';
Answers: ('x80-16', '*x86-32', 'x86-33', 'y86-32')
),
(
Text : 'Do czego sluzy rejestr EAX (z zalozenia)?';
Answers: ('jako licznik w petli', '*operacje arytmetyczne i logiczne', 'jako bufor danych', 'nie jest on uzywany do niczego')
),
(
Text : 'Jak nazywa sie bramka, ktora trzeba wlaczyc aby miec dostep do calej pamieci w komputerze?';
Answers: ('*A20', 'B20', 'C02', 'Nie ma czegos takiego')
),
(
Text : 'Jak nazywa sie wskaznik stosu (assembler)?';
Answers: ('EBP', 'ESI', '*ESP', 'AL')
),
(
Text : 'Aby uzyskac dostep do mlodszych bitow rejestru AX uzyjesz rejestru...?';
Answers: ('*AL', 'AH', 'EAX', 'RAX')
),
(
Text : 'Jak taktowany byl procesor Intel i386DX?';
Answers: ('5 MHz', '1 GHz', '18 MHz', '*16 MHz')
),
(
Text : 'Kiedy wymyslono dyskietke?';
Answers: ('1900', '*1950', '1090', '2010')
)
(*
(
Text : '';
Answers: ('', '', '', '')
)
*)
);
(*
Format pytań:
(Text: 'tekst pytania'; Answers: ('pytanie1', 'pytanie2', 'pytanie3', 'pytanie4'))
Poprawną odpowiedź oznacza się poprzez ustawienie '*' na poczatku danej odpowiedzi, np.
(Text: 'tekst pytania'; Answers: ('pytanie1', '*pytanie2', 'pytanie3', 'pytanie4'))
Poprawną odpowiedzią jest pytanie2
Może być tylko jedna poprawna odpowiedź!
*)
Var Done: TStringList; //specialized TList<Integer>
Procedure Clear;
Begin
TextBackground(LightGray);
TextColor(Black);
ClrScr;
End;
Function RandomQuestion: Integer;
Begin
Result := -1;
Repeat
Result := Random(high(Questions)+1);
Until (Done.indexOf(IntToStr(Result)) = -1);
End;
Procedure Center(Args: Array of Const);
Var Str: String;
I : Integer;
Begin
Str := '';
For I := low(Args) To high(Args) Do
Case Args[I].vType Of
vtInteger : Str := Str+IntToStr(Args[I].vInteger);
(* vtExtended : Str := Str+FloatToStr(Args[I].vExtended^); *)
vtAnsiString: Str := Str+AnsiString(Args[I].vAnsiString);
End;
GotoXY(40-Length(Str) div 2, WhereY);
Writeln(Str);
End;
Var Current, CurrentI, Points, Selected, iTmp: Integer;
Key : Char;
Str : String;
Good, Max, HQ : Integer;
Begin
Clear;
Randomize;
Done := TStringList.Create;
Points := 0;
CurrentI := 1;
Repeat
Current := RandomQuestion;
Selected := 0;
Repeat
ClrScr;
TextColor(Black);
Done.Add(IntToStr(Current));
Center(['Pytanie nr.',CurrentI]);
Writeln;
Writeln;
Writeln;
Writeln;
Center([Questions[Current].Text]);
Max := 3;
Writeln;
Writeln;
For iTmp := low(Questions[Current].Answers) To high(Questions[Current].Answers) Do
Begin
TextColor(Black);
Str := Questions[Current].Answers[iTmp];
if (Str = '') Then
Begin
Max := iTmp-1;
Break;
End;
if (Str[1] = '*') Then
Begin
Good := iTmp;
Delete(Str, 1, 1);
End;
if (Selected = iTmp) Then
TextColor(Green);
Center([Str]);
End;
Key := ReadKey;
Case Key Of
'a': Dec(Selected);
'z': Inc(Selected);
End;
if (Selected < 0) Then
Selected := Max;
if (Selected > Max) Then
Selected := 0;
Until (Key = #13);
if (Selected = Good) Then
Inc(Points);
Inc(CurrentI);
Until (CurrentI-2 = high(Questions));
Clear;
Writeln('== Wyniki ==');
Writeln;
Writeln;
HQ := high(Questions)+1;
Writeln('Ilosc pytan : ',HQ);
Writeln('Ilosc dobrych odpowiedzi: ',Points,' (', round(Points/HQ*100), '%)');
Writeln('Ilosc zlych odpowiedzi : ',HQ-Points,' (', round(100-Points/HQ*100), '%)');
Writeln;
Writeln;
Writeln('// nacisnij dowolny klawisz aby wyjsc //');
ReadKey;
Halt;
End.
Link do kodu (tam jest poprawne formatowanie, etc.):
http://pastebin.com/S4pD3DhB
PS: zanim ktoś zgłosi, że jestem zły bo daję linka:
Link może być dopełnieniem do odpowiedzi.
W tym wypadku tak jest.
Jest wrzucony kod, a po nim jest wrzucony link do kodu, aby łatwiejsze było jego skopiowanie.