Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
1

Вывод из массива случайного элемента (программа тестирования)

27.09.2009, 18:51. Показов 2087. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include<iostream>
using namespace std;
 
//--------------масив структур---------------
struct answer
{
char* a;
char* b;
char* c;
char* d;
char* x;
char* key;
};
//-------------------------------------------
 
void main() 
{
//-----------------масив с вопросами-----------------
char** v=new char*[15];
for (int i=0; i<6; i++)
{v[i]=new char[255];}
 
v[0]="Вопрос0";
 
v[1]="Вопрос1";
 
v[2]="Вопрос2";
 
v[3]="Вопрос3";
 
v[4]="Вопрос4";
 
v[5]="Вопрос5";
//--------------------------------------------------
//-----Масив структур (варианты ответов)------------
answer ans[6];
 
ans[0].a="вариант ответа номер 0";
ans[0].b="вариант ответа номер 1";
ans[0].c="вариант ответа номер 2";
ans[0].d="вариант ответа номер 3";
ans[0].x="правильный ответ";
ans[0].key="ключ";
 
ans[1].a="вариант ответа номер 0";
ans[1].b="вариант ответа номер 1";
ans[1].c="вариант ответа номер 2";
ans[1].d="вариант ответа номер 3";
ans[1].x="правильный ответ";
ans[1].key="ключ";
 
ans[2].a="вариант ответа номер 0";
ans[2].b="вариант ответа номер 1";
ans[2].c="вариант ответа номер 2";
ans[2].d="вариант ответа номер 3";
ans[2].x="правильный ответ";
ans[2].key="ключ";
 
ans[3].a="вариант ответа номер 0";
ans[3].b="вариант ответа номер 1";
ans[3].c="вариант ответа номер 2";
ans[3].d="вариант ответа номер 3";
ans[3].x="правильный ответ";
ans[3].key="ключ";
 
ans[4].a="вариант ответа номер 0";
ans[4].b="вариант ответа номер 1";
ans[4].c="вариант ответа номер 2";
ans[4].d="вариант ответа номер 3";
ans[4].x="правильный ответ";
ans[4].key="ключ";
 
ans[5].a="вариант ответа номер 0";
ans[5].b="вариант ответа номер 1";
ans[5].c="вариант ответа номер 2";
ans[5].d="вариант ответа номер 3";
ans[5].x="правильный ответ";
ans[5].key="ключ";
//--------------------------------------------------
 
char z;
int l;
 
for (l=0; l<5; l++)
{
//----------ГЕНЕРИРУЕМ СЛУЧАЙНОЕ ЧИСЛО--------------
 
srand (unsigned(time(NULL)));
int h;
h=rand()%5;
//--------------------------------------------------
 
cout<<v[h]<<"\n"; //вывод вопроса
cout<<ans[h].a<<"\n";//вывод 1 варианта ответа
cout<<ans[h].b<<"\n";//вывод 2 варианта ответа
cout<<ans[h].c<<"\n";//вывод 3 варианта ответа
cout<<ans[h].d<<"\n";//вывод 4 варианта ответа
cin>>z;
cout<<"\n\n";
}
}
ВОПРОС: Как сделать так что генерировался случайный вопрос из масива (соответственно к нему соответствующие варианты вопроса.) (ограничение: в цикле он не разу не повторялся.)

То есть например мы заходим в программу, она выдает нам например 5 вопрос.
мы вводим желаемый вариант ответа например, мы вводим b

Жмем ввод.

Опять выводится например 3 вопрос.
мы вводим желаемый вариант ответа например, мы вводим с

Жмем ввод.
и так далее, пока не закончится цикл в данном случае 5 раз.
В данный момент все прекрасно работает, но генерируемые вопросы повторяются. Помогите пожалуйста в решении проблемы.

P.S. создавал похожую тему с генерацией случайного числа, но в данном примере применить не удалось.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2009, 18:51
Ответы с готовыми решениями:

Вывод случайного элемента массива
В книгах ищу нету. представим у нас есть массив из некоторых слов.типа char s; s=&quot;asd&quot;;...

Вывод случайного элемента массива
Есть массив чисел . Генерируется случайное число в диапазоне от 1 до 8. Нужер сделать так, чтобы из...

Вывод случайного элемента массива
void __fastcall TForm1::Button1Click(TObject *Sender) { char a =...

Вывод случайного ЭЛЕМЕНТА из массива
Т.е. не массива с рандомными числами, а именно одного-единственного случайного элемента, значения...

16
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 19:35 2
создаешь массив A типа bool и если вопрос номер N задал, то ставишь A[N] = true; потом при генерации получив некий новый вопрос S проверяешь A[S] == false если да, то задаешь его, иначе генерируешь новое число
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.09.2009, 19:40 3
Если на словах, то просто надо создать массив элементов типа int. Перед генерацией номера вопроса необходимо его обнулить (всем элементам массива присвоить 0). Саму генерацию случайного номера вопроса поместить в цикл (проверкой цикла является, что новый номер не равен ни одному элементу в массиве). При выполнении этого условия заносить новый номер вопроса в массив.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 19:44 4
valeriikozlov, не оптимально. так как при количестве вопросов около 1000 ты с каждой новой генерацией ты делаешь нереально много операций. Не проще ли обращаться непосредственно по известному индексу?
1
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
27.09.2009, 19:51 5
Полностью согласен.
0
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 20:05  [ТС] 6
извините но я не чего не понял.
Ну вопросов будет около 20 - 30 в масиве.

А как реализовать проверку в цикле, что бы переменная h != h когда цикл идет 2 раз, 3 раз, 4 раз и 5 раз.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 20:28 7
задаешь массив A можно bool, можно int размерностью такой сколько у тебя вопросов. Если bool, то ставишь все значения в true, если int - в любое кроме 0. Потом когда проходит генерация ты смотришь то число которое сгенерировалось(пусть будет N), и обращаешься к своему массиву A по индексу N и смотришь, если значение этого элемента true(или отличное от 0) то задаешь этот вопрос, а элемент массива с индексом N ставишь в false(или 0). Если же при обращении к массиву по индексу N ты получаешь значение false(или 0), то не задаешь вопрос, а генерируешь новое число с которым и повторяешь те же операции и так пока не закончится твой цикл

Добавлено через 11 минут
вот скомпилируй эту
программку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <time.h>
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    srand (unsigned(time(NULL)));
    int h, i(0); //задаем 10 вопросов из 15
    int mas[15] = {0};
    for(;;)
    {
        h=rand()%15;
        if(mas[h])
        {
            std::cout<<h<<"\tуже был!\n";
            continue;
        }
        std::cout<<"Новый\t"<<h<<'\n';
        ++i;
        mas[h] = 1;
        if(i == 10)
            break;
    }
    system("pause");
    return 0;
}
там где пишет "Новый" - это у тебя задается вопрос
1
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 20:41  [ТС] 8
спс конечно, но я не понял что у тебя за код. И к чему он вообще. Все вопросы должны быть в масиве. (это важно по условию, и не как иначе.)
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 20:45 9
я показал суть как блокировать повторы, то что ты и просил
0
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 20:47  [ТС] 10
а как то можно через масив этот... Например генерируется переменная h, а на 2 разе уже проверка?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 21:24 11
на самом деле проверка еще с первого раза есть, но проходит только со второго, в первый раз просто условие не выполняется
1
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 21:32  [ТС] 12
вот а так можно сделать?

в цикле генерируется число например h=7
далее генерируется число например h=5 и уже идет проверка

if (h!=h)

такое можно реализовать?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 21:36 13
nepster, а какой смысл от этого?
1
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 21:41  [ТС] 14
ну если число h=h заставляем генерировать новое число если нет то выводим 2 вопрос
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2009, 21:53 15
nepster, я писал уже ответ на этот вопрос
1
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
27.09.2009, 22:42  [ТС] 16
блин сори, я все понял, до меня дошло...


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "stdafx.h"
#include<iostream>
#include <time.h>
 
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "Russian");
char** a=new char*[15];
for (int i=0; i<15; i++)
{a[i]=new char [255];}
 
a[0]="Вопрос номер 1";
a[1]="Вопрос номер 2";
a[2]="Вопрос номер 3";
a[3]="Вопрос номер 4";
a[4]="Вопрос номер 5";
a[5]="Вопрос номер 6";
a[6]="Вопрос номер 7";
a[7]="Вопрос номер 8";
a[8]="Вопрос номер 9";
a[9]="Вопрос номер 10";
a[10]="Вопрос номер 11";
a[11]="Вопрос номер 12";
a[12]="Вопрос номер 13";
a[13]="Вопрос номер 14";
a[14]="Вопрос номер 15";
a[15]="Вопрос номер 16";
 
char m;
        srand (unsigned(time(NULL)));
        int h, i(0); //задаем 10 вопросов из 15
        int mas[19] = {0};
            
        for(;;)
        {   
        h=rand()%15;
        if(mas[h])
        {
        continue;
        }
        std::cout<<a[h] <<'\n';
        std::cin>>m;
        ++i;
        mas[h] = 1;
        if(i == 5)
        break;
        }
 
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n";
}

Сори - туплю =).. ну только учусь =) я исправлюсь
0
Псевдо программист
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
28.09.2009, 09:59 17
кстати, мне кажется что будет удобнее хранить вопросы и ответы в одной структуре.
C++
1
2
3
4
5
6
7
8
9
10
struct answer
{
char* a;
char* b;
char* c;
char* d;
char* x;
char* key;
char* quest;//тут храним вопрос
};
0
28.09.2009, 09:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2009, 09:59
Помогаю со студенческими работами здесь

Вывод случайного массива, вылетает программа
Программа генерирует случайный двумерный массив, выводит его в файл, потом читает и выводит на...

Вывод случайного элемента в <div> из массива текстовых документов расположенных в одной папке
Всем привет! :) Ситуация следующая: имеется папка с множеством текстовых документов (1.txt,...

Выбор случайного элемента из массива и умножить его на другой случайный элемент из массива?
Выбор случайного элемента из массива и умножить его на другой случайный элемента из массива ?

Выбор случайного элемента массива
Доброй ночи. Только начал изучать джаву. Сейчас стараюсь написать программку, где пользователь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru