Я работаю над функцией, которая принимает квадратную матрицу (2D-массив), поворачивает ее на 90 градусов, затем печатает все 4 оборота. То, над чем я работаю, печатает эти вращения бок о бок, а не прямо под ними. Это то, что я могу произвести, учитывая первую матрицу, показанную ниже:
123
123
123
111
222
333
321
321
321
333
222
111
То, что я хочу достичь:
123 111 321 333
123 222 321 222
123 333 321 111
Любая помощь в том, как
code:
//get transformation of matrix
for(num_rotations = 0;num_rotations < 3;num_rotations++){
for(row=0;row<num_rows;row++){
for(col=0;col<3;col++){
temp_arr[row][col] = working_arr[col][row];
}
}
}
Пока внутри цикла 1-го для Затем повторяются 2-й и 3-й «для» циклов, а последняя строка заменяется на:
working_arr[row][col] = temp_arr[row][3-col-1];//reverse columns for a single rotation
Оператор печати помещается в конец самого первого цикла «для».
Если вам просто нужно его распечатать, вы можете сделать что-то вроде
for(int i=0; i<n; ++i)
{
for(int j=0; j<n; ++j)
{
printf("%3d", arr[i][j]);
}
printf("\t");
for(int j=0; j<n; ++j)
{
printf("%3d", arr[n-1-j][i]);
}
printf("\t");
for(int j=n-1; j>=0; --j)
{
printf("%3d", arr[n-1-i][j]);
}
printf("\t");
for(int j=0; j<n; ++j)
{
printf("%3d", arr[j][n-1-i]);
}
printf("\n");
}
, где arr имеет матрицу размера n.
Здесь соответствующие диапазон индексов используется для печати повернутых версий, по одной строке за раз, из исходной матрицы без изменения оригинала.
Если вы не храните все 4 2D-массива и не печатаете их в конце все сразу, это довольно сложно.
Еще одна (беспорядочная) идея - использовать gotoxy (), чтобы поместить курсор туда, куда вы хотите на экране и распечатать элементы 2D-массивов при вращении. Как разместить курсор ввода в C?