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

Верно ли я отсортировал матрицу?

20.06.2021, 14:26. Показов 2012. Ответов 18
Метки с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Задание:
Задано квадратный двумерный массив (матрицу) целых чисел А[n, n]. Отсортировать побочную диагональ массива методом №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
44
45
46
47
48
49
50
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int N, n;
    cout << "N=";
    cin >> n;
 
 
    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()%9 + 1;
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
 
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (a[j][j] > a[j+1][j+1])
                swap(a[j][j], a[j+1][j+1]);
 
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (a[n-1-j][j] > a[n-2-j][j+1])
                swap(a[n-1-j][j], a[n-2-j][j+1]);
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
    system("pause");
    return 0;
}
Результат:
Верно ли я отсортировал матрицу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2021, 14:26
Ответы с готовыми решениями:

правильно ли я отсортировал правую часть и как вызвать эту сортировку?
Процедура слияния упорядоченных частей массива в буфер-промежуточный массив void merge(int a,...

Срандомил массив вывел в Edit1, в Edit2- отсортировал его, в Edit3- три крайних массива, но не работает
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

как сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

Как мне сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

18
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.06.2021, 14:44 2
Цитата Сообщение от Mag1str Посмотреть сообщение
Верно ли я отсортировал матрицу?
нет. видно же что поменялась не только побочная диагональ. кроме того блоки сортировки в коде - это не метод вставки.
0
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 14:59  [ТС] 3
Цитата Сообщение от Yetty Посмотреть сообщение
нет. видно же что поменялась не только побочная диагональ. кроме того блоки сортировки в коде - это не метод вставки.
Помогите исправить
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.06.2021, 15:18 4
Mag1str, подсказываю что Вам нужно сделать:
1) убрать блок сортировки главной диагонали
2) заменить оставшийся блок сортировки на блок сортировки вставками
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 16:02 5
Yetty, Странная задача... Что значит "отсортировать побочную диагональ"? Только ее (остальное содержимое матрицы не меняется)? Тогда копируем поб. диагональ в массив [n], сортируем и записываем обратно.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.06.2021, 16:17 6
Catstail, ничего странного не заметил диагональ сортируется непосредственно в матрице, без копирования, см код выше
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 16:19 7
Yetty, зачем тогда нужна матрица?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.06.2021, 16:52 8
Цитата Сообщение от Catstail Посмотреть сообщение
зачем тогда нужна матрица?
какой вопрос - такой ответ. матрица нужна для того, чтобы в ней отсортировать диагональ.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 17:28 9
Yetty, я имел в виду - какой смысл в такой дурацкой задаче? Чему она сможет научить? Берешь обычную сортировку вставками, и вместо обращения arr[i], пишешь matr[i,n-i]. Всё.
0
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 21:33  [ТС] 10
Цитата Сообщение от Catstail Посмотреть сообщение
Yetty, Странная задача... Что значит "отсортировать побочную диагональ"? Только ее (остальное содержимое матрицы не меняется)? Тогда копируем поб. диагональ в массив [n], сортируем и записываем обратно.
Да, только её.

Добавлено через 12 минут
Цитата Сообщение от Yetty Посмотреть сообщение
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
43
44
45
46
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n;
    cout << "N=";
    cin >> n;
 
 
    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()%9 + 1;
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
 
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (a[n-1-j][j] > a[n-2-j][j+1])
                swap(a[n-1-j][j], a[n-2-j][j+1]);
 
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
    system("pause");
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
5201 / 2918 / 1509
Регистрация: 14.12.2018
Сообщений: 5,260
Записей в блоге: 1
20.06.2021, 22:05 11
Лучший ответ Сообщение было отмечено Mag1str как решение

Решение

Mag1str, как я понимаю и переделаю ваш код, это будет:
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, i, j, key;
    cout << "n=";
    cin >> n;
 
    int** a = new int* [n];
    for (i = 0; i < n; i++)
    {
        a[i] = new int[n];
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand() % 9 + 1;
            cout << setw(2) << a[i][j];
        }
        cout << endl;
    }
    cout << endl;
 
    for (i = 1; i < n; i++)
    {
        key = a[i][n - 1 - i];
        j = i - 1;
        while (j >= 0 && a[j][n - 1 - j] < key)
        {
            a[j + 1][n - 2 - j] = a[j][n - 1 - j];
            j = j - 1;
        }
        a[j + 1][n - 2 - j] = key;
    }
 
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << setw(2) << a[i][j];
        cout << endl;
    }
 
    for (i = 0; i < n; i++)
        delete[] a[i];
    delete[] a;
    system("pause");
    return 0;
}
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 22:10 12
Mag1str, вот, чистейшая сортировка вставками:

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
#include <iostream>
 
using namespace std;
 
void isort(int **arr, int n) // Сортировка вставками
{
    int i,j,x;
    
    for (i=1; i<n; i++)
    {
        x=arr[i][n-i-1];
        j=i;
        
        while ((j>0) && (arr[j-1][n-j]>x)) 
        {
            arr[j][n-j-1]=arr[j-1][n-j]; j--;
        }
        
        arr[j][n-j-1]=x;
        
    }    
}
 
int main()
{
    srand((int)time(0));
    int N, n;
    cout << "N=";
    cin >> n;
 
 
    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()%9 + 1;
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
    
    isort(a,n);
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;    
 
    return 0;
}
1
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 22:14  [ТС] 13
Цитата Сообщение от Catstail Посмотреть сообщение
Mag1str, вот, чистейшая сортировка вставками:
Сортировка по уменьшению, нужно по увеличению.
Верно ли я отсортировал матрицу?
0
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 22:15  [ТС] 14
Цитата Сообщение от Volga_ Посмотреть сообщение
Mag1str, как я понимаю и переделаю ваш код, это будет:
Я так понимаю это методом вставки?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 22:16 15
Лучший ответ Сообщение было отмечено Mag1str как решение

Решение

Mag1str, ты даже это сообразить не в состоянии? Ну вот:

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
#include <iostream>
 
using namespace std;
 
void isort(int **arr, int n)
{
    int i,j,x;
    
    for (i=1; i<n; i++)
    {
        x=arr[i][n-i-1];
        j=i;
        
        while ((j>0) && (arr[j-1][n-j]<x))   // вот здесь галка - в другую сторону...
        {
            arr[j][n-j-1]=arr[j-1][n-j]; j--;
        }
        
        arr[j][n-j-1]=x;
        
    }    
}
 
int main()
{
    srand((int)time(0));
    int n;
    cout << "n=";
    cin >> n;
 
 
    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()%9 + 1;
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
    
    isort(a,n);
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;    
 
    return 0;
}
2
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 22:17  [ТС] 16
Цитата Сообщение от Catstail Посмотреть сообщение
Mag1str, ты даже это сообразить не в состоянии? Ну вот:
Питон учу, а не плюсы)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
20.06.2021, 22:19 17
Цитата Сообщение от Mag1str Посмотреть сообщение
Питон учу, а не плюсы)
- подозреваю, что и "питонишь" ты в таком же стиле... При чем здесь язык? Вопрос-то алгоритмический.
1
4 / 4 / 0
Регистрация: 08.12.2020
Сообщений: 60
20.06.2021, 22:21  [ТС] 18
Catstail, лайк
1
Модератор
Эксперт CЭксперт С++
5201 / 2918 / 1509
Регистрация: 14.12.2018
Сообщений: 5,260
Записей в блоге: 1
20.06.2021, 22:21 19
Цитата Сообщение от Mag1str Посмотреть сообщение
Я так понимаю это методом вставки?
Конечно да !
1
20.06.2021, 22:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2021, 22:21
Помогаю со студенческими работами здесь

ДМ. Логически доказать равенство; и что вложение верно, а обратное не верно; построить формулу
Здравствуйте, я понимаю, что тут не любители отвечать очередному Васе Пупкину. Но всё-же, буду...

Даны три числа a,b,c . Выяснить, верно ли, что a<b<c. Ответ получить в текстовой форме: верно или неверно
Даны три числа a,b,c . Выяснить, верно ли, что a&lt;b&lt;c. Ответ получить в текстовой форме: верно или...

Выяснить, верно ли, что |a1b2-a2b1|>=00001, и если верно, то найти решение системы линейных уравнений
Даны действительные числа а1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1b2-a2b1|&gt;=0.0001, и...

Выяснить, верно ли, что |a1b2 - a2b1| ≥ 0.0001, и если верно то найти решение уравнения a1x+b1y+c1=0 ; a2x+b2y+c2=0
Первое условие я сделал, осталось сделать уравнение. Но я не знаю как решить уравнение с двумя...

Если маршрутизатор настроен верно и у отправителя в сетевых настройках верно указан айпи адр шлюза, это значит, что паке
Можете подсказать? Если маршрутизатор настроен верно и у отправителя в сетевых настройках верно...

Если выбрано не верно, то вывести ошибку, если верно оставить (Тест)
procedure TForm1.Button1Click(Sender: TObject); var buf:string; i:integer; begin if...


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

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