Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {MegaTest by Shikari 25.11.2011}
- uses crt, dos, strings;
- const kolvo_symb_max=15000;{32767;}
- kolvo_vopr_max_const=25;
- kolvo_otv_max=6;
- var
- kolvo_oshibok,
- kolvo_verno,
- kolvo_vopr,
- kolvo_vopr_max:integer;
- kolvo_vopr_max_str:string;
- f:text;
- n_symb,
- i,j,k:integer;
- num_prav_otv,
- numtemp_prav_otv:integer;{номер правильного ответа из базы}
- num_otv:integer;{номер ответа введенный с клавиатуры}
- s_ch: Array [0..kolvo_symb_max] Of Char;
- a,b,
- massiv_nomerov_zadannih_voprosov:array [1..kolvo_vopr_max_const] of integer;
- massiv_oshibok:array [1..kolvo_vopr_max_const] of boolean;
- n_numv_str: array [1..kolvo_vopr_max_const] of string;
- n_symb_begin: array [1..kolvo_vopr_max_const] of integer;
- n_textv_str,
- s_str:string;
- n_texto_str,
- nold_texto_str,
- ntemp_texto_str:array[0..kolvo_otv_max] of string;{текст вариантов ответов}
- temp:integer;
- function istr(i:longint):String;{перевод числа в строку}
- var
- s1:string[12];
- begin
- str(i,s1);
- istr:=s1;
- end;
- function stri(s1:string):longint;{перевод строки в число}
- var
- i,code:integer;
- begin
- val(s1,i,code);
- stri:=i;
- end;
- procedure statistics;
- begin
- clrscr;
- TextColor(11);
- TextBackground(1);
- write('================================================================================');
- TextColor(12);
- writeln('Вопросов задано - '+istr(kolvo_vopr)+' из '+istr(kolvo_vopr_max)+
- ', сделано ошибок - '+istr(kolvo_oshibok)+
- ', правильных ответов - '+istr(kolvo_verno)+'.');
- TextColor(11);
- write('================================================================================');
- TextColor(7);
- TextBackground(0);
- end;
- begin
- TextColor(7);
- TextBackground(0);
- clrscr;
- randomize;
- Assign(f, 'VOPR.TXT');
- Reset(f);
- {Read(f, s_ch);}
- {max:=StrLen();}
- {Разбиваем текст}
- for i:= 0 to kolvo_symb_max do
- begin
- read(f,s_ch[i]);
- s_str:=s_str+s_ch[i];
- end;
- for i:= n_symb to kolvo_symb_max do {символы}
- begin
- if (s_ch[i]='$') then {ищем ключ номера вопроса по ключу открытия [}
- begin
- for j:=i+1 to kolvo_symb_max do {вытаскиваем номер вопроса по ключу закрытия ]}
- begin
- if (s_ch[j]='$') then
- begin
- n_symb:=j;{текущее положение считывающего курсора}
- n_symb_begin[k]:=j;
- {!!!+massiv nachalo voprosa i konec voprosa v simvolah}
- break; {пока не закроем номер}
- end;
- kolvo_vopr_max_str:=kolvo_vopr_max_str+s_ch[j];
- end;
- break;
- end;
- end; {konec i}
- kolvo_vopr_max:=stri(kolvo_vopr_max_str);{максимальное количество берем из файла}
- { writeln(kolvo_vopr_max);
- kolvo_vopr_max:=kolvo_vopr_max_const;
- writeln(kolvo_vopr_max);}
- {Обрабатываем текст - номер вопроса имеет вид [N]}
- k:=1; {количество вопросов}
- n_symb:=0;
- repeat
- if (n_numv_str[k]='') then
- begin
- for i:= n_symb to kolvo_symb_max do {символы}
- begin
- if (s_ch[i]='{') then {ищем ключ номера вопроса по ключу открытия [}
- begin
- for j:=i+1 to kolvo_symb_max do {вытаскиваем номер вопроса по ключу закрытия ]}
- begin
- if (s_ch[j]='}') then
- begin
- n_symb:=j;{текущее положение считывающего курсора}
- n_symb_begin[k]:=j;
- {!!!+massiv nachalo voprosa i konec voprosa v simvolah}
- break; {пока не закроем номер}
- end;
- n_numv_str[k]:=n_numv_str[k]+s_ch[j];
- end;
- k:=k+1;
- break;
- end;
- end; {konec i}
- end;
- until k>kolvo_vopr_max;
- {Задаем начальные значения счетчиков}
- kolvo_oshibok:=0;
- kolvo_verno:=0;
- kolvo_vopr:=0;
- {Заполняем последовательность номеров вопросов}
- for i:= 1 to kolvo_vopr_max do {вопросы}
- begin
- a[i]:=i;{массив номеров задаваемых вопросов}
- b[i]:=0;
- massiv_oshibok[i]:=true;{массив ошибок}
- massiv_nomerov_zadannih_voprosov[i]:=0;
- end;
- {Сортируем в случайном порядке вопросы из всего списка}
- i:=kolvo_vopr_max;{maximum otvetov}
- j:=1;
- repeat
- temp:=random(i)+1;
- b[j]:=a[temp];
- a[temp]:=a[i];
- i:=i-1;
- j:=j+1;
- until i=0;
- repeat {отсюда перебираем вопросы}
- {обнуление}
- for i:= 0 to kolvo_symb_max do
- begin
- ntemp_texto_str[i]:='';
- n_texto_str[i]:='';
- nold_texto_str[i]:='';
- end;
- (*k:=random(kolvo_vopr_max)+1;{zadaem sluchayniy vopros}*)
- {k opredelyaet s kakoy pozicii nachnetsa obrabotka voprosa}
- {Esli takoy vopros est, to}
- {if (n_numv_str[k]<>'') then writeln('!!!!'+istr(k));}
- kolvo_vopr:=kolvo_vopr+1;{счетсик заданных вопросов}
- k:=b[kolvo_vopr];{Текущий номер вопроса берем из последовательности}
- massiv_nomerov_zadannih_voprosov[kolvo_vopr]:=b[kolvo_vopr];
- {Обрабатываем текст - текст вопроса имеет вид [txt]}
- for i:= n_symb_begin[k] to kolvo_symb_max do
- begin
- if (s_ch[i]='[') then {ищем ключ текста вопроса по ключу открытия [}
- begin
- for j:=i+1 to kolvo_symb_max do {вытаскиваем номер вопроса по ключу закрытияr ]}
- begin
- if (s_ch[j]=']') then
- begin
- n_symb:=j;{текущее положение считывающего курсора}
- break; {пока номер не закрыт}
- end;
- n_textv_str:=n_textv_str+s_ch[j];
- end;
- break;
- end;
- end;
- {Обрабатывае текст - тект ответов имеет вид [txt]}
- for k:= 1 to kolvo_otv_max do {номер ответа}
- for i:= n_symb to kolvo_symb_max do
- begin
- {Неправильные ответы}
- if (s_ch[i]='[') then {ishem klu4 texta voprosa po kluchu otkritiya [}
- begin
- for j:=i+1 to kolvo_symb_max do {vitaskivaem nomer voprosa u kluchu zakritiya ]}
- begin
- if (s_ch[j]=']') then
- begin
- n_symb:=j;{tekushee poloshenie kursora}
- break; {poka nezakroem nomer}
- end;
- n_texto_str[k]:=n_texto_str[k]+s_ch[j];
- end;
- break;
- end;
- {Pravilniy otvet}
- if (s_ch[i]='<') then {ishem klu4 texta voprosa po kluchu otkritiya <}
- begin
- for j:=i+1 to kolvo_symb_max do {vitaskivaem nomer voprosa u kluchu zakritiya >}
- begin
- if (s_ch[j]='>') then
- begin
- n_symb:=j;{tekushee poloshenie kursora}
- num_prav_otv:=k;{vozvrashaem nomer pravilnogo otveta}
- break; {poka nezakroem nomer}
- end;
- n_texto_str[k]:=n_texto_str[k]+s_ch[j];
- end;
- break;
- end;
- end;{konec cikolv k i i}
- {Сохраняем старый массив ответов}
- for i:= 1 to kolvo_otv_max do
- begin
- nold_texto_str[i]:=n_texto_str[i];
- end;
- {Ответы сортируем в случайном порядку}
- i:=kolvo_otv_max;{максимум ответов}
- j:=1;
- repeat
- temp:=random(i)+1;
- ntemp_texto_str[j]:=n_texto_str[temp];
- n_texto_str[temp]:=n_texto_str[i];
- i:=i-1;
- j:=j+1;
- until i=0;
- {В соответствии с новым выбором вытаскиваем новый правильный ответ}
- for i:= 1 to kolvo_otv_max do
- begin
- {В соответствии с старым массивом}
- if (ntemp_texto_str[i]=nold_texto_str[num_prav_otv]) then
- begin
- numtemp_prav_otv:=i;
- break;
- end;
- end;
- {Уравниваем временные переменные с реальными}
- for i:= 0 to kolvo_otv_max do
- begin
- n_texto_str[i]:=ntemp_texto_str[i];
- end;
- num_prav_otv:=numtemp_prav_otv;
- statistics;
- {Выводим текст текущего вопроса}
- TextColor(15);
- TextBackground(0);
- writeln('Вопрос N'+istr(massiv_nomerov_zadannih_voprosov[kolvo_vopr])+'. '+
- n_textv_str);
- TextColor(11);
- TextBackground(0);
- writeln('');
- TextColor(14);
- writeln('Варианты ответов:');
- TextColor(7);
- {Выводим список ответов}
- TextColor(13); write('1. '); TextColor(7); writeln(n_texto_str[1]);
- TextColor(13); write('2. '); TextColor(7); writeln(n_texto_str[2]);
- TextColor(13); write('3. '); TextColor(7); writeln(n_texto_str[3]);
- TextColor(13); write('4. '); TextColor(7); writeln(n_texto_str[4]);
- TextColor(13); write('5. '); TextColor(7); writeln(n_texto_str[5]);
- TextColor(13); write('6. '); TextColor(7); writeln(n_texto_str[6]);
- writeln('');
- TextColor(15);
- write('Введите номер ответа (или 0 для выхода): ');
- readln(num_otv);
- if (num_otv=num_prav_otv) and (num_otv>0) then
- begin
- TextColor(11);
- TextBackground(1);
- writeln ('Правильно!');
- kolvo_verno:=kolvo_verno+1;
- massiv_oshibok[kolvo_vopr]:=false;
- TextColor(7);
- TextBackground(0);
- write('Для продолжения нажмите, что душе угодно...');
- repeat;
- until keypressed;
- end;
- if (num_otv<>num_prav_otv) and (num_otv>0) then
- begin
- TextColor(12);
- TextBackground(1);
- writeln ('Ошибка, правильный ответ N'+istr(num_prav_otv));
- kolvo_oshibok:=kolvo_oshibok+1;
- massiv_oshibok[kolvo_vopr]:=true;
- TextColor(7);
- TextBackground(0);
- write('Для продолжения нажмите, что душе угодно...');
- repeat;
- until keypressed;
- end;
- until (num_otv=0) or (kolvo_vopr=kolvo_vopr_max);
- statistics;
- {Вывод статистики по всем вопросам}
- TextColor(10);
- writeln('В итоге:');
- for i:= 1 to kolvo_vopr do {вопросы}
- begin
- TextColor(11);
- write(i);
- TextColor(4);
- write('('+istr(massiv_nomerov_zadannih_voprosov[i])+')');
- TextColor(4);
- write('=');
- if (massiv_oshibok[i]=false) then
- begin
- TextColor(14);
- write('V');
- end;
- if (massiv_oshibok[i]=true) then
- begin
- TextColor(12);
- write('X');
- end;
- write(' ');
- end;
- TextColor(7);
- TextBackground(0);
- writeln('');
- write('Нажмите ENTER для выхода ...');
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement