Вопрос задан 05.07.2023 в 15:41. Предмет Информатика. Спрашивает Николаенко Виталик.

C++ Создать функцию сортировки двумерного массива чисел с плавающей запятой размерностью NxM по

убыванию элементов. В качестве аргументов функции следует указать:• адрес исходного двумерного массива;• адрес нового двумерного массива для записи;• количество строк;• количество столбцов.В функции запрещено выделять память для последующей передачи ее в качестве возвращаемого значения. За «утечки» памяти будет снижаться балл (-1 за каждую). При возникновении грубых ошибок компиляции за попытку автоматически ставится 0 баллов.В функции main продемонстрировать работоспособность созданной функции сортировки.Вот есть код для целых чисел:#includeusing 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;}
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Вахніченко Марина.

#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);

 }

// конструкция long long(n) * m помогает избежать переполнение на байтовом уровне (из 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;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

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

cpp
#include <iostream> void sort(float** a, float** c, int n, int m) { int r = 0; float x, y; float* z = new float[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--; } } delete[] z; } int main() { int n, m; std::cout << "Введите размер массива: "; std::cin >> n >> m; float** a = new float* [n]; for (int i = 0; i < n; i++) a[i] = new float[m]; float** c = new float* [n]; for (int i = 0; i < n; i++) c[i] = new float[m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { a[i][j] = static_cast<float>(rand()) / RAND_MAX; // Заполняем случайными числами от 0 до 1 } } std::cout << "Исходный массив:" << std::endl; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { std::cout << a[i][j] << " "; } std::cout << std::endl; } sort(a, c, n, m); std::cout << "Отсортированный массив:" << std::endl; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { std::cout << c[i][j] << " "; } std::cout << std::endl; } for (int i = 0; i < n; i++) { delete[] a[i]; delete[] c[i]; } delete[] a; delete[] c; return 0; }

Обратите внимание, что в данной версии кода используются числа с плавающей запятой, и я заменил операторы сравнения, чтобы выполнить сортировку в порядке убывания.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос