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

Переместить заданный элемент в правый верхний угол подмассива

24.10.2016, 01:08. Показов 680. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задание:
Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый верхний элемент которых лежит на побочной диагонали. В каждом таком подмассиве находится максимальный элемент. Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива. Проверить получилась ли на побочной диагонали убывающая последовательность элементов.

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

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream>
#include <conio.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
 
/*Функция заполнения массива*/
void ArrayInit(int **gnAr, int sz){
    srand(time(0));                                         
    for (int i = 0; i<sz; i++)
        for (int j = 0; j<sz; j++)
            gnAr[i][j] = rand() % (100) - 50;               //Случайное значение в очередную ячейку массива
}
 
/*Функция вывода массива*/
void ArrayOut(int **gnAr, int sz){
    for (int i = 0; i<sz; i++)
        for (int j = 0; j<sz; j++)
        {
            if (!(j%sz)) cout << endl;                  //Чтобы массив выглядел как массив
            cout <<setw(4)<< gnAr[i][j];                //Табуляция символов
        }
    cout << endl;
 
}
 
/*Функция перебора квадратных подмассивов*/
void sqrtArr(int sz, int smls, int **smlAr, int **gnAr) {
    int row = 0;                                    //Счетчик строк
    int column = 0;                                 //Счетчик столбцов
    int sc = 0;                                     //Счетчик подмассивов
    int b[15];                                      //Массив для сохранения строки с наибольшим элементом подмассива
    while (sc < sz - 1) {                               //Перебор всех подмассивов массива
        for (int i = 0; i < smls; i++) {                    //Перебор элементов строки массива
            column = sz - smls - sc;                    //Перебор начинается в правого верхнего элемента и переходит по элементам побочной диагонали
            for (int j = 0; j < smls; j++) {                //Перебор элементов столбца
                smlAr[i][j] = gnAr[row][column];
                column++;                           //Смещаемся по колоннам влево
            }
            row++;                              //Смещаемся по строкам вниз
        }
 
        int max = -50;                              //Минимальное значение элемента массива
        int crw = 0;                                //Переменная для записи строки максимального элемента
        int ccl = 0;                                    //Переменная для записи столбца максимального элемента
        for (int i = 0; i < smls; i++) {
            for (int j = 0; j < smls; j++) {
                if (smlAr[i][j] > max) {
                    max = smlAr[i][j];              //Сохраняем наибольший элемент
                    crw = i;                        //Строка с наибольшим
                    ccl = j;                        //Столбец с наибольшим
                }
            }
            if (crw > i) {                          //Если наибольший не в первой строке подмассива
                for (int j = 0; j < smls; j++)              //Сдвигаем строки
                    b[j] = smlAr[crw][j];                   //Запомним строку с наибольшим
                for (int k = crw; k > i + 1; k--)           //Сдвинем строки вниз
                    for (int j = 1; j < smls; j++)
                        smlAr[k][j] = smlAr[k - 1][j];
                for (int j = 0; j < smls; j++)              //На место первой пишем строку с наибольшим
                    smlAr[i][j] = b[j];
            }
            if (ccl < smls - i) {                       //Если наибольший не в последнем столбце подмассива
                for (int k = 0; k < smls; k++)          //Сдвигаем столбцы
                    b[k] = smlAr[k][ccl];               //Запомним столбец с наибольшим
                for (int j = ccl; j > smls - i; j--)                //Сдвинем столбцы влево
                    for (int k = 1; k < smls; k++)
                        smlAr[k][j] = smlAr[k][j + 1];
                for (int k = 0; k < smls; k++)          //На место последнего пишем столбец с наибольшим
                    smlAr[k][smls - i] = b[k];
            }
 
            
        }
        
        for (int i = 0; i < sz; i++) {                      //Перебор элементов строки массива
            column = sz - smls - sc;                    //Перебор начинается в правого верхнего элемента и переходит по элементам побочной диагонали
            for (int j = 0; j < sz; j++) {                  //Перебор элементов столбца
                gnAr[row][column] = smlAr[i][j];
                column++;                           //Смещаемся по колоннам влево
            }
            row++;                              //Смещаемся по строкам вниз
        }
        sc++;                                   //Увеличиваем счетчик подмассивов
        row--;                                  //Возвращаемся на предыдущую строку
    }
}
 
 
 
 
 
void main() {
    setlocale(LC_ALL, "Russian");
    int **generalArray;
    int **smallArray;
    int size;
    int smallSize = 2;                          //Размерность модмассива 2
    
    cout << "Задайте размерность массива:";
    cin >> size;
    generalArray = new int*[size];
    for (int i = 0; i<size; i++)
        generalArray[i] = new int[size];
    ArrayInit(generalArray, size);
    ArrayOut(generalArray, size);
 
    smallArray = new int*[smallSize];
    for (int i = 0; i < smallSize; i++)
        smallArray[i] = new int[smallSize];
    sqrtArr(size, smallSize, smallArray, generalArray);
    ArrayOut(generalArray, size);
 
    
 
        cout << endl;
 
    
    
 
 
 
    _getch();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2016, 01:08
Ответы с готовыми решениями:

Путем перестановок строк и столбцов элемент переместить в правый верхний угол подмассива (С Turbo Pascal на C++)
Можете программу преобразовать в C++?? Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый...

Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива (Перевести программу в c++)
program zadanie_5; uses crt; const nn=5; var i, j, imax, jmax, n, k, m: integer; a: array of real; r: real;...

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2016, 01:08
Помогаю со студенческими работами здесь

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

Переставляя строки и столбцы матрицы переместить наибольший элемент в верхний левый угол
Добрый вечер, есть проблемы с решением задачи, требуется помощь: дана матрица размером n на t. Переставляя ее строки и столбцы, добиться...

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

Переместить наибольший элемент матрицы в верхний левый угол путем перестановок строк и столбцов
Дана вещественная матрица размером n×m. Переставляя её строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался...

Переставляя строки и столбцы матрицы, переместить max (min) элемент в левый (правый) верхний (нижний) угол
Дана квадратная матрица порядка n*n . Переставляя её строки и столбцы, добиться того, чтобы max(min) элемент оказался в левом (правом)...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru