Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 854
от 21.09.2007, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 488, Экспертов: 64
В номере:Вопросов: 1, Ответов: 2


Вопрос № 102211: здравствуйте уважаемые эксперты. посоветуйте как заносить данные в динамический массив с клавиатуры для данной программы...

Вопрос № 102.211
здравствуйте уважаемые эксперты. посоветуйте как заносить данные в динамический массив с клавиатуры для данной программы

Приложение:

Отправлен: 16.09.2007, 13:38
Вопрос задал: BosS18 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rockie
Здравствуйте, BosS18!

Как понимаю вы хотите создать двумерный массив. Тогда необходимо сначала выделить память под указатели (на строки), а потом на сами строки. То есть в памяти будет нечто вроде:

**array -> [*int ]->[int][int][int]
[*int ]->[int][int][int]
[*int ]->[int][int][int]

Код в приложении, вывод массива на экран вынесен в отдельную функцию, по коммаентариям думаю должно быть все понятно.

Приложение:

Ответ отправил: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.59 от 18.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное