Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2021, 15:43   #1
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию сортировка двумерного массива

мне нужно написать код который сначала создает матрицу,а потом обнуляет элементы,которые выше побочной диагонали,а элементы которые ниже(включая саму диагональ) упорядочивает по возрастанию по столбцам с помощью максимального элемента,то есть сначала находим максимальный элемент,меняем его местами с последним,потом находим еще раз максимальный,не учитывая последний элемент и меняем с предпоследним и по аналогии.
Например:
исходная матрица:
2 6 9 7 2
3 5 2 8 4
0 3 7 2 1
9 4 3 8 2
6 1 0 5 7

измененная матрица:
0 0 0 0 1
0 0 0 2 2
0 0 0 5 2
0 1 7 8 4
9 4 3 8 7
вот мой код,который работает правильно, но не таким способом которым мне нужно(нужно изменить код с 30 по 34 строчку)
Код:
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(0));
const int n = 5;
int array[n][n];
 
std::cout « "Матрица: " « std::endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
{
std::cout « std::setw(5) « (array[i][j] = rand() % 25);
 
}
std::cout « std::endl;
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (i + j < n - 1)
array[i][j] = 0;
}
}
 
for (int l = 0; l < n; l++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (array[i][l] < array[j][l])
std::swap(array[i][l], array[j][l]);
 
std::cout « "Матрица: " « std::endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
std::cout « std::setw(5) « array[i][j];
std::cout « std::endl;
}
 
return 0;
Artur221 вне форума Ответить с цитированием
Старый 25.10.2021, 16:11   #2
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

попробовал переделать фрагмент с 30 по 34 строчку,но получилась какая-то дичь:
for (int l = 0; l < n; l++)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
max = array[i][l];
if (array[j][l] > array[i][l])
max = array[j][l];
}
std::swap(max, array[n - 1 - i][l]);
}
Artur221 вне форума Ответить с цитированием
Старый 26.10.2021, 10:21   #3
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

кто-нибудь может подсказать как можно исправить?
Artur221 вне форума Ответить с цитированием
Старый 26.10.2021, 12:35   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Не творите дичь, а начните делать в лоб: где у вас обнуление? почему у вас индексы массивов по всей матрице, если надо под диагональю?
ForenLi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите доделать программу Artur221 Общие вопросы C/C++ 2 23.03.2021 21:40
Помогите доделать программу Artur221 Общие вопросы C/C++ 1 23.03.2021 15:34
Помогите доделать программу V-alterman Общие вопросы по Java, Java SE, Kotlin 4 19.11.2014 17:12
помогите доделать программу на С anshelika Общие вопросы C/C++ 0 03.01.2014 20:10