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

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

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

3 страниц V < 1 2 3 >  
Closed Topic Открыть новую тему 
> помогите с конструктором тестов, нужна помощь
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






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


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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

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


Гость






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


Новичок
*

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

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


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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Новичок
*

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

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


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


Гость






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

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

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


Новичок
*

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

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


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


Новичок
*

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

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



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


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

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

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


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


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


Новичок
*

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

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


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


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

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

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


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


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


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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


Гость






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

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


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

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

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

 





- Текстовая версия 2.10.2020 2:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name