Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2008, 20:46   #1
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию Составление билетов(поправка рандома)

Написал программу для составления билетов.Но работает немного не так как надо.У меня не получается избежать повторений вопросов в билетах.Т.е. каждый вопрос должен участвовать один раз.
Билет состоит из 3 вопросов.Вопросы же подразделяются на 5 условных тем.

Собственно прошу поправить рандом, чтобы не было повторов.Заранее огромное спасибо.
Вложения
Тип файла: rar билеты.rar (1.7 Кб, 37 просмотров)
Jodu вне форума Ответить с цитированием
Старый 30.03.2008, 21:02   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Тебе ненравится что иногда подряд идут два одинаковых билетов?
Или тебе тебе надо чтоб на экран выводились вопросы без повторений?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 30.03.2008, 21:08   #3
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

Мне надо чтоб на экран выводились вопросы без повторений.

у меня всего 5тем * по 18 вопросов =90 вопросов.
т.е. получается 30 билетов, и чтобы одинаковых вопросов в этих билетах не было,т.е. все 90 вопросов выводились на экран.
Jodu вне форума Ответить с цитированием
Старый 30.03.2008, 21:11   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Наверное следует сначало создать массив из неповторяющихся значений. А номера вопросов брать уже из нево.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 30.03.2008, 21:56   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Например вот этот код создаёт массив из 90 элементов без повторений.

Код:
Var Mass : array [1..90] of Byte;
      i, m, x, max : Byte;
      No : Boolean;

Begin
max := 2;
Randomize;
For m := 1 To 90 Do
  Begin
    Repeat
      No := False;
      x := Random(91);
        For i := 1 To max Do
        if mass[i] = x Then No := True;
    Until No = False;
    mass[m] := x;
    max := max + 1;
   End;
Writeln ('Ok!');
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 30.03.2008, 22:25   #6
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

если я правильно понимаю,то мне надо создать 5 таких массивов по 18 вопросов.Ну а потом вывести....
А если делать так, то в большом массиве вопросы из одной темы могут стать рядом, т.е. при выводе, у меня в одном билете может получиться два,а то и три вопросы из одной темы,а так это не есть хорошо.
Jodu вне форума Ответить с цитированием
Старый 30.03.2008, 22:38   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Отписывайся лучше в этой теме.

1. Вот допустим у тебя имеются 90 вопросов. Создаёшь массив и туда заносишь свои вопросы.

vopros[1] := 'Где ты был?';
vopros[2] := 'С кем ты был?';
vopros[3] := 'Что ты пил?';
.....
vopros[90] := 'Сколько будет корень квадратный из Пи по полам?';

2. Так как тебе нужно не выводить вопросы попорядку, а выводить в перемешку и при этом недолжно быть повторений, то нужно это продумать.
а) создаёшь массив где будешь хранить номера ответов.
б) значения элементов массива не должны повторяться.
Как раз такой массив и создаёт мой код.

3. Теперь пишешь:
For i := 1 To 90 Do
Begin
Write('Vopros#', i); Writeln;
Write(vop[mass[i]]);
End;

Твой код я смотрел. Это невозможно читать.
Слишком трудно понять, что он делает. Кароче его надо форматировать нормально.

Вот даю вариант программы которая выводит вопросы без повторений и в перемешку. Написал за 10 мин. Всего 10 вопросов.

Код:
Var Vop : array [1..10] of String;
      Nomer : array [1..10] of Integer;
      i, m, x, max : Byte;
      No : Boolean;

Begin
Vop[1] := '1 vopros';
Vop[2] := '2 vopros';
Vop[3] := '3 vopros';
Vop[4] := '4 vopros';
Vop[5] := '5 vopros';
Vop[6] := '6 vopros';
Vop[7] := '7 vopros';
Vop[8] := '8 vopros';
Vop[9] := '9 vopros';
Vop[10] := '10 vopros';

max := 2;   
Randomize;   
For m := 1 To 10 Do
  Begin
    Repeat
      No := False;
      x := Random(11);
        For i := 1 To max Do
        if Nomer[i] = x Then No := True;
    Until No = False;   
    Nomer[m] := x;
    max := max + 1;   
   End;   
Writeln ('Ok!');  

For i := 1 To 10 Do
  Begin
    Write('Vopros#', i); Writeln;
    Write(vop[Nomer[i]]);
    Writeln; Writeln;
  End;
Readln;
End.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 30.03.2008, 22:54   #8
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

Спасибо большое.Идею понял)
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 18:27   #9
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

А Вот допустим я хочу создать массив из из неповроряющихся значений A[50] элементов.
Как сделать так, чтобы A[1] выбирался из (10), A[2] из (20),А[3] - из (30),А[4] - из(40),А[5] - из 50, далее А[6] - из (10)......?
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 18:36   #10
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Ты лучше скажи что ты хочешь сделать....
Тебе нужно в каждый билет сунуть по вопросу из разных тем?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составление слова Cawboy Общие вопросы Delphi 2 03.06.2008 13:21
Составление диаграммы Иля Microsoft Office Excel 1 06.04.2008 18:08