Добрый вечер Задали задачу – повернуть доску для крестиков-ноликов на угол, кратный 90*, т.е. на 180*, 270* и т.п. Все дело в том, что нужно использовать один одномерный массив и, соответственно, один цикл. Бьемся неделю Заранее спасибо за любую помощь!
13 ноября 2008 в 1:01
Во-первых не надо искать подходящие проги. Надо писать с нуля, тем более такие тривиальные. Тем более даже в этой проге куча ошибок, в том числе элементарное несоответствие типов.
Во-вторых не надо нам здесь оффтопа, создайте новую тему
12 ноября 2008 в 22:01
ЗАдание:
Данная целочисленная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один ненулевой элемент
можите помоч с прогой..подходит ли она под написание задания
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 3
#define N 3
int main(void)
{
int matrix[M][N];
int i, j;
/* инициализируем генератор псевдослучайных чисел */
srand((unsigned)time(NULL));
/* заполняем массив псевдослучайными числами от -10 до 10 */
for (i = 0; i < M; ++i)
{
for (j = 0; j < N; ++j)
{
matrix[i][j] = (double)rand() / (RAND_MAX + 1) * 22 – 11;
printf("%4i", matrix[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < M; ++i)
{
int sum = 0;
for (j = 0; j < N; ++j)
sum += matrix[i][j];
if (0 != sum)
printf("%2i:\t%i\n", i, sum);
}
return 0;
}
12 ноября 2008 в 14:04
2Равиль NeboskrЁБ Галеев
строка = i % размер_матрицы
столбец = i mod размер_матрицы
Например поворот на 90 градусов CW
В этом случае:
1. Меняются строка и столбец
2. Элементы строки реверсируются
—————-
int x[размер_матрицы_в_квадрате];
int result[размер_матрицы_в_квадрате];
int tmp;
for (int i=0;i<размер_матрицы_в_квадрате;i++)
{
//сразу условно меняем строку со столбцом
tmp = x[i mod размер_матрицы][i % размер_матрицы];
//нумерация столбцов будем задом наперед, т.к. реверсируем элементы строки
result[i % размер_матрицы][размер_матрицы - (i mod размер_матрицы)] = tmp;
}
в массиве tmp будет перевернутая на 90 градусов CW матрица.
12 ноября 2008 в 14:04
Возможно где-то напутал, но моя цель была подать идею.
12 ноября 2008 в 9:02
напишу пока сюда, чтоб не забыть. линейная замена
[0] c=n*n-0*n-3
[1] c=n*n-1*n-4
[2] c=n*n-2*n-5
[3] c=n*n-1*n-2
[4] c=n*n-2*n-3
[5] c=n*n-3*n-4
[6] c=n*n-2*n-1
[7] c=n*n-3*n-2
[8] c=n*n-4*n-3
где с- сдвиг элемента после поворота против часовой стрелки на 90, а n- размерность матрицы
вечером еще попробую к общему виду привести
12 ноября 2008 в 3:05
Под "повернуть" имелось ввиду изменение местоположение элементов доски, т.е. из, например,
0 1 2
3 4 5
6 7 8
получилось бы
2 5 8
1 4 7
0 3 6
Вместо [3][3][9] мы, конечно, писали – это было ясно с самого начала, раз массив одномерный. Но найти закономерность в изменении положения элементов так и не смогли Есть подозрение, что элементы нужно записывать не по порядку, т.е. не в виде "0 1 2 3 4 5 6 7 8", а как-то иначе, но мысль до конца не довели
12 ноября 2008 в 2:04
//www.compgraphics.info/2D/matrix_rotate.php
Имхо отличная статья на вашу тему. Можно рассчитывать (две смежные точки) и прорисовывать каждую линию последовательно в одном цикле.
12 ноября 2008 в 2:04
upd: задача не очень ясно поставлена..вам нужно повернуть графически, или просто изменить местоположение крестиков и ноликов на доске в соответствии с поворотом? В таком случае советую похимичить с подменой главной диагонали – побочной, и реверсом порядка элементов столбца/строки.
В случае с массивом…неужели нельзя вместо x[3][3]; использовать x[9];. С индексацией будет сложнее, но, имхо это единственный способ решения вашей задачи.
12 ноября 2008 в 1:02
надо на матрицу поворота умножать