Вопрос № 102211: здравствуйте уважаемые эксперты. посоветуйте как заносить данные в динамический массив с клавиатуры для данной программы...
Вопрос № 102.211
здравствуйте уважаемые эксперты. посоветуйте как заносить данные в динамический массив с клавиатуры для данной программы
Приложение:
Отправлен: 16.09.2007, 13:38
Вопрос задал: BosS18 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Rockie
Здравствуйте, BosS18!
Как понимаю вы хотите создать двумерный массив. Тогда необходимо сначала выделить память под указатели (на строки), а потом на сами строки. То есть в памяти будет нечто вроде:
Код в приложении, вывод массива на экран вынесен в отдельную функцию, по коммаентариям думаю должно быть все понятно.
Приложение:
Ответ отправил: Rockie (статус: 4-ый класс)
Ответ отправлен: 16.09.2007, 14:56 Оценка за ответ: 5 Комментарий оценки: отличный ответ листинг понятно закомментирован
Отвечает: Aristos
Здравствуйте, BosS18!
Для представления матрицы в виде динамического массива можно пользоваться 2мя способами.
Сделать динамический двумерный массив или использовать одномерный массив. Ниже приведены способы создания, использования и удаления массивов:
Rows и Сols - количество строк и столбцов. Элементы имеют тип int;
1)
Создаем массив строк, а затем для каждой строки массив элементов по числу столбцов
int** matrix = new int[Rows];
for (int r = 0; r < Rows; r++)
{
matrix[r] = new int[Cols];
}
Теперь присвоим значение элементу в 3й строке, в 5 колонке. Столбцы и строки начинаются с 0.
matrix[2][4] = 6;
Для удаления такой матрицы сначало необходимо удалить массивы под каждую строку, а затем массив строк
for (int r = 0; r < Rows; r++)
{
delete[] matrix[r];
}
delete[] matrix;
2)
Вычислим размер массива элементов матрицы
int n = Rows*Cols;
Создание массива элементов
int* matrix = new int[n];
Элементы матрицы расположены в массиве построчно. Например, марица следующего вида:
2 -3 -1
5 3 4
будет храниться как {2, -3, -1, 5, 3, 4}.
Для обращения к элементу матрицы необходимо вычислить его инждекс в массиве. Присвоим значение элементу 3й строки и 5 столбца (индексация с 0):
matrix[2*Cols + 4] = 6;
То есть искомый элемент будет расположен после 2х первых строк и после 4х элементов 3й строки.
Для удаления матрицы удалим массив элементов:
delete[] matrix;
Итак отличия в использовании двух способов представления состоят в следующем
- для создания и удаления димнамического двумерного массива требудется больше действий, чем для простого массива элеменов.
- для хранения динамического двумерно массива требудется дополнительная память под массив строк. Для массива элементов не требудется.
- динамический двумерный массив хранится в памяти посторочно, а не последовательно. Массив элементов хранится последовательно (за последним элементом n-й строки следует первый элемент (n+1)-й строки)
- К элементам динамического двумерного массива обращаться удобнее. Для элементов последовательного массива неоьбходимо вычислять индекс.
В приложении ваш код допполненный функционалом для ввода и вывода на печать матрицы в виде последовательного массива элементов.
Приложение:
--------- нет ничего невозможного
Ответ отправил: Aristos (статус: 6-ой класс)
Ответ отправлен: 16.09.2007, 18:09 Оценка за ответ: 5