Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
1

Поменять местами диагонали квадратной матрицы

30.05.2019, 21:44. Показов 5355. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я уже не знаю что делать, сколько вариантов не перепробовал, целиком составить код так и не вышло. Задача заключается в следующем:
Миниатюры
Поменять местами диагонали квадратной матрицы  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2019, 21:44
Ответы с готовыми решениями:

Поменять местами диагонали квадратной матрицы
Написать функцию, которая меняет местами диагонали квадратной матрицы. Написать программу, которая...

Поменять местами элементы квадратной матрицы относительно главной диагонали
Создать массив A(nxn). Поменять местами элементы симметрично главной диагонали.

Поменять местами элементы квадратной матрицы, которые симметричны побочной диагонали
Поменять местами элементы квадратной матрицы, которые симметричны побочной диагонали. Составить...

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

18
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
31.05.2019, 01:15  [ТС] 2
Написать функцию , которая меняет местами диагонали квадратной матрицы. Написать программу которая описывает два двумерных массива:
«А» - размерностью 5*5;
«В» - размерностью 3*3;
Инициализировав последний массив значениями 5, 3, 7, -4, -8, -1, 6, 7, 3, а первый вывести с помощью генератора случайных чисел. Вывести образованные массивы на экранную форму. Применить к обоим массивам указательную функцию и вывести результаты на экран.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
31.05.2019, 08:53 3
Поменять местами диагонали квадратной матрицы
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
31.05.2019, 09:44  [ТС] 4
zss, Вы не понимаете о чем я, менять местами диоганали я тоже умею но все это склеить воедино у меня не получается, поэтому я обращаюсь к вам.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
31.05.2019, 10:22 5
Цитата Сообщение от Looney_Ganno Посмотреть сообщение
сколько вариантов не перепробовал
Посмотрите на правило 4.7 и покажите один из ваших вариантов.

Добавлено через 1 минуту
Цитата Сообщение от Looney_Ganno Посмотреть сообщение
Вы не понимаете о чем я,
Это, кстати, поможет нам лучше понять, "о чем это вы"
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
31.05.2019, 10:34  [ТС] 6
Байт, ладно, я Вас понял, у меня нету времени правила читать, помогать Вы не хотите, спасибо конечно, но увы, ясно вс
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
31.05.2019, 13:03 7
Цитата Сообщение от Looney_Ganno Посмотреть сообщение
у меня нету времени правила читать
Понимаю. Попробую вам помочь.
Как можно более полно описывайте суть проблемы или вопроса, что было сделано для ее решения и какие результаты получены.
Надеюсь, прочтение этих двух строк не займет у вас много времени.

И поймите меня правильно. Тратить время на решение того, что вам и так уже известно, трата времени уж совсем пустая, вы не находите?
Цитата Сообщение от Looney_Ganno Посмотреть сообщение
менять местами диАгОнали я тоже умею
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
31.05.2019, 16:28  [ТС] 8
Байт, Действительно, много времени это не займет, сейчас я все опишу, только "не зачет" я уже получил. Я написал программу которая меняла местами диагонали матрицы, но я не умею пользоваться подпрограммами, и не понимаю как и где их правильно вызывать, поэтому не справился с задачей. Т.е. я мог в отдельной программе поменять местами диагонали одного массива. А сделать это с двумя с помощью void у меня не вышло, и я на протяжении долгого времени просил о помощи тут, однако не успел получить её, теперь понятия не имею как попаду на след. курс
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
01.06.2019, 09:06  [ТС] 9
Байт, мне дали возможность перед экзаменом пересдать эту задачу. На счет основы для кода:
1) Свап диагоналей:
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
#include "pch.h"
#include <iostream>
using namespace std;
 
 
 
int main()
{
    const int n = 3;
    int a[n][n], i,j ;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < n; j++) {
            cout << "a[" << i +1<<","<<  j+1<<"]= ";
            cin >> a[i][j];
        }
    }
    cout << "\n";
    cout << "Ishodny massiv:"<<endl;
 
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cout << a[i][j]<<"  ";
        }
        cout << "\n";
    }   cout << "\n";
 
    for ( i = 0; i < n; i++)
    {
        int t = a[i][i];
        a[i][i] = a[i][n - i - 1];
        a[i][n - i - 1] = t;
    }
 
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cout << a[i][j] << "  ";
        }
        cout << "\n";
    }   cout << "\n";
 
    system("pause");
    return 0;
}
2)Заполнение массивов:
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
#include "pch.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
 
 
int main()
{
    srand(time(NULL));
    const int n = 5, m = 3;
    int i, j, a[n][n], b[m][m] = {5,3,7,-4,-8,-1,6,7,3};
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            a[i][j] = 1+rand()%9;
        }
    }cout << "\n";
    cout << "Pervi massiv:" << endl;
     
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cout << a[i][j] << "  ";
        }
        cout << "\n";
    }   cout << "\n";
 
 
    cout << "Vtoroi massiv:" << endl;
 
    for (i = 0; i < m; i++) {
        for (j = 0; j < m; j++) {
            cout << b[i][j] << "  ";
        }
        cout << "\n";
    }   cout << "\n";
 
 
 
    system("pause");
    return 0;
}
Я понятия не имею чем это поможет если там не используется никакой void SwapDioganali(int итд итп). Но я не умею пользоваться подпрограммами (пока что), поэтому обращался к Вам.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.06.2019, 10:13 10
Лучший ответ Сообщение было отмечено Looney_Ganno как решение

Решение

Looney_Ganno, Так как массивы разной размерности, придется воспользоваться динамическим их представлением
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
//Создание массива
int **CreateM(int n) 
{  int **mas = new *int[n];
   for(int i=0; i<n; i++)
      mas[i] = new int[n];
   return mas;
}
// Вывод массива
void OutM(int **m, int n)
{
   for(int i=0; i<n; i++) {
      for(int j=0; j<n; j++)
          cout << m[i][j];
      cout << endl;
   }
}
void SwapD(int **m, int n) // Обмен диагоналей
{
    for(int i=0; i<n; i++) {
      int t = m[i][i];
      m[i][i] = m[i][n-i-1];
      m[i][n-i-1] = t;
    }
}
// в основной программе это будет выглядеть так
int main()
{
  int **b = CreateM(3);
  int **a = CreateM(5);
// Инициализация a
  int  x[9] = {5,3,7,-4,-8,-1,6,7,3};
  for(int i=0; i<9; i++)
    a[i%3][i/3] = x[i];
// Инициализация b
  for(int i=0; i<25; i++)
    b[i%5][i/5] = rand()%100;
// ВЫвод
   OutM(b,3);
   OutM(a,5);
   SwapM(b,3);  // омен диагоналей
   SwapM(a,5);
   OutM(b,3);  // Вывод результата
   OutM(a,5);
   return 0;
}
Вот как-то так. Не проверял, возможны ошибки и описки (см.подпись)
Если что будет непонятно - спрашивай.

Добавлено через 6 минут
Looney_Ganno, собственно, требуемая в задании функция перестановки диагоналей это - SwapD.
А вообще функции и подпрограммы - мощнейший и необходимый инструмент любого языка. Собственно, без них никакого бы программирования не было.
1
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
01.06.2019, 10:17  [ТС] 11
Байт, спасибо за помощь. Да я понимаю что подпрограммы важное но с Паскаля я недавно перешел на с++, поэтому пока учусь. Я не знаю какие заголовки надо туда вставлять, у меня ошибки выдает разные
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
01.06.2019, 10:20  [ТС] 12
Вот:
Миниатюры
Поменять местами диагонали квадратной матрицы  
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.06.2019, 10:38 13
Looney_Ganno, Да. В строчках 40-41 надо SwapD вместо SwapM
Что касается строчки 10, скорее всего, я напутал. Дело в том, что я всегда выделяю память с помощью malloc. Но это в стиле Си, а не плюсов. Могут быть недоразумения. Создай тему - "Как выделяется в С++ память для двумерного массива" или поищи по форуму.
Кстати, нашел у себя маленькую ошибочку. индексы при заполнении массива (строчки 33,36) индексы должны стоять наоборот
a[i/3][i%3]
b[i/5][i%5]
А то я заполняю матрицу по столбцам, а положено - по строкам.

Добавлено через 1 минуту
вот Поменять местами диагонали квадратной матрицы похожая тема, но там тоже через malloc

Добавлено через 3 минуты
Ага! Строка 10 должна быть такой
C++
1
int **mas = new int*[n];
1
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
01.06.2019, 12:09  [ТС] 14
Байт, Хорошо, спасибо, сейчас буду пробовать
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
01.06.2019, 19:00  [ТС] 15
Байт, Как выделяется память для двумерного массива?
0
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
04.06.2019, 15:39  [ТС] 16
Байт, короче, это ужас, как не крути не могу сделать так что бы задача работала, я не разбираюсь в чужом коде, я не знаю, вы можете пожалуйста целиком дать код? Если нет так и скажите, просто как не верчу, как не кручу, я не понимаю ничего из вашего кода, и не вижу в нем хоть кусочек моего, там даже массив называется "m", когда я назвал его "a", просто не могу исправить эти постоянно вылезающие ошибки, что мне делать?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
04.06.2019, 23:14 17
Цитата Сообщение от Looney_Ganno Посмотреть сообщение
Если нет так и скажите,
Так и говорю. Не могу. Простите.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.06.2019, 00:13 18
Лучший ответ Сообщение было отмечено Looney_Ganno как решение

Решение

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
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std; 
 
void SwapD (int **x, int N)
{
    for (int i = 0; i < N; i++)
    {
        int t=x[i][i];
        x[i][i]=x[i][N-i-1];
        x[i][N-i-1]=t;
    }
}
 
void Print (int **x, int N)
{
    for (int i = 0; i < N; i++) 
    {
        for (int j = 0; j < N; j++) 
            cout << setw(2) << x[i][j] << "  ";        
        cout << "\n";
    }
}
 
int main()
{
    srand((int)time(0));   
    int n=5, m=3, p=0;    
    
      int **A = new int*[n];
    for (int i = 0; i < n; i++)
         A[i]=new int[n];
         
    for (int i = 0; i < n; i++)     
    for (int j = 0; j < n; j++) 
        A[i][j]=rand()%19-9; 
        
      int **B = new int*[m];
    for (int i = 0; i < m; i++)
         B[i]=new int[m];
         
    int C [9] = {5, 3, 7, -4, -8, -1, 6, 7, 3};        
         
    for (int i = 0; i < m; i++)     
    for (int j = 0; j < m; j++)    
        B[i][j]=C[p++];   
    
    cout << "Matrix A:\n";
    Print (A,n);
    cout << "Matrix B:\n";
    Print (B,m);
    SwapD(A,n);
    cout << "Modified matrix A:\n";
    Print (A,n);
    SwapD(B,m);
    cout << "Modified matrix B:\n";
    Print (B,m);
    
    for (int i = 0; i < n; i++)
    delete[]A[i];
    delete[]A;
    for (int i = 0; i < m; i++)
    delete[]B[i];
    delete[]B;
system("pause");
return 0;
}
2
1 / 1 / 0
Регистрация: 17.05.2018
Сообщений: 66
05.06.2019, 00:38  [ТС] 19
Yetty, спасибо большое за помощь.
0
05.06.2019, 00:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2019, 00:38
Помогаю со студенческими работами здесь

Поменять местами диагонали квадратной матрицы размером MxM, которая заполняется с клавиатуры
Поменять местами диагонали квадратной матрицы размером MxM, которая заполняется с клавиатуры.

Поменять местами столбец L и строку K местами квадратной матрицы 4х4
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; #define N 4 #define M 4 int...

В заданной квадратной матрице поменять местами элементы, стоящие на главной и побочной диагонали
Добрый день ! Помогите пожалуйста с задачей,очень нужно! (С++) Дана матрицы А(3,3). В матрице...

Максимум главной диагонали матрицы поменять местами с минимумом ее побочной диагонали
Дана квадратная матрица порядка n. Если в главной диагонали имеется хотя бы одно отрицательное...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru