С++ консольная

Компьютеры программирование программы C++

Столкнулся с проблемой "Двумерный массив должен заполнится тремя рандомными символами (сделал) при этом не должно быть трёх одинаковых соседних элементов по столбцам и строка соответственно (!?).

Вот код:

# include <iostream>
# include <windows.h>
# include <time.h>//для рандома и слипа
# include <fstream>
# include <conio.h>//для работы с калвиатурой

using namespace std;


const int N = 20, M = 18;
//M-ширина
//N-высота
int key=0;
int i=0,j=0;
int INTERVAL=200;
//INTRVAL- частота обновления кадров.
int msg=0,kol_pov=1;
char a[100][100],user_cursour[1],add_char[]="xo+";

int chek_str=0,chek_stb=0;
int add_rand;

void SetColor(int text, int background)
{//Функция изменения цвета текста.
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void add()
{//Заполняет массив символами.
srand(time(NULL));
for ( i = 1; i <= N ; ++i)
for ( j = 1; j <= M ; ++j){
add_rand=rand()%3;
a[i][j]=add_char[add_rand];
}

}
void chek_add()
{//Проверка качества заполнения массива.
do{
chek_str=0;
chek_stb=0;

for ( i = 1; i <= N ; ++i)
for ( j = 1; j <= M ; ++j)
{
if ((( a[j][i]==a[j+1][i+1] ) && ( a[j][i]==a[j+2][i+2] ))&&(( a[i][j]==a[i+1][j+1] ) && ( a[i][j]==a[i+2][j+2] )))
{chek_stb+=1;a[j][i]=add_char[rand()%3];}

}
cout<<"\nОшибок в строке:"<<chek_str<<endl;
cout<<"Ошибок в столбце:"<<chek_stb<<endl;}
while((chek_str && chek_stb)!=0);
}
void make_play_graund()
{//Заполняет массив рамкой.
for ( i = 0; i <= N + 1; ++i)
for ( j = 0; j <= M + 1; ++j)
if (i == 0 || j == 0 || i == N + 1 || j == M + 1) a[i][j]='#';
}

void show_play_graund()
{//Выводит массив на экран.
system("cls");
cout<<endl<<endl<<"\t\t";
for ( i = 0; i <= N + 1; ++i){
cout<<endl<<"\t\t";
for ( j = 0; j <= M + 1; ++j){
if (a[i][j]=='#') {SetColor(9,0); cout<<a[i][j];}
if (a[i][j]=='x') {SetColor(11,0); cout<<a[i][j];}
if (a[i][j]=='o') {SetColor(15,0); cout<<a[i][j];}
if (a[i][j]=='+') {SetColor(13,0); cout<<a[i][j];}
}}
cout<<endl<<endl;
}


void main()
{setlocale(LC_ALL,"Russian");

add();
make_play_graund();

show_play_graund();
chek_add();
show_play_graund();

}

Примечание:
Проверка массива выполняется в функции chek_add()

Примечание:
Проблема в том, что массив заполняется, но элементы стоят по несколько штук в ряд в строку или в столбец как эффективно это исправить?
Ответы:
А где сам вопрос/проблема?


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.