C++ Создать функцию сортировки двумерного массива чисел с плавающей запятой размерностью NxM по убыванию элементов. В качестве аргументов функции следует указать:
• адрес исходного двумерного массива;
• адрес нового двумерного массива для записи;
• количество строк;
• количество столбцов.
В функции запрещено выделять память для последующей передачи ее в качестве возвращаемого значения. За «утечки» памяти будет снижаться балл (-1 за каждую). При возникновении грубых ошибок компиляции за попытку автоматически ставится 0 баллов.
В функции main продемонстрировать работо созданной функции сортировки.
Вот есть код для целых чисел:
#include
using namespace std;
void sort(int** a, int** c, int n, int m) //функция сортировки
{
int r = 0;
int x, y;
int* z = new int[n * m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
z[r] = a[j][i];
r++;
}
}
for (int i = n * m - 1; i >= 0; i--) {
x = 1;
for (int j = 0; j < i; j++) {
if (z[j] > z[j + 1]) {
y = z[j];
z[j] = z[j + 1];
z[j + 1] = y;
x = 0;
}
}
if (x == 1)
break; //выход из цикла
}
r--;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
c[i][j] = z[r];
r--;
}
}
}
int main() {
setlocale(LC_ALL, "Russian");
int n, m;
cout << "Введите размер массива ";//ввод размеров массив
cin >> n >> m;
int** a = new int* [n];
for (int i = 0; i < n; i++)
a[i] = new int[m];
int** c = new int* [n];
for (int i = 0; i < n; i++)
c[i] = new int[m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
a[i][j] = ((rand() % 10));
//изначальный рандомный массив
cout << "array" << endl << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout << a[i][j] << " ";
cout << endl;
}
sort(a, c, n, m);
//сортированный массив
cout << "sorted_array" << endl << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout << c[i][j] << " ";
cout << endl;
}
cout << endl;
//очистка памяти а
for (int i = 0; i < n; i++)
delete[] a[i];
delete[] a;
for (int i = 0; i < n; i++)
//очистка памяти с
delete[] c[i];
delete[] c;
}
Ответы на вопрос:
#include <iostream>
#include <time.h> // для time()
//функция сортировки
void sort(double** _base_mas, double** _copy_mas, int n, int m)
{
// копируем из базового в под запись
for (long long jjj = 0; jjj < long long(n) * m; jjj++)
*(*(_copy_mas + jjj / n) + jjj % n) = *(*(_base_mas + jjj / n) + jjj % n);
// сортируем
for (long long kkk = 0; kkk < long long(n) * m; kkk++)
for (long long jjj = 1; jjj < long long(n) * m; jjj++) {
double& first = *(*(_copy_mas + (jjj - 1) / n) + (jjj - 1) % n);
double& second = *(*(_copy_mas + jjj / n) + jjj % n);
if (first < second) std::swap(first, second);
}
// конструкция избежать переполнение на байтовом уровне (из 4 в 8)
}
int main() {
srand(time(0));
int n;
int m;
std::cout << "Enter length: ";
std::cin >> n;
std::cout << "Enter height: ";
std::cin >> m;
double** base_mas = new double* [m]; // исходный массив
double** copy_mas = new double* [m]; // массив под запись
std::cout << "befor:" << std::endl;
for (int jjj = 0; jjj < m; jjj++) {
base_mas[jjj] = new double[n];
copy_mas[jjj] = new double[n];
// заполняем исходный массив случайными числами и выводим в консоль
for (int kkk = 0; kkk < n; kkk++)
{
base_mas[jjj][kkk] = rand() % 101;
std::cout << base_mas[jjj][kkk] << '\t';
}
std::cout << std::endl;
}
// сортируем
sort(base_mas, copy_mas, n, m);
// выводим результат
std::cout<<"\nafter:" << std::endl;
for (int jjj = 0; jjj < m; jjj++) {
for (int kkk = 0; kkk < n; kkk++) {
std::cout << copy_mas[jjj][kkk] << '\t';
}
std::cout << std::endl;
}
// овобождаем память (хотя т.к конец программы делать не обязательно)
for (int jjj = 0; jjj < m; jjj++) {
delete[] base_mas[jjj];
delete[] copy_mas[jjj];
}
delete[] base_mas;
delete[] copy_mas;
}
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
romkagamernumbp0bv1q04.04.2020 15:24
-
ColyaBRO30.09.2021 08:10
-
НастЮхАforever17.02.2022 12:24
-
Elenka927216.07.2021 05:40
-
РашеваГулим18.08.2022 06:00
-
mrscom12.03.2021 13:49
-
somovalelyЛеля1501.09.2021 20:04
-
fty354y424.03.2022 15:09
-
КОте200405.06.2021 04:11
-
Harebin06.01.2023 08:56
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.