Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик.
Читаем статью на сайте — как работать с массивами. После создания массива, его необходимо заполнить случайными числами, а для этого нужно воспользоваться генератором случайных чисел. Результат работы программы показан ниже:
// Column_integer.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main(int argc, char* argv[])
{
srand(time(NULL));
setlocale(LC_ALL, "rus");
int number_rows,// строки
number_columns; // столбцы
cout << "Введите количество строк матрицы: ";
cin >> number_rows;
cout << "Введите количество столбцов матрицы: ";
cin >> number_columns;
// динамическое создание двумерного массива для хранения сгенерированных чисел
int **ptrarray = new int* [number_rows];
for (int count = 0; count < number_rows; count++)
ptrarray[count] = new int [number_columns];
cout << "nИсходный массив:n";
for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
{
for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
{
ptrarray[counter_rows][counter_columns] = rand() % 100 - rand() % 100; // заполнение массива случайными числами
cout << setw(3) << ptrarray[counter_rows][counter_columns] << " "; // вывод на экран двумерного массива
}
cout << endl;
}
cout << endl;
int *ptrsum = new int [number_columns]; // массив характеристик столбцов
for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
{
ptrsum[counter_columns] = 0; // обнуляем элементы массива характеристик столбцов
for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
if ( (ptrarray[counter_rows][counter_columns] < 0)/*отрицательное число*/ && ((ptrarray[counter_rows][counter_columns] % 2 != 0))/*нечётное*/ )
ptrsum[counter_columns] += abs(ptrarray[counter_rows][counter_columns]); // сумма элементов столбца матрицы
}
cout << "nМассив характеристик:n";
for ( int counter = 0; counter < number_columns; counter++)
cout << setw(3) << ptrsum[counter] << " "; // печать характеристик массива
cout << endl << endl;
int *ptrindex = new int [number_columns]; // массив индексов, для формирования порядка перестановок столбцов
int min = 1000, // переменная для упорядочивания характеристик массива по возрастанию
index_column; // переменная для хранения индекса минимальной характеристики
// формируем порядок перестановки столбцов
for (int counter_value = 0; counter_value < number_columns; counter_value++)
{
for (int counter = 0; counter < number_columns; counter++)
{
if (min > ptrsum[counter] && ptrsum[counter] != -1)
{
min = ptrsum[counter]; // поиск минимального
index_column = counter; // запоминаем номер столбца
}
}
ptrindex[counter_value] = index_column; // сохраняем индекс столбца в массив индексов
ptrsum[index_column] = -1; // исключаем из поиска данный элемент массива
min = 1000; // увеличиваем минимум
}
delete [] ptrsum; // удаляем массив характеристик столбцов
// динамическое создание двумерного массива для перестановок столбцов согласно возрастанию характеристик
int **ptrarray_relocation = new int* [number_rows];
for (int count = 0; count < number_rows; count++)
ptrarray_relocation[count] = new int [number_columns];
// выполняем перестановку столбцов
for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
ptrarray_relocation[counter_rows][counter_columns] = ptrarray[counter_rows][ptrindex[counter_columns]]; // перестановка столбцов
// вывод массива, с перестановленными столбцами, на экран
cout << "nМассив после перестановок столбцов:n";
for (int counter_rows= 0; counter_rows < number_rows; counter_rows++)
{
for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
{
cout << setw(3) << ptrarray_relocation[counter_rows][counter_columns] << " ";
}
cout << endl;
}
cout << endl;
// удаление двумерного динамического массива ptrarray
for (int count = 0; count < number_rows; count++)
delete []ptrarray[count];
delete [] ptrindex; // удаление массива индексов характеристик
// удаление двумерного динамического массива ptrarray_relocation
for (int count = 0; count < number_rows; count++)
delete []ptrarray_relocation[count];
system("pause");
return 0;
}
CppStudio.com
Введите количество строк матрицы: 5 Введите количество столбцов матрицы: 9 nИсходный массив:n-40 91 35 -35 -55 -33 -57 -43 -6 -41 1 -9 6 -10 49 17 -26 -22 51 -15 8 23 56 50 39 77 -52 42 -39 -45 -4 67 34 33 -64 30 -26 -2 34 -22 -47 66 27 53 -10 nМассив характеристик:n 41 54 54 35 102 33 57 43 0 nМассив после перестановок столбцов:n -6 -33 -35 -40 -43 91 35 -57 -55 -22 49 6 -41 -26 1 -9 17 -10 -52 50 23 51 77 -15 8 39 56 30 34 -4 42 -64 -39 -45 33 67 -10 66 -22 -26 53 -2 34 27 -47
Комментарии
petruska
непонятное задание((