singlepost

Поворот матрицы << На главную или назад  

Добрый вечер :-) Задали задачу – повернуть доску для крестиков-ноликов на угол, кратный 90*, т.е. на 180*, 270* и т.п. Все дело в том, что нужно использовать один одномерный массив и, соответственно, один цикл. Бьемся неделю :-( Заранее спасибо за любую помощь! :-)

9 ответов в теме “Поворот матрицы”

  1. 9
    Андрей Мельников ответил:

    Во-первых не надо искать подходящие проги. Надо писать с нуля, тем более такие тривиальные. Тем более даже в этой проге куча ошибок, в том числе элементарное несоответствие типов.
    Во-вторых не надо нам здесь оффтопа, создайте новую тему

  2. 8
    Женя Яцун ответил:

    ЗАдание:

    Данная целочисленная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один ненулевой элемент

    можите помоч с прогой..подходит ли она под написание задания

    #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;
    }

  3. 7
    Андрей Мельников ответил:

    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 матрица.

  4. 6
    Андрей Мельников ответил:

    Возможно где-то напутал, но моя цель была подать идею.

  5. 5
    Владимир Голодников ответил:

    напишу пока сюда, чтоб не забыть. линейная замена
    [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- размерность матрицы
    вечером еще попробую к общему виду привести

  6. 4
    Равиль Галеев ответил:

    Под "повернуть" имелось ввиду изменение местоположение элементов доски, т.е. из, например,
    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", а как-то иначе, но мысль до конца не довели

  7. 3
    Андрей Мельников ответил:

    //www.compgraphics.info/2D/matrix_rotate.php

    Имхо отличная статья на вашу тему. Можно рассчитывать (две смежные точки) и прорисовывать каждую линию последовательно в одном цикле.

  8. 2
    Андрей Мельников ответил:

    upd: задача не очень ясно поставлена..вам нужно повернуть графически, или просто изменить местоположение крестиков и ноликов на доске в соответствии с поворотом? В таком случае советую похимичить с подменой главной диагонали – побочной, и реверсом порядка элементов столбца/строки.

    В случае с массивом…неужели нельзя вместо x[3][3]; использовать x[9];. С индексацией будет сложнее, но, имхо это единственный способ решения вашей задачи.

  9. 1
    Юран Кербицков ответил:

    надо на матрицу поворота умножать

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.