Задача. Дана строка с состояниями. 1) |1|0|0|1|1|0|1|1| Надо вычислить последующую строку при помощи "соседей". |1|0|0|1|1|0|1|1| |A|B|C|D|E|F|G|I| Что бы вычислить а, нам нужно просмотреть состояние её соседей.Если количество соседей будет иметь 2 или 4 единицы, то на место А пишется 1, если нет, то 0. Пример: A={1,0,0}=1.Write 0 |1|0|0|1|1|0|1|1| |0|B|C|D|E|F|G|I| B={1,0,0,1}=2.Write 1 |1|0|0|1|1|0|1|1| |0|1|C|D|E|F|G|I| C={1,0,0,1,1}=3.Write 0 |1|0|0|1|1|0|1|1| |0|1|0|D|E|F|G|I| D={0,0,1,1,0}=2. Write 1 |1|0|0|1|1|0|1|1| |0|1|0|1|E|F|G|I| E={0,1,1,0,1}=3.Write 0 |1|0|0|1|1|0|1|1| |0|1|0|1|0|F|G|I| F={1,1,0,1,1}=4.Write 1 |1|0|0|1|1|0|1|1| |0|1|0|1|0|1|G|I| G={1,0,1,1}=3.Write 0 |1|0|0|1|1|0|1|1| |0|1|0|1|0|1|0|I| I={0,1,1}=2.Write 1 |1|0|0|1|1|0|1|1| |0|1|0|1|0|1|0|1| Вот и наша готовая строка. Теперь непосредственно к заданию.Нужно написать скрипт, который бы вычислял каждую последующую строку.Первая строка будет заносится в массив рандомно, на её базе нужно просчитывать последующие. Параметры пассива: 100*80. Вот сам код: Code: #include <iostream> #include <math.h> #include <Windows.h> #include <time.h> using namespace std; void main() { int all_array [100] [80] = {NULL};//массив 100 - количество строк, 80 - количество ячеек в каждой строке. int r = 0; srand((int)time(NULL)); for(int r = 0; r<80;r++) { all_array [0][r] = 0+(int) (2*rand()/(RAND_MAX+1.0)); cout<<all_array [0] [r]; //Рандомно запихиваем числа в массив с индексом [0][r] //числа: 0,1. } cout<<"\n\n"; for(int i = 1; i<100;i++)//Цикла для левого индекса(100 строк) all_array[left] [right] { for(int j = 0; j<80;j++)//Цикла для правого индекса(80 ячеек) all_array[left] [right] //Таким образом поле имеет 100 "мест" в высоту и 80 в ширину. { int anzahl= 0;//считаем количество X(1) в ближайших пяти ячейках. if(j==78||j==79)// если поле в ширину заканчивается { for(int sl_for=j-2;sl_for==79;sl_for++){ if(all_array [i-1][sl_for]==1){anzahl++; if(anzahl == 2||anzahl == 4){all_array [i][j]=1;anzahl=0;}else{all_array [i][j]=0;} }else{} } } if(j>=2)//индекс правого массива более на отметке 2 или более { for(int sl_for=j-2;(sl_for<=j+2)||(sl_for==79);sl_for++){ if(all_array [i-1][sl_for]==1){anzahl++; //cout<<"Check_if2"; if(anzahl == 2||anzahl == 4){all_array [i][j]=1; anzahl=0;}else{all_array [i][j]=0; } }else{} } } if(j==1)//индекс массива стоит на 1(то бишь под номером 2) { for(int sl_for=j-1;sl_for<=j+1;sl_for++){ if(all_array [i-1][sl_for]==1){anzahl++; if(anzahl == 2||anzahl == 4){all_array [i][j]=1;anzahl=0;}else{all_array [i][j]=0;} }else{} } } if(j==0){//начало for(int sl_for=j;sl_for<=j+2;sl_for++){ if(all_array [i-1][sl_for]==1){ anzahl++; if(anzahl == 2||anzahl == 4){all_array [i][j]=1;anzahl=0;}else{all_array [i][j]=0;} }else{} } } } } for(int h = 0; h<100 ; h++) { cout<<h<<"\n"; for(int check = 0; check<80;check++) { cout<<all_array [h][check]; //if(all_array [h][check]== 1) //{cout<<'X';}else{cout<<"-";}//выдаём вместо чисел знаки 'X'=1, '-' = 0. check++; } system("pause"); } } Проблемы на лицо если запустить.Во первых по какой то причине в массив заносится только половина высчитанной строки.Во вторых, я что-то намудрил с логикой, в итоге строка высчитывается неверно. Будьте добры гляньте свежим взглядом. Спасибо.
Всё Ошибка найдена, случайно не заметил в конце переменной check++; из -за этого не правильно шла запись в массив.