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

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

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

> помогите с конструктором тестов, нужна помощь
glebik
сообщение 11.02.2007 12:29
Сообщение #1


Новичок
*

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

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


нужна прога - конструктор тестов на pascal
в ней используются разные типы вопросов,программа создаёт и проводит тест cool.gif . помогите пожалуйста ,если есть готовая прога или наработки. smile.gif

Сообщение отредактировано: glebik - 11.02.2007 14:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
volvo
сообщение 14.02.2007 20:22
Сообщение #2


Гость






Я бы делал так (если тебя заинтересует ТАКОЙ вариант - пиши, будем развивать дальше, это не так сложно, как кажется на первый взгляд, если сделать парочку маленьких дополнительных процедур, объем приведенного фрагмента сократится вдвое):


{ максимально возможное количество ответов на вопрос ... }
const
max_answers = 10;
type
{ здесь описываем 5 типов ответов, каждый из них будет обраратываться по-своему }
QuestType = (ans1, ans2, ans3, ans4, ans5);
{ промежуточная структура, для хранения соответствий между двумя вариантами - для 4-го типа }
TS = record
first, second: integer;
end;

{ это - запись с вариантами... то, о чем я говорил выше }
TTest = record
quest: string[50];
ans_count: 1 .. max_answers;
answers: array[1 .. max_answers] of string[50];

case qType: QuestType of
ans1: (
good_ans1: string[50];
);
ans2: (
good_ans2: integer;
);
ans3: (
good_count3: 1 .. max_answers;
good_ans3: array[1 .. max_answers] of integer;
);
ans4: (
good_count4: 1 .. max_answers;
good_ans4: array[1 .. max_answers] of TS;
);
ans5: (
good_ans5: array[1 .. max_answers] of integer;
);
end;

{ заодно описываем и тип файла }
TestFile = file of TTest;

{ вот процедура ввода данных для каждого вопроса/ответа (результат вернется через R)}
procedure get_quest(var R: TTest);
var
i, X: integer;

begin
{ для начала - вводим сам вопрос }
write('Вопрос: '); readln(R.quest);

{ теперь - тип, к которому он относится (1 .. 5) ... }
write('type [1 .. 5]: ');
repeat
readln(X);
until (X >= 1) and (X <= 5);

{ ... и заносим этот тип сразу в структуру }
R.qType := QuestType(X - 1);

{
теперь в зависимости от типа, делаем соответствующие
запросы для ввода необходимых данных
}
case R.qType of
ans1:
begin { вопрос на непосредственный ввод ответа: }
R.ans_count := 0;
{ запросим только примерный ответ }
write('Ответ: '); readln(R.good_ans1);
end;
ans2 .. ans5:
begin
{ во всех остальных случаях надо знать количество вариантов ответов }
write('Сколько будет вариантов ответов [1 .. ', max_answers, '] ? :');
repeat
readln(X);
until (X >= 1) and (X <= max_answers);
R.ans_count := X; { заносим его в структуру }

{ и запрашиваем, собственно, сами варианты }
for i := 1 to R.ans_count do begin
write('Ответ №', i); readln(R.answers[i]);
end;
end;
end;

{ теперь переходим к заполнению всех необходимых полей }
writeln('good answers:');
case R.qType of
ans2: { Тип 2: вопрос с одним правильным ответом }
begin
write('Тип #2 - Введите номер правильного ответа:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans2 := X; { сохраняем в структуре }
end;
ans3: { Тип 3: несколько правильных ответов }
begin
i := 1; { здесь у нас будет цикл }
repeat

write('Тип #3 - Введите очередной номер правильного ответа (0 для выхода)');
repeat
readln(X);
until (X >= 0) and (X <= R.ans_count);
if X <> 0 then begin { что-то было введено, кроме 0 - дописать это в список ответов }
R.good_ans3[i] := X;
inc(i);
end;

until X = 0; { ввели 0 - надо выходить из цикла }
end;
ans4: { Тип 4 - соответствия }
begin
write('Тип #4 - введите пары (первый - второй)');
for i := 1 to R.ans_count do begin
write('первый:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans4[i].first := X;
write('второй:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans4[i].second := X;
end;
end;
ans5: { Тип 5 - сортировка }
begin
write('Тип #5 - введите правильно отсортированные номера ответов:');
for i := 1 to R.ans_count do begin
write('должен быть №', i);
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans5[i] := X;
end;
end;
end;

end;

var
Rec: TTest;
F: TestFile;

begin
get_quest(Rec);

{ собственно, здесь - запись структуры в файл, все это делать в цикле }
end.
Как видишь, никаких обработок ошибок (кроме контроля границ номеров) не производится, что дает мне, например, возможность, ввести все 3 одинаковых индекса для вопроса 5-го типа... Это все будет добавлено в дальнейшем, если ты вообще захочешь эту программу продолжить...

Цитата
По первому - надо все-таки вводить количество правильных ответов
Я бы не стал этого делать (и как видишь, не сделал)... Поступаем проще - часть программы, ПРИНИМАЮЩАЯ ответ тестируемого, проверяет, допустим, схожесть строк (например, по Левинштейну) и по проценту похожести делает вывод: принимать или не принимать ответ как правильный...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
glebik   помогите с конструктором тестов   11.02.2007 12:29
glebik   Напишу потробней. Эта прога предназначена:1)челове...   11.02.2007 21:39
glebik   Мне сказали как должна выглядеть процедура ввода. ...   14.02.2007 16:49
volvo   glebik, хотя бы по одному примеру вопросов каждого...   14.02.2007 17:28
Артемий2   Хотелось-бы узнать: 1. После заполнения данной зап...   14.02.2007 17:29
Гость   Ладно! 1)тип непосредственный ввод(Вопрос: кто...   14.02.2007 19:06
Артемий2   По первому - надо все-таки вводить количество прав...   14.02.2007 19:32
Артемий2   Вот,смотри я дам наброски, если что-то не так, то ...   14.02.2007 19:58
volvo   Я бы делал так (если тебя заинтересует ТАКОЙ вариа...   14.02.2007 20:22
Гость   Прежде всего спасибо за помощь! Посмотрел твой...   14.02.2007 20:33
Артемий2   Прости, вот поправка: Ban:=T; {И дальше по старому...   14.02.2007 20:40
Гость   Спасибо за прогу Volvo :good: , я посмотрел её, с...   15.02.2007 13:52
volvo   Я знал, что ты это спросишь... :) Смотри: описыв...   15.02.2007 14:10
Артемий2   Если никто не возражает, покажу свой способ.. (тут...   15.02.2007 19:15
glebik   Volvo и Артемий2 :good: , честно говоря просто не ...   15.02.2007 21:54
glebik   Начал писать прогу исрузу столкнулся с проблемами:...   16.02.2007 15:33
volvo   Нет, я уже посмотрел - это не совсем подойдет... Д...   16.02.2007 16:09
Артемий2   glebik, вот если надо, я набросал тестер, который ...   16.02.2007 19:19
glebik   Артемий2 :) в твоей 1-й проге , при запуске в стр...   17.02.2007 11:15
volvo   А дело все в том, что Артемий2 никак не хочет поня...   17.02.2007 12:30
Артемий2   Руки мне надо поотбивать.... :wacko: Очень сорри, ...   17.02.2007 14:54
volvo   glebik, если тебе все-таки интересна реализация мо...   17.02.2007 15:39
glebik   Нет слов просто СПАСИБО!!!!!...   17.02.2007 23:07
glebik   Volvo в 4-м типе вопросов есть проблема, я не поня...   20.02.2007 19:13
volvo   Ну, если у тебя 4 варианта ответов, КАЖДЫЙ из кото...   20.02.2007 21:12
glebik   Привет :no1: , это снова я появилась новая проблем...   18.03.2007 12:14
-Volvo-   Перемешивала ответы - это что значит? Может, перем...   18.03.2007 12:20
glebik   Вопросы тоже надо перемешать(но это второстепенно)...   18.03.2007 22:35
Алена   Смотри, что надо сделать: в функции get_answer ест...   18.03.2007 23:04
glebik   Спасибо за помощь :give_rose: , но я не понял при ...   21.03.2007 11:03
Алена   Если бы ты говорил сразу, что ты хочешь получить, ...   21.03.2007 11:22
glebik   Прошу прощения за безграмотную постановку вопроса ...   21.03.2007 14:35
glebik   Сроки поджимают. Помогите кто нибудь!!...   22.03.2007 18:26
Артемий2   ну так что сложного посчитать сколько там в файле ...   22.03.2007 18:41
glebik   Если бы я мог это сделать я бы и просить не стал. ...   24.03.2007 8:05
Артемий2   Тогда приведи полный код того,что ты используешь..   24.03.2007 8:58
glebik   :blink: Всё что у меня есть это программа Volvo, с...   24.03.2007 11:37
glebik   :blink: Неужели никто не поможет... Помогите, рабо...   27.03.2007 15:55
volvo   Вечером (после 20-00 по GMT +2)... Раньше не верну...   27.03.2007 16:19
volvo   Как и обещал - вот решение: Оно работает (тести...   27.03.2007 21:47
Ozzя   О терминологии: Этот вид тестового задания называ...   6.04.2007 7:13
glebik   Спасибо Volvo за помощь. Я написал модуль для твое...   12.04.2007 17:56
volvo   "Чо-то не работает" я не принимаю... гов...   12.04.2007 18:35
glebik   Прошу прощения что сразу не говорил о модуле. Мы т...   14.04.2007 10:13
glebik   Ну пожалуйста помогите! Если бы я знал про мод...   15.04.2007 17:59
Bikiev   Прога отличная! :good: мне именно она и нужна...   21.05.2007 19:47
Bikiev   ну неужели никто не поможет.... :unsure: :mega_ch...   28.05.2007 21:07
volvo   Эта программа больше не поддерживается... Она изна...   28.05.2007 21:15
мисс_граффити   Тема закрыта.   28.05.2007 21:16


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

 



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