C++

Матрица, главные диагонали

Заполнить матрицу A размерности n*m случайными числами. Переписать в массив B элементы aii первой главной диагонали матрицы A, в массив C - элементы другой главной диагонали матрицы A. Полученные массивы вывести на экран в виде таблицы из трех колонок.
Если захотите сделать программу более изящной воспользуйтесь статьей — динамические массивы. В конце программы не забываем освобождать память под выделенные массивы.
// matrix_a.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
int main(int argc, char* argv[])
{
    srand(time(0)); // генерация случайных чисел
    cout << "Enter the number of rows: "; // введите количество строк
    int rows_number = 0;
    cin >> rows_number;
    cout << "Enter the number of columns: "; // введите количество столбцов
    int columns_number = 0;
    cin >> columns_number;
 
    // динамическое создание двумерного массива вещественных чисел на десять элементов
    int **ptrarray_a = new int* [rows_number]; // строки в массиве
    for (int count = 0; count < rows_number; count++)
        ptrarray_a[count] = new int [columns_number]; // столбцы
    // заполнение массива
    for (int count_row = 0; count_row < rows_number; count_row++)
        for (int count_column = 0; count_column < columns_number; count_column++)
            ptrarray_a[count_row][count_column] = rand() % 10 + 1; //заполнение массива случайными числами с масштабированием от 1 до 10
 
    for (int count_row = 0; count_row < rows_number; count_row++)
    {
        for (int count_column = 0; count_column < columns_number; count_column++)
            cout << setw(2) << ptrarray_a[count_row][count_column] << " "; //вывод массива
     cout << endl;
    }
 
    int b_size_array =0; // переменная хранящая размер массивов B и С
    rows_number < columns_number ? b_size_array = rows_number : b_size_array = columns_number; // определяем размер одномерных массиво В и С
    int *ptrarray_b = new int [b_size_array];
    int *ptrarray_c = new int [b_size_array];
    for (int counter = 0; counter < b_size_array; counter++)
    {
     ptrarray_b[counter] = ptrarray_a[counter][counter];// переписать в массив B элементы aii главной диагонали матрицы A
     ptrarray_c[counter] = ptrarray_a[counter][b_size_array - 1 - counter]; // переписать в массив C элементы второй главной диагонали матрицы A
    }
 
    // вывод трёх столбцов
    cout << endl;
    int count_column_a = 0, count_rows_b = 0, out_counter= 0; // вспомогательные переменны для вывода
    for (int count_row = 0; count_row < (columns_number*rows_number); count_row++)
    {
            cout << setw(4) << ptrarray_a[count_rows_b][count_column_a] << "   ";
            count_column_a++;
            if (count_column_a == columns_number)
            {
                count_column_a = 0;
                count_rows_b++;
            }
            if (out_counter <= (b_size_array - 1))
            {
             cout << ptrarray_b[count_row] << " " << setw(4) << ptrarray_c[count_row] << " ";
             out_counter++;
            }
     cout << endl;
    }
 
    delete [] ptrarray_b; // высвобождение памяти массива B
    delete [] ptrarray_c; // высвобождение памяти массива C
    // удаление двумерного динамического массива
    for (int count = 0; count < 2; count++)
        delete []ptrarray_a[count];
    system("pause");
    return 0;
}

Итак, программа генерирует случайные числа в диапазоне [1;10] и заполняет ими двумерный массив, после чего выводит его на экран. Массивы B и С заполняются элементами главных диагоналей, после этого все три массива выводятся на экран в три столбца (см. Рисунок 1). Все используемые в программе массивы объявлены динамически, что соответствует хорошему тону программирования.
Теги:
Матрица, главные диагонали
Добавлено: 11 Апреля 2018 10:18:24 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...