C++

Переписать все элементы двумерного массива в одномерный

Предлагаю для решения этой задачи организовать заполнение массива случайными числами. Это сократит время на ввод элементов двумерного массива. Вся сложность данного задания состоит в том, что каким-то образом нужно преобразовать двумерный массив в одномерный. Как это сделать? Легко!

Наша задача создать одномерный массив, в котором могут поместиться все элементы двумерного. Для этого определяем размер двумерного массива, умножаем количество строк на количество столбцов. Далее динамически выделяем память под одномерный массив. Используя несколько циклов for заполняем одномерный массив и выводим на экран.
// matrica_A.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 **arrayPtr = new int* [number_rows];
    for (int count = 0; count < number_rows; count++)
        arrayPtr[count] = new int [number_columns];
 
    for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
        {
            arrayPtr[counter_rows][counter_columns] = rand() % 100; // заполнение массива случайными числами
            cout << setw(2) << arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;
 
    int *vectorPtr = new int [number_rows * number_columns]; // создание одномерного динамического массива
    int vector_counter = 0; // переменная-индекс для одномерного массива
 
    for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
        {
            vectorPtr[vector_counter] = arrayPtr[counter_rows][counter_columns]; // записываем элементы матрицы в одномерный массив
            cout << vectorPtr[vector_counter] << "  "; // печать элементов одномерного массива
            vector_counter++; // инкремент индекса
        }
    }
 
    delete [] vectorPtr; // высвобождение памяти, отводимой под одномерный массив
 
    // удаление двумерного динамического массива
    for (int count = 0; count < number_rows; count++)
        delete []arrayPtr[count];
    cout << endl;
    system("pause");
    return 0;
}

Результат работы программы показан на рисунке 1.


Рисунок 1 - Переписать все элементы двумерного массива в одномерный
Теги:
массив
Добавлено: 28 Сентября 2013 10:58:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...