makaveliinc
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Помогите ,плиз .А то препод уже достал.Написал прогу на Си с использыванием одномерних массивов , преподаватель потребовал переписать прогу с использованием двухмерных массивов.Буду очень благодарен,т.к. я попробывал сам это сделать и прога перестала компилироваться . Вот прога ,которую надо переписать ,изменив одномерные массивы на двумерные: #include <windows.h> #include <stdio.h> const int size = 8; // размер доски int table[size*size]; // соственно сама доска int point[2] = {0,1}, // точка, куда должен попасть конь knightPos[2] = {4,2}, // начальная позиция коня moves = 0; // сколько шагов нужно void initTable(int* table, int size, int p[2]); // сначала таблица "не хожена", кроме точки void movesKnight(int* table, int size); // сделать ходы из всех "хоженных" точек int checkPass(int* table, int size, int kP[2]); // проверить, если путь пройден int main() { initTable(table, size, point); do { movesKnight(table, size); } while(checkPass(table, size, knightPos) == -1); printf("\nresult = %d", moves); return 0; } void initTable(int* table, int size, int p[2]) { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { table[i*size + j] = -1; } } table[p[0]*size + p[1]] = 0; } void movesKnight(int* table, int size)// делаем ходы из всех "хоженных точек" { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { if(table[i*size + j] == moves) { if(i+1 < 8 && j+2 < 8 && table[(i+1)*size + (j+2)] == -1) { table[(i+1)*size + (j+2)] = moves+1; } if(i+2 < 8 && j+1 < 8 && table[(i+2)*size + (j+1)] == -1) { table[(i+2)*size + (j+1)] = moves+1; } if(i+1 < 8 && j-2 >= 0 && table[(i+1)*size + (j-2)] == -1) { table[(i+1)*size + (j-2)] = moves+1; } if(i-1 >= 0 && j+2 < 8 && table[(i-1)*size + (j+2)] == -1) { table[(i-1)*size + (j+2)] = moves+1; } if(i+2 < 8 && j-1 >= 0 && table[(i+2)*size + (j-1)] == -1) { table[(i+2)*size + (j-1)] = moves+1; } if(i-1 >= 0 && j-2 >=0 && table[(i-1)*size + (j-2)] == -1) { table[(i-1)*size + (j-2)] = moves+1; } if(i-2 >= 0 && j+1 < 8 && table[(i-2)*size + (j+1)] == -1) { table[(i-2)*size + (j+1)] = moves+1; } if(i-2 >= 0 && j-1 >= 0 && table[(i-2)*size + (j-1)] == -1) { table[(i-2)*size + (j-1)] = moves+1; } } } } moves++; } int checkPass(int* table, int size, int kP[2])// проверяем,если путь пройден . { return table[kP[0]*size + kP[1]]; } } |