Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
#1

Выбор объекта случайным образом - C++

05.01.2013, 18:42. Просмотров 650. Ответов 18
Метки нет (Все метки)

Проверьте, пожалуйста! Правильно ли я выполнил задание?

Напишите программу, которая случайным образом выбирает объект из сумки, в которой находятся восемь предметов. Каждый предмет может быть красным, синим, оранжевым или зеленым, а также он может быть шаром или кубом. Предположите, что в сумке находится по одному предмету для каждой комбинации (один красный шар, один красный куб, один оранжевый шар, один оранжевый куб, и так далее). Надо использовать два массива строк – один для идентификации цветов, а второй – для идентификации форм.

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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
int rand0ToN1(int n);
void Objects();
char *forms[2] = {"cube", "ball"};
char *colors[4] = {"red", "blue", "orange", "green"};
                
int main()
{   
    srand(time(NULL));
    
    Objects();
    
    getch();
    return 0;
}
 
void Objects()
{
    int result;
    int f;
    int c;
    
    result = rand0ToN1(8);
    f = rand0ToN1(2);
    c = rand0ToN1(4);
    
    cout << result << " object is " << forms[f] << " and he is " << colors[c] << endl;
}
 
int rand0ToN1(int n)
{
    return rand() % n;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 18:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выбор объекта случайным образом (C++):

Дата случайным образом
Добрый вечер! Помогите пожалуйста написать программу, которая генерирует дату...

Заполнить массив случайным образом
Добрый день!!! Ребята, объясните пожалуйста, как выполнить такую задачу!!! По...

случайным образом выбирается символ
Помогите пожалуйста! .Случайным образом выбирается символ и пока не будет...

заполнение массива случайным образом
Помогите на языке Си заполнить массив символов случайным образом символами с...

Перемешивание элементов массива случайным образом
Здравствуйте. Помогите написать функцию, которая рандомно перемешивает...

Нужно заполнить массив случайным образом
Заданы два массива А(N) и В(M). Размерности массивов задает пользователь,...

18
pa3gBa
2 / 2 / 4
Регистрация: 27.04.2012
Сообщений: 20
05.01.2013, 19:18 #2
вроде всё в норме ! )
работает как надо .
1
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
05.01.2013, 19:34 #3
Смущает одна строчка в задании:
Цитата Сообщение от jekmut Посмотреть сообщение
Предположите, что в сумке находится по одному предмету для каждой комбинации
Т.е. по идее если я сделаю выборку из 8 предметов, то я не должен получить два одинаковых результата. Но я не вижу, чтобы в программе это было предусмотрено.
1
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
05.01.2013, 19:53  [ТС] #4
Это получается, что в каждой комбинации должно быть по два объекта? И таких комбинаций должно быть четыре? Я правильно понял?
Да, и еще, когда выполняю несколько раз программу, выводит 0-ой объект, а минимальный должен быть 1, макс. - 8. Наверное, надо цикл, типа
C++
1
for (int i = 1; i <= 8; i++)
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
05.01.2013, 19:57 #5
Каждый объект представляет собой пару из двух свойств: формы и цвета. В данном случае различных объектов может быть 8.
1
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
05.01.2013, 22:11  [ТС] #6
Я уже запутался... Что, конкретно, должна вывести программа??? У меня голова идет кругом...
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 22:20 #7
jekmut, в программе должен быть каждый объект каждого цвета (кубы всех цветов и шары всех цветов). Так как фигур всего 2 и цветов 4, то декартово произведение 2х4 = 8 комбинаций.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
void Objects()
{
    char *combinations[2*4];
    for(int i = 0; i < 2; i++)
       for(int j = 0; j < 4; j++)
       {
          combinations[i*4+j] = colors[j] + " " forms[i];  //или как там, не помню, конкатенция строк короче 
          cout <<  combinations[i*4+j] <<endl;
       }
    cout << "picking random object... it's " << combinations[rand() % 2*4] << endl;
}
1
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
07.01.2013, 15:35  [ТС] #8
Спасибо, Вам! Но я новичек и не могу разобраться с этой функцией...
Выдает ошибку в этой строке:
C++
1
combinations[i*4+j] = colors[j] + " " forms[i];
Как исправить???? Было бы здорово, если б написать эту функцию попроще. Заранее благодарен!
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
07.01.2013, 17:35 #9
jekmut, мб так?
C
1
combinations[i*4+j] = strcat(colors[j], strcat(" ",forms[i]));
1
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
07.01.2013, 18:46  [ТС] #10
Все было бы чудесно, но при запуске программы, открывается черное (без каких либо сообщений) окно и срузу же закрывается. Я в замешательстве...
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
07.01.2013, 19:12 #11
jekmut, поставить getchar() в конец?..
0
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
07.01.2013, 19:26  [ТС] #12
У меня функция getch() стоит и все равно не помогает.
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
07.01.2013, 22:09 #13
jekmut, ну так пройдитесь step over. Отладчик для того и придуман.
0
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
08.01.2013, 00:49  [ТС] #14
При отладке программы всплывает такое сообщение: "Ваша программа вызвала нарушение доступа (ошибку сегментации)." Да уж... это задание из книги для начинающих и никто сделать не может... Просто отлично.
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
08.01.2013, 08:07 #15
Потому что ерунда с конкатенацией понаписана, потому и валится.
Вообще хочется создать массив структур, в котором разместить либо индексы характеристик объектов, либо указатели на соответствующие строки. Но если
Цитата Сообщение от jekmut Посмотреть сообщение
это задание из книги для начинающих
то, наверное, и не стоит заморачиваться.
0
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
08.01.2013, 11:49  [ТС] #16
Я согласен. Это задание легкое, нужно немного изменить пример и все. Psilon сделал так, как считал нужным. Для меня это пока сложно да и к тому же не работает... Моя программа должна вывести всего один объект из восьми или все восем случайным образом???
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
08.01.2013, 12:37 #17
Что не рабоатет?
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 <iostream>
#include <stdlib.h>
#include <time.h>
#include <string>
#define M 2
#define N 4
 
using namespace std;
 
 
string forms[M] = {"cube", "ball"};
string colors[N] = {"red", "blue", "orange", "green"};
 
 
string GetRandomObjects()
{
    srand(time(NULL));
    return "Object is " + colors[rand() % N] + " " + forms[rand() % M];
}
 
int main()
{    
    cout << GetRandomObjects() << endl;
    return 0;
}
1
jekmut
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
08.01.2013, 13:37  [ТС] #18
Вот это другое дело! )) Огромное спасибо!
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
08.01.2013, 13:43 #19
jekmut, всегда пожалуйста
0
08.01.2013, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2013, 13:43
Привет! Вот еще темы с решениями:

Вещественный массив - заполнение случайным образом.
Здравствуйте. Помогите пжлста с задачкой. (Visual C++ 6.0) Дан вещественный...

Сформировать случайным образом масив из 20 элементов
Помогите написать прогу на С++ &quot;Сформувати випадковим чином масив із 20...

Печатать число из набора случайным образом: 2, 4, 6, 8, 10
Помогите пожалуйста написать программу в цикле, которая будет печатать число из...

Перемешивание элементов массива случайным образом
Здравствуйте! Помогите пожалуйста. Нужно перемешать елементы массива случайным...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru