Установка случайного элемента двумерного массива

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Си.
Парни и девки, подскажите плиз как мне в двумерный массив размером arr[10][10] вставить случайным образом например знак звёздочку "*",а остальные ячейки будут содержать просто пробелы....
Очень надо,срочно....
Заранее благодарен
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Код: Выделить всё


srand( (unsigned)time( NULL ) );
char arr[10][10];

for( int i=0; i < 10; i++ )
   memset( a[i], ' ', 10 );

arr[ rand() * 10.f / RAND_MAX ][ rand() * 10.f / RAND_MAX ] = '*';
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Спасибо!!!
А если количество звёздочек будет варьироваться в зависимости от того сколько пользователь захочет(при вводе в scanf),но чтобы не превышало допустим 5 штук???
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

А добавить цикл и проверку перед заполнением слабо? ( проверка необходима для
того, чтобы быть увереным в том, что звёздочка не попала ещё раза в ту же ячейку).
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

Код: Выделить всё

srand( (unsigned)time( NULL ) );
char arr[10][10];

for( int i=0; i < 10; i++ )
   memset( a[i], ' ', 10 );

int nStarCount;
cin >> nStarCoutn;

int nStars = 0;
while (nStarCount < nStarCount)
{
      int ri = rand() * 10.f / RAND_MAX;
      int rj = rand() * 10.f / RAND_MAX

      if (arr[ri][rj] == '*')
            continue;

      arr[ri][rj] = '*';
      ++nStars;
}
P.S. Название темы изменено. Господин qwertyuiop, постарайтесь хотя бы частично соблюдать правила, с которыми вы нибы-то согласились, зарегистрировав логин на форуме. Название топика должно быть информативным. Это экономит время людям, которые вам помогают.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Спасибо! Вот только не понятны две строки
функция memset()
и
cin >> nStarCoutn;

Что они делают?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

memset - функция, которая заполняет память, начиная с адреса, указанного первым параметром, причём заполняет содержимым второго параметра и заполняет столько ячеек памяти, сколько указано в третьем параметре.
cin - обект, который позволяет производить ввод данных из консоли (сокращение console input). cin >> nStarCount обозначает "считать из консоли целое число и поместить его в переменную nStarCount.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Ясно!!!
Сейчас у меня в голове всё встало на свои места,
Всем спасибо!!!
Ответить