Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Gospar
2 / 0 / 1
Регистрация: 07.11.2015
Сообщений: 46
1

Поменять местами элементы матрицы

02.12.2015, 01:24. Просмотров 962. Ответов 6
Метки нет (Все метки)

В квадратном массиве выделить четыре четверти, ограниченные главной и побочной диагоналями
(без учета элементов, расположенных на диагоналях) : верхнюю, нижнюю, левую и правую.Поменять местами элементы :
а) верхней и нижней четвертей;
б) правой и левой четвертей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <ctime> //Возращает время
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n = 4;//размерность нашего массива
    int matr[n][n]; //создаем матрицу
    cout << "Исходная матрица" << endl;
    for (int i = 0; i < n; i++) //цикл от 0 до n-1. в котором на каждой итерации значение i увеличивается на 1
    {
        for (int j = 0; j < n; j++)//цикл от 0 до n-1. в котором на каждой итерации значение j увеличивается на 1
        {
            matr[i][j] = rand() % 20; //генерируем случайное число от 0 до 20 для элемента массива. чтобы быстро заполнить матрицу программно
            cout << matr[i][j] << "\t" << " "; //выводим этот элемент
        }
        cout << endl; //переход на новую строку
    }   
    
 
    system("pause");
    return 0;
}
как поменять местами четверти?
0
Миниатюры
Поменять местами элементы матрицы  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2015, 01:24
Ответы с готовыми решениями:

Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают
С++ Задана матрица A(n,n). Поменять местами элементы главной и побочной...

Поменять местами элементы матрицы
Как поменять местами минимальный элемент массива А(57) и матрицы В(7*5)

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

Поменять местами элементы матрицы
ЗАДАНИЕ ТАКОЕ: Дано: прямоугольные матрицы A и B. Поменять местами последние...

Поменять местами элементы матрицы
Работа с квадратными массивами В задаче рассматривается двумерный массив с...

6
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
02.12.2015, 03:59 2
Два раза транспонировать

Добавлено через 26 секунд
Только в одном направлении
0
Jasont
19 / 19 / 9
Регистрация: 05.02.2013
Сообщений: 76
Завершенные тесты: 2
02.12.2015, 05:57 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (i=0; i<n; i++)
for (j=0; j<i; j++)
{
    int x = matr[i][j];
    int y = matr[i][n-j-1]
    matr[i][j]=y;
    matr[i][n-j-1]=x;
}
 
for (j=0; j<n; j++)
for (i=0; i<j; i++)
{
    int x = matr[i][j];
    int y = matr[n-i-1][j]
    matr[i][j]=y;
    matr[n-i-1][j]=x;
}
0
Gospar
2 / 0 / 1
Регистрация: 07.11.2015
Сообщений: 46
02.12.2015, 16:09  [ТС] 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
include <iostream>
#include <ctime> //Возращает время
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n = 4;//размерность нашего массива
    int matr[n][n]; //создаем матрицу
    cout << "Исходная матрица" << endl;
    for (int i = 0; i < n; i++) //цикл от 0 до n-1. в котором на каждой итерации значение i увеличивается на 1
    {
        for (int j = 0; j < n; j++)//цикл от 0 до n-1. в котором на каждой итерации значение j увеличивается на 1
        {
            matr[i][j] = rand() % 20; //генерируем случайное число от 0 до 20 для элемента массива. чтобы быстро заполнить матрицу программно
            cout << matr[i][j] << "\t" << " "; //выводим этот элемент
        }
        cout << endl; //переход на новую строку
    }   
    cout << endl;
 
    for (int i = 0; i<n; i++)
        for (int j = 0; j<i; j++)
        {
            int x = matr[i][j];
            int y = matr[i][n - j - 1];
                matr[i][j] = y;
            matr[i][n - j - 1] = x;
            cout << matr[i][j] << endl;
            cout << matr[i][n - j - 1] << endl << "\t" << " ";
        }
    cout << endl;
 
    for (int j = 0; j<n; j++)
        for (int i = 0; i<j; i++)
        {
            int x = matr[i][j];
            int y = matr[n - i - 1][j];
                matr[i][j] = y;
            matr[n - i - 1][j] = x;
            cout << matr[i][j] << endl;
            cout <<  matr[n - i - 1][j] << endl << "\t" << " ";
        }
    cout << endl;
 
    system("pause");
    return 0;
}
Я походу чего то не понимаю, поясните мне наглядно с комментами
0
Gospar
2 / 0 / 1
Регистрация: 07.11.2015
Сообщений: 46
02.12.2015, 23:10  [ТС] 5
Пожалуйста народ помогите не понимаю, как решить.
В квадратном массиве выделить четыре четверти, ограниченные главной и побочной диагоналями
(без учета элементов, расположенных на диагоналях) : верхнюю, нижнюю, левую и правую.Поменять местами элементы :
а) верхней и нижней четвертей;
б) правой и левой четвертей.
0
Миниатюры
Поменять местами элементы матрицы  
Jasont
19 / 19 / 9
Регистрация: 05.02.2013
Сообщений: 76
Завершенные тесты: 2
03.12.2015, 14:22 6
Лучший ответ Сообщение было отмечено Gospar как решение

Решение

Прошу прощения, забыл добавить условие, учитывающее побочную диагональ(Условие выхода из цикла, при достижении побочной диагонали).
Сам алгоритм заключается в проходе построчно и и по столбцам всех элементов левой и верхней четвертей матрицы, не задевая главную и побочную диагональ. И замена местами этих элементов с правой и нижними четвертями. В процессе поиска ошибок слегка оптимизировал код. В 3 действия меняются сами элементы и один двойной цикл убран.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int n = 4;//размерность нашего массива
    int matr[n][n]; //создаем матрицу
    cout << "Исходная матрица" << endl;
    for (int i = 0; i < n; i++) //цикл от 0 до n-1. в котором на каждой итерации значение i увеличивается на 1
    {
        for (int j = 0; j < n; j++)//цикл от 0 до n-1. в котором на каждой итерации значение j увеличивается на 1
        {
            matr[i][j] = rand() % 20; //генерируем случайное число от 0 до 20 для элемента массива. чтобы быстро заполнить матрицу программно
            cout << matr[i][j] << "\t" << " "; //выводим этот элемент
        }
        cout << endl; //переход на новую строку
    }
    cout << endl;
    //Решение задачи в лоб. Первый двойной цикл меняет местами левую и правую четверти.
    //matr[i][j] - текущий элемент, matr[i][n-j-1] - зеркальный элемент из другой четверти. matr[i][j], где i=j - элемент главной диагонали, где j=n-i-1 - элемент побочной;
    for (int i = 0; i<n; i++)                               //В этом цикле перебираем все строки матрицы
        for (int j = 0; j<i; j++)                           //В этом цикле перебираем элементы левой четверти и меняем их зеркально с элементами правой четверти
        {                                                   //Выход из цикла при достижении главной или побочной диагонали.
            if ((i>(n - 1) / 2) && (j >= n - i - 1)) break; //Условия выхода из цикла при достижении побочной диагонали
            //int x = matr[i][j];                               
            //int y = matr[i][n - j - 1];   
            //matr[i][j] = y;
            //matr[i][n - j - 1] = x;
            int x = matr[i][j];                             
            matr[i][j] = matr[i][n - j - 1];                                        
            matr[i][n - j - 1] = x;
            x = matr[j][i];
            matr[j][i] = matr[n - j - 1][i];
            matr[n - j - 1][i] = x;
        }
    //Второй двойной цикл, который меняет верхнюю и нижнюю четверти. Заменен тремя последними строчками из предыдущего цикла
    //for (int j = 0; j<n; j++)
    //  for (int i = 0; i<j; i++)
    //  {
    //      if ((j>(n - 1) / 2) && (i >= n - j - 1)) break;
    //      int x = matr[i][j];
    //      int y = matr[n - i - 1][j];
    //      matr[i][j] = y;
    //      matr[n - i - 1][j] = x;
    //  }
 
    for (int i = 0; i < n; i++) //Вывод новой матрицы
    {
        for (int j = 0; j < n; j++)
        {
            cout << matr[i][j] << "\t" << " ";
        }
        cout << endl;
    }
    cout << endl;
    system("pause");
    return 0;
}
1
Gospar
2 / 0 / 1
Регистрация: 07.11.2015
Сообщений: 46
05.12.2015, 13:27  [ТС] 7
Спасибо! Теперь понял
0
05.12.2015, 13:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 13:27

Поменять местами угловые элементы матрицы
Здравствуйте. Помогите, пожалуйста, написать программу: Дана матрица...

Поменять местами наибольший и наименьший элементы матрицы
Прошу помощи. необходимо поменять наибольший и наименьший элементы матрицы, у...

Поменять местами максимальный и минимальный элементы матрицы
Здравствуйте. Помогите, пожалуйста, написать следующую программу: Дана матрица...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru