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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2008, 18:54   #11
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

да,нужно в каждый билет сунуть по вопросу из разных тем.
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 19:41   #12
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Мне приходит в голову только хранить номера в определённых диапазонах.
И брать их от туда при выводе.

Напимер:
Vop[1] := '1 Tema 1 vopros';
Vop[2] := '1 Tema 2 vopros';
Vop[3] := '1 Tema 3 vopros';
Vop[4] := '1 Tema 4 vopros';
Vop[5] := '1 Tema 5 vopros';

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

Vop[11] := '3 Tema 1 vopros';
Vop[12] := '3 Tema 2 vopros';
Vop[13] := '3 Tema 3 vopros';
Vop[14] := '3 Tema 4 vopros';
Vop[15] := '3 Tema 5 vopros';

Массив рандомных неповторяющихся чисел будет иметь тогда такой вид:
1..5 - вопросы 1 темы (дапазон массива Vop[1..5])
6..10 - второй темы. (дапазон массива Vop[6..10])
11..15 - 3 темы. (дапазон массива Vop[11..15])
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 31.03.2008, 20:00   #13
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

Т.е. нужно сначала отдельно прорандомить 3 диапозона, а потом циклом выводить билеты?я правильно понимаю?
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 20:14   #14
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Я к тому, чтонадо разбить массив на части где будем хранить рандомные значения вопросов тем.

Массив вопросов:
1 2 3 4 5 - 1 тема
6 7 8 9 10 - 2 тема
11 12 13 14 15 - 3 тема

Массив "мешалки" должен создать вот такой например массив.
3 2 1 5 4 - перемешанные вопросы 1 темы
9 10 6 8 7 - 2 темы
13 11 14 12 15 - 3 темы.

Теперь надо выводить вопросы с смещением на 5.
1, 6, 11 - 1 билет.
2, 7, 12 - 2 билет.
.......
5, 10, 15 - 5 билет.

В результате 5 билетов в которых нет одинаковых вопросов и в каждом билете по вопросу из одной темы.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 31.03.2008, 20:58   #15
Jodu
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 30
По умолчанию

такс...это получилось))спасибки большое)
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 22:31   #16
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Вариант кода который:
1. Перемешивает вопросы. (по 10 на каждую тему)
2. Создаёт 10 билетов. В котором по 3 вопроса, по одному из каждой темы.


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

Begin

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

// 2 Tema
Vop[11] := '2 Tema 1 vopros';
Vop[12] := '2 Tema 2 vopros';
Vop[13] := '2 Tema 3 vopros';
Vop[14] := '2 Tema 4 vopros';
Vop[15] := '2 Tema 5 vopros';
Vop[16] := '2 Tema 6 vopros';
Vop[17] := '2 Tema 7 vopros';
Vop[18] := '2 Tema 8 vopros';
Vop[19] := '2 Tema 9 vopros';
Vop[20] := '2 Tema 10 vopros';

// 3 Tema
Vop[21] := '3 Tema 1 vopros';
Vop[22] := '3 Tema 2 vopros';
Vop[23] := '3 Tema 3 vopros';
Vop[24] := '3 Tema 4 vopros';
Vop[25] := '3 Tema 5 vopros';
Vop[26] := '3 Tema 6 vopros';
Vop[27] := '3 Tema 7 vopros';
Vop[28] := '3 Tema 8 vopros';
Vop[29] := '3 Tema 9 vopros';
Vop[30] := '3 Tema 10 vopros';

max := 2; dx := 0;
Randomize;
For m := 1 To 30 Do
  Begin
  if (m = 11) or (m = 21) Then dx := dx + 10;
    Repeat
      No := False;
      x := dx + Random(11);
        For i := 1 To max Do
            if Nomer[i] = x Then
              Begin
                No := True;
                Break;
              End;
    Until No = False;
    Nomer[m] := x;
    max := max + 1;
   End;


{For i := 1 To 30 Do
  Begin
  Write (i);
    For x := 1 To 30 Do
        if Nomer[x] = i Then Write(' +');
        Writeln;
  End;}

Writeln ('Ok!'); Writeln;

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

это все получилось.
Вопрос таков, по этому случаю, например,я хочу, чтобы у меня в билете было 2 вопроса,какое мне условие нужно поставить?
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 22:45   #18
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Просто удалить строку вывода третьего вопроса.

Или в этом куске вклиниваешь блоки If Then Else

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

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

(я делаю что если i mod 2 =0 then writeln ('bilet#')
но мне эта надпись печатается не после двух вопросов, а в самом верху почему-то.
Вот в этом проблема так сказать...

Последний раз редактировалось Jodu; 31.03.2008 в 22:52.
Jodu вне форума Ответить с цитированием
Старый 31.03.2008, 23:17   #20
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Напиши один в один что ты хочешь увидеть на экране...

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


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



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