![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
glebik |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
нужна прога - конструктор тестов на pascal
в ней используются разные типы вопросов,программа создаёт и проводит тест ![]() ![]() Сообщение отредактировано: glebik - 11.02.2007 14:13 |
glebik |
![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Напишу потробней. Эта прога предназначена:1)человек может вводить в неё вопросы и варианты ответов причём вопросы могут быть
разными. с 1 прав. ответом, с несколькими. вопрос на сортировку.соответствие 2) а вторая часть проводит этот самый тест. вообще получается что программы будет две:одна для 1 части,другая для 2. ![]() |
glebik |
![]() ![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне сказали как должна выглядеть процедура ввода.
В проге используются типы вопросов: 1) непосредственный ввод(при этом вопрос может иметь нес колько правильных ответов-синоним,например Пушкин и А.С. Пушкин оба являются правильными и тд) 2) один правильный из нескольких(причём эти несколько не постоянное а вводится) 3) несколько правильных из нескольких(опять же эти несколько не постоянное а вводится) 4)на соответствие 5)на сортировку У меня есть описание записи которую необходимо использовать для реализации процедуры: type test=record vopros: string[50] (текст вопроса) typ: [1..5] (выбор типа вопроса) kolotv: byte(кол-во ответов, вводится) otvety: array [1..100] of string;(ответы) prav: array [1..100] of string;(правильные ответы) Необходимо чтобы эта процедура была универсальной для любого вопроса. Как это сделать? ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
glebik, хотя бы по одному примеру вопросов каждого типа (с ответами, разумеется) приведи...
Это первое. Второе: та структура, которую ты привел - это строго задано, и отступать от этого никак нельзя, или могут быть другие решения? (Я бы, например, предпочел сделать запись с вариантами, если у тебя есть несколько типов вопросов, а храниться они должны в одной структуре). |
Артемий |
![]()
Сообщение
#5
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Хотелось-бы узнать:
1. После заполнения данной записи, что с ней делается? Она записываетсяв файл, и потом прога номер 2 считывает из файла этот вопрос и варианты? Или как? 2. Пользователь может задавать несколько вопросов или только один? ![]() Добавлено через 0.00001 сек. Ой прости volvo, когда писал вопрос, твоего ответа еще не было... ![]() Сообщение отредактировано: Артемий2 - 14.02.2007 17:59 -------------------- Dum spiro spero!
|
Гость |
![]()
Сообщение
#6
|
Гость ![]() |
Ладно! 1)тип непосредственный ввод(Вопрос: кто написал "война и мир"? Ответ:Толстой. Л.Н Толстой . Толстой Л.Н - все 3 ответа верны
какой бы мы не ввели при решении) 2) один правильный из нескольких (Вопрос:кто написал "война и мир"? варианты ответов:1)Пушкин 2)Лермонтов 3)Толстой 4)Карамзин Прав.ответ: Толстой) 3) несколько правильных из нескольких (Вопрос:Столицей какой страны является Лондон? варианты ответов:1)Англия 2)Великобритания 3)Польша 4)Россия Прав.ответ:1 и 2 4)на соответствие(это помоему самый неприятный тип) Составить соответствие(страна-столица): 1)Англия 1)Москва 2)Украина 2)Киев 3)Россия 3) Лондон Прав.ответ:1-3,2-2,3-1 5)на сортировку Задание:Расположите события в хронологической последоват-ти(от самого раннего к более позднему): 1)Война с Наполеоном 2)Великая Отечественная Война 3)"Ледовое побоище" Прав.ответ:3.1.2 ----------------------------------------------------------------------------------- Что касается структуры процедуры. то это не обязательный вариант. можно и по другому. но только желательно чтобы вся вводимая информация хранилось в 1-м файле. Что касается кол-ва вопросов. то их кол-во задётся при создании теста.Прога номер 2 считывает из файла эти вопросы и варианты. P.S:Спасибо за интерес к моей проблеме! |
Артемий |
![]()
Сообщение
#7
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
По первому - надо все-таки вводить количество правильных ответов (допутим их 4 - Толстой. Л.Н Толстой . Толстой Л.Н,Карамзин) или скоко ответов просто, стоко ответов и правильных?(допутим их 3 - Толстой. Л.Н Толстой . Толстой Л.Н - все правильные, и получается скоко ответов просто - стоко и правильных)
-------------------- Dum spiro spero!
|
Артемий |
![]()
Сообщение
#8
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Вот,смотри я дам наброски, если что-то не так, то пиши! Данные записываются в ban.dat.
(тут только по первым трем вариантам) type -------------------- Dum spiro spero!
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Я бы делал так (если тебя заинтересует ТАКОЙ вариант - пиши, будем развивать дальше, это не так сложно, как кажется на первый взгляд, если сделать парочку маленьких дополнительных процедур, объем приведенного фрагмента сократится вдвое):
Как видишь, никаких обработок ошибок (кроме контроля границ номеров) не производится, что дает мне, например, возможность, ввести все 3 одинаковых индекса для вопроса 5-го типа... Это все будет добавлено в дальнейшем, если ты вообще захочешь эту программу продолжить... Цитата По первому - надо все-таки вводить количество правильных ответов Я бы не стал этого делать (и как видишь, не сделал)... Поступаем проще - часть программы, ПРИНИМАЮЩАЯ ответ тестируемого, проверяет, допустим, схожесть строк (например, по Левинштейну) и по проценту похожести делает вывод: принимать или не принимать ответ как правильный... |
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
Прежде всего спасибо за помощь!
Посмотрел твой набросок, очень даже неплохо, но у меня появились вопросы: 1)Что такое Ban: array [1..1] of Test и почему 1..1? 2)И в конце for i:= 1 to 1 do Write(F,Ban[i]); Непонятное для меня место. Ответь , если не сложно. ------------------------------------------------------------------------------- Volvo пока писал ответ Артемию2.появился твой. я обязательно проанализирую твою процедуру и напишу вопросы или своё мнение. Спасибо огромное! |
Артемий |
![]()
Сообщение
#11
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Прости, вот поправка:
Ban[1]:=T; {И дальше по старому...} Добавь это между end; и Assign(F,'ban.dat'); Добавлено через 4 мин. Цитата 1)Что такое Ban: array [1..1] of Test и почему 1..1? Массив с одной записью нашего Test=record. 1..1 потому что делаем в цикле, и я не вижу смысла делать несколько записей, хватит одной.. Цитата 2)И в конце for i:= 1 to 1 doWrite(F,Ban[i]);Непонятное для меня место. Сдесь мы записываем в ban.dat все наши данные, которые мы заполнили, то есть всю запись с введенными данными... ![]() Добавлено через 59 сек. Прости нет времени доделать пункт 4 и 5, но volvo дал хороший код, попробуй им.... Сообщение отредактировано: Артемий2 - 14.02.2007 20:40 -------------------- Dum spiro spero!
|
Гость |
![]() ![]()
Сообщение
#12
|
Гость ![]() |
Спасибо за прогу Volvo
![]() но внимательно посмотрев увидел, что она довольно понятная. Но каким образом её можно упростить? ![]() |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата каким образом её можно упростить? Я знал, что ты это спросишь... ![]()
![]() |
Артемий |
![]()
Сообщение
#14
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Если никто не возражает, покажу свой способ..
(тут как и раньше в dat файл, а из него потом можно считать данные...) type Сообщение отредактировано: Артемий2 - 15.02.2007 19:17 -------------------- Dum spiro spero!
|
glebik |
![]() ![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo и Артемий2
![]() прозьбу. А тут такая большая помощь с вашей стороны , побольше бы таких отзывчивых людей... ![]() Теперь я займусь 2-ой прогой и уж простите меня за назойливость, но наверняка у меня будут трудности и вопросы, поэтому я расчитываю на вашу помощь. Если вы не будете мне помогать то я не обижусь, ведь вы итак много зделали для меня. СПАСИБО!!!!!! ![]() |
glebik |
![]() ![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Начал писать прогу исрузу столкнулся с проблемами:
![]() 1) Volvo ты что-то писал об обработке 1-го типа по Левинштейну, впервые слышу, как это реализовать? 2)Ёще не знаю как обработать 4 и 5 типы вопрсов. Подскажите, что делать, пожалуйста! ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата об обработке 1-го типа по Левинштейну Нет, я уже посмотрел - это не совсем подойдет... Дело в том, что функция похожести двух строк, например, для "L.N. Tolstoy" и "Tolstoy L.N." выдаст, что строки похожи на 14%, а этого очень мало... Надо искать другой путь... Например, задавать список слов, котовые должны быть в ответе, и потом каждое слово из введенного пользователем ответа проверять на присутствие в шаблоне... Например, для твоего варианта, подойдет так:Шаблонный ответ: "Толстой Лев Л. Н." тогда, если отвечающий введет, например, "Лев Толстой" - то проверяем: отдельно Лев есть в шаблонной строке? Есть. Отдельно Толстой есть? Есть... Все, значит, правильно ответил... Точно так же будет, если введут "Л. Толстой" и если "Л. Н. Толстой" - все эти варианты будут признаны правильными, посколько из 2-х или 3-х слов ответа нет ни одного НЕсовпадения с шаблоном... Идея понятна? Для большей гарантии я бы еще перед сравнением строк переводил их ОБЕ в верхний или нижний регистр (функция для этого есть здесь: Строки - называется StrLower или StrUpper)... С обработкой четвертого и пятого типов вопросов вообще нет проблем: в четвертом ты точно так же, как я показывал, просишь пользователя ввести R.ans_count пар чисел, а в пятом - столько же целых чисел, и потом просто сравниваешь введенные пары/числа с тем, что хранится соответственно в R.good_ans4 или R.good_ans5... Если есть ПОЛНОЕ совпадение - ответ правильный, иначе - неверно... |
Артемий |
![]()
Сообщение
#18
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
glebik, вот если надо, я набросал тестер, который на основе первого моего варианта считывает инфу из ban.bat и преобразут в тест, где пользователь сможет выполнять его....смотри...
type -------------------- Dum spiro spero!
|
glebik |
![]() ![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Артемий2
![]() комп выдаёт ошибку:Structure too large. И вообще за что Ban: array [1..10] of Test отвечает? И что такое label 10? ![]() |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата в твоей 1-й проге , при запуске в строчке Ban: array [1..10] of Test А дело все в том, что Артемий2 никак не хочет понять, что для проверки работы программ из этого раздела НЕЛЬЗЯ пользоваться Дельфи... Турбо Паскаль не позволит выделить во-первых, одну структуру размером больше 65520 байт (а Ban имеет размер 80540 байт), а во-вторых, сумма всех размеров статических переменных не должна превышать те же самые 65520 байт...комп выдаёт ошибку:Structure too large. |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 15:04 |