IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V < 1 2 3 >  
Closed Topic Открыть новую тему 
> помогите с конструктором тестов, нужна помощь
Артемий
сообщение 17.02.2007 14:54
Сообщение #21


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Руки мне надо поотбивать.... wacko.gif Очень сорри, больше так не буду... smile.gif give_rose.gif
Глебик, вот пахалка:
Первая:
type
Test = record
Vopros: String[50];
Typ: Integer;
Kolotv: byte;
KolotvCor: byte;
Variants: array [1..100] of string[40];
Kolonky1: array [1..100] of string[40];
Kolonky2: array [1..100] of string[40];
Otvety: array [1..100] of string[40];
Prav: array [1..100] of string[40];
end;
label 10;
var
count,i,i1,i2,countall,i3,i4,i5,i6,i7,i8: Integer;
pravil,koll,variantsByte: byte;
s: string[40];
T: Test;
F: file of Test;
begin
i4:=0;
Assign(F,'ban.dat');
Rewrite(F);
writeln('Vvedite dannue: ');
writeln('Skoko voprosov budet?');
readln(countall);
for i3:=1 to countall do begin
writeln('Vopros: ',i3);
readln(T.Vopros);
writeln('Typ:');
writeln('1 - Neposredstvenny,2 - OneInMany,3 - ManyInMany,4 - Conformable,5 - Sortirovka');
readln(T.Typ);
if T.Typ = 5 then goto 10;
if T.Typ = 4 then goto 10;
writeln('Kolychestvo otvetov:');
readln(T.Kolotv);
for i1:= 1 to T.Kolotv do
begin
writeln('Otvet nomer ',i1);
readln(T.Otvety[i1]);
end;
10: case T.Typ of
1: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
2: begin writeln('Prav otvet: '); readln(T.Prav[1]); end;
3: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
4: begin writeln('Skoko kolonok?'); readln(koll); for i5:=1 to koll do begin writeln('Kolonka 1 variant ',i5);
readln(T.kolonky1[i5]); end; for i6:=1 to koll do begin writeln('Kolonka 2 variant ',i6);
readln(T.kolonky2[i6]); end; for i7:=1 to koll do begin writeln('Prav otvet ',i7,'?'); readln(T.Prav[i7]); end; end;
5: begin writeln('Skoko variantov?'); readln(variantsByte); for i8:=1 to variantsByte do begin writeln('Variant ¹',i8);
readln(T.Variants[i8]); end; writeln('Prav otvet?'); readln(T.prav[1]); end;
end;
i4:=i4+1;
Write(F,T);
end;

Вторая:
type
Test = record
Vopros: String[50];
Typ: Integer;
Kolotv: byte;
KolotvCor: byte;
Variants: array [1..100] of string[40];
Kolonky1: array [1..100] of string[40];
Kolonky2: array [1..100] of string[40];
Otvety: array [1..100] of string[40];
Prav: array [1..100] of string[40];
end;
var
i,i2,i3,i4,i5,int,int2: integer;
labell: byte;
s,s2,s3,otvet: string;
ArrStrPrav: array [1..100] of string;
F: file of Test;
T: Test;
begin
i:=0;
i3:=0;
i4:=0;
i5:=0;
writeln('Reading...');
assign(F,'ban.dat');
Reset(F);
while not Eof(F) do begin
i:=i+1;
Read(F,T);
end;
Close(F);
assign(F,'ban.dat');
Reset(F);
for i2:=1 to i do begin
Read(F,T);
writeln('Vopros ',i2);
writeln(T.Vopros);
case T.Typ of
1: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s='';
readln(otvet);
for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin
writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end;
if labell=10*(i3-1) then writeln('Otvet neveren!!'); end;
2: begin readln(otvet); if otvet=T.Prav[1] then writeln('Otvet veren!') else
writeln('Otvet neveren!'); end;
3: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s='';
readln(otvet);
for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin
writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end;
if labell=10*(i3-1) then writeln('Otvet neveren!!'); end;
4: begin writeln; writeln('Kolonka 1'); repeat i3:=i3+1; s:=T.kolonky1[i3]; writeln(s);
until s=''; writeln('Kolonka 2'); repeat i4:=i4+1; s2:=T.kolonky2[i4]; writeln(s2);
until s2=''; repeat i5:=i5+1; readln(otvet); ArrStrPrav[i5]:=otvet; s3:=T.Prav[i5];
until s3=''; for int2:=1 to i5-1 do begin if ArrStrPrav[int2]=T.Prav[int2] then begin
labell:=0; end else labell:=10; if labell=0 then begin writeln('Verno!!!');break; end
else writeln('Neverno!'); break; end; end;
5: begin repeat i3:=i3+1; s:=T.Variants[i3]; writeln(s); until s=''; readln(otvet);
if otvet=T.Prav[1] then writeln('Pravilno!') else writeln('Nepravilno!'); end;
end;
end;
readln


P.S. Label 10 - это метка для оператора безусловного перехода goto.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.02.2007 15:39
Сообщение #22


Гость






glebik, если тебе все-таки интересна реализация моего метода - см. у меня на сайте:
Здесь
 К началу страницы 
+ Ответить 
glebik
сообщение 17.02.2007 23:07
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Нет слов просто СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
lol.gif good.gif give_rose.gif smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
glebik
сообщение 20.02.2007 19:13
Сообщение #24


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Volvo в 4-м типе вопросов есть проблема, я не понял структуру его ввода.
Например, при вводе теста я выбрал 4-й тип и 4 варианта ответов, мне казалось что
комп должен спросить 2 пары соответствий(первый - второй), но он запрашивает 4 пары, почему?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.02.2007 21:12
Сообщение #25


Гость






Ну, если у тебя 4 варианта ответов, КАЖДЫЙ из которых состоит из одной опции, а не из ПАРЫ "первый столбец - второй столбец" (как у меня сделано, более логично, не так ли? Если есть 4 варианта - это значит, 4 пары соответствий, или я должен догадаться, что если я ввел 3 варианта решений, то введу полтора соответствия?), тогда да - надо вводить n / 2 пар...

Это уже додумывай сам, я привел ПРИМЕР решения программы, а не программу "под ключ".
 К началу страницы 
+ Ответить 
glebik
сообщение 18.03.2007 12:14
Сообщение #26


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Привет no1.gif , это снова я появилась новая проблема с конструктором тестов. Программа Volvo отличная, но проблема в том что мне необходимо чтоб 2-я часть программы перемешивала ответы. А в программе ответы в файл записываются числами , как их перемешать чтоб всё работало я не знаю. Помогите! blink.gif

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Volvo-
сообщение 18.03.2007 12:20
Сообщение #27


Гость






Перемешивала ответы - это что значит? Может, перемешивала вопросы? То есть, тебе нужно чтобы случайно выбирался один вопрос из всех ранее введенных?
 К началу страницы 
+ Ответить 
glebik
сообщение 18.03.2007 22:35
Сообщение #28


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Вопросы тоже надо перемешать(но это второстепенно).
Важнее перемешать варианты. Напишу на примере.
Пусть тип вопроса 1 правильный из многих вариантов.
Я ввожу вопрос: кто написал война и мир?( в голову нового ничо не полезло поэтому написал старый пример).
Пусть вариантов ответов 4.
1 glebik
2 лермонтов
3 толстой
4 Volvo
правильный ответ:3. если я правильно понял в файл записывается 3 ,а не толстой.
А теперь надо чтобы варианты при выводе вопроса на экран перемешались.
Это должно выглядеть так, я запускаю сам тест и на экране появ-ся:
кто написал война и мир?
1 лермонтов
2 glebik
3 Volvo
4 толстой (варианты перемешались)
Но в файле записана 3 и если я введу 4 то ответ правильным уже не будет(в этом сложность).

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алена
сообщение 18.03.2007 23:04
Сообщение #29


Гость






Смотри, что надо сделать: в функции get_answer есть вложенная процедура print_options, которая отвечает за вывод вариантов ответа... Так вот. Эту процедуру немного переделываем:
  procedure print_options(b: boolean; var new_ans: integer);
var
i, k, X: integer;
values: set of 1 .. max_answers;
shuffle: array[1 .. max_answers] of integer;
begin
// Добавляем перемешивание - shuffling
if b then begin
values := [];
for i := 1 to max_answers do begin
repeat
X := random(max_answers) + 1;
until not (X in values);
Include(values, X);
shuffle[i] := X;
end;

// и возвращаем новый правильный ответ
new_ans := shuffle[R.good_ans2];
end;

// ну, а здесь - распечатываем варианты ответа (в зависимости от B,
// или перемешанные, или нет)
for i := 1 to R.ans_count do begin
if b then k := shuffle[i] else k := i;
write(i:2, ') ', R.answers[k] + ' ');
end;
end;

Но этого недостаточно. Теперь надо еще переделать все вызовы print_options на вот такие:

во всех местах Case, кроме ans_2 перемешивать варианты не надо, поэтому вызываешь так:
print_options(false, new_ans);

а в случае ans_2, там где перемешать-таки надо, делаешь:

ans2:
begin
print_options(true, new_ans);
writeln;
write('your choice: '); readln(choice);

// вот тут теперь сравнивается не с R.good_ans2, а с new_ans
get_answer := (choice = new_ans);
end;

(new_ans - новая переменная, типа Integer)
 К началу страницы 
+ Ответить 
glebik
сообщение 21.03.2007 11:03
Сообщение #30


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Спасибо за помощь give_rose.gif , но я не понял при помощи этих изменений я могу перемешивать варианты любого типа вопросов(1 не надо), а то 2-й тип я только для примера указал? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алена
сообщение 21.03.2007 11:22
Сообщение #31


Гость






Если бы ты говорил сразу, что ты хочешь получить, а не так как ты делаешь - в час по чайной ложке, то все было бы намного проще... Да, с помощью подобных изменений можно добиться того, что тебе надо, но делать этого я не буду... Потому, что потом опять выяснится, что надо добавить еще немного, потом - еще, и в итоге программа превратится в совершенно непонятную вещь, состоящую целиком из костылей, только для того, чтобы она отработала тестовый пример, сдать ее и забыть.

Я программы для "сдать и забыть" не пишу. Нужна помощь - говори СРАЗУ и ПОЛНОСТЬЮ, какие изменения тебе нужно внести в программу.

Сообщение отредактировано: Алена - 21.03.2007 11:23
 К началу страницы 
+ Ответить 
glebik
сообщение 21.03.2007 14:35
Сообщение #32


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Прошу прощения за безграмотную постановку вопроса wacko.gif . Вообще мне нужно чтобы варианты перемешивались при выводе( в типах с 2-5) и всё вообщем-то никаких добавок и не надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
glebik
сообщение 22.03.2007 18:26
Сообщение #33


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +



Сроки поджимают. Помогите кто нибудь!!!!!!!!!!!!!!!!!!!!!! mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 22.03.2007 18:41
Сообщение #34


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


ну так что сложного посчитать сколько там в файле этих вариантов и сгенерировать вывод случайных чисел, а по числу уже смотреть, какой вопрос под этим номером выводить..


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
glebik
сообщение 24.03.2007 8:05
Сообщение #35


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Если бы я мог это сделать я бы и просить не стал. Я в Паскале полный ноль. Ну если это так легко и просто то помогите если не трудно. blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 24.03.2007 8:58
Сообщение #36


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Тогда приведи полный код того,что ты используешь..


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
glebik
сообщение 24.03.2007 11:37
Сообщение #37


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


blink.gif Всё что у меня есть это программа Volvo, ссылка как ты знаешь есть в этой теме.
У него в программе правильные ответы записываются числами. Мне нужно просто чтоб при выводе вариантов ответов они перемешивались случайным образом (2-5 типы). И всё вообщем-то. unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
glebik
сообщение 27.03.2007 15:55
Сообщение #38


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


blink.gif Неужели никто не поможет... Помогите, работу послезавтра показывать надо! unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.03.2007 16:19
Сообщение #39


Гость






Вечером (после 20-00 по GMT +2)... Раньше не вернусь...
 К началу страницы 
+ Ответить 
volvo
сообщение 27.03.2007 21:47
Сообщение #40


Гость






Как и обещал - вот решение:

Прикрепленный файл  quest.pas ( 7.33 килобайт ) Кол-во скачиваний: 354


Оно работает (тестировал) со всеми вариантами вопросов, единственное, что не стал делать - это переводить это опять на русский, смотри, где есть изменения (я подскажу, изменения - в добавлении в самом начале типа TArrType, добавлена функция find_shuffle, изменена функция print_options, ну, и естественно во всех трех случаях - вопросы №2, №3, №5 /в четвертом порядок не важен/ изменилась обработка полученного от пользователя ответа...)

Можно было еще немного пошаманить и убрать совсем первый параметр в print_options, но это уже сам, если хочешь...
 К началу страницы 
+ Ответить 

3 страниц V < 1 2 3 >
Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 9:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"