Помощь - Поиск - Пользователи - Календарь
Полная версия: динамические массивы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
мисс_граффити
есть ли аналог для
mas:array of integer;
...
SetLength(A,10)

?
или это как-то сложно реализуется?
volvo
Если C++ , то смотри в сторону
std::vector<int> mas;
mas.resize(10);
мисс_граффити
спасибо, буду пробовать.
мисс_граффити
в результате попыток почитать толстую книжку вопросов возникло еще больше sad.gif
Архангельский предлагает для двумерных массивов делать так:
double *mas=new double[8][10]

компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double.
вариант double[8,10] ему очень нравится... но что происходит дальше - я не поняла.
что можно сделать?
идеи такие были:
1. работать с длииинным одномерным массивом, а при выводе в стринггрид просто разбивать по 8 элементов.
2. создать массив из указателей, где каждый из указателей отсылает к массиву.
volvo
Цитата
компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double.
yes2.gif Прав 100%

Вот так надо бы:
#include <iostream.h>

int main() {
double **dynArray;

dynArray = new double* [8];
for(int i = 0; i < 8; ++i) {
dynArray[i] = new double[10];
for(int j = 0; j < 10; ++j)
dynArray[i][j] = 10 * i + j;
}

for(i = 0; i < 8; ++i) {
for(int j = 0; j < 10; ++j) cout << dynArray[i][j] << " ";
cout << endl;
}

return 0;

}
(для TC++ 3.0)

Цитата
вариант double[8,10] ему очень нравится... но что происходит дальше - я не поняла.
Это СОВСЕМ не то, что ты подумала: в С есть операция "запятая", которая возвращает результат ПОСЛЕДНЕЙ произведенной операции, то есть
double[8, 10]
раскладывается на операцию (8, 10) результатом которой будет 10, и затем эта 10-ка подставляется в double[...], итого имеем double[10], что НЕ является матрицей, это обычный одномерный массив...
мисс_граффити
то есть фактически мой второй вариант...
рассматриваем матрицу как одномерный массив, эл-тами которого являются одномерные массивы.
тот же array of array по сути...

спасибо, в общем.
LPBoy
Цитата(мисс_граффити @ 9.03.2006 16:46) *

в результате попыток почитать толстую книжку вопросов возникло еще больше sad.gif
Архангельский предлагает для двумерных массивов делать так:
double *mas=new double[8][10]


Серьезно? blink.gif Запусти эту книгу с балкона! Правильно так:
double (*arr2d)[10] = new double[8][10];


Хотя если размеры константные, то лучше использовать обычный статический массив.
double arr[8][10];


В варианте с динамическим массивом первая размерность может быть и не константной.
int n = 8;
double (*arr2d)[10] = new double[n][10];


Если надо, чтобы обе размерности были неконстантами, то можно:
- сделать так как сказал volvo, но с такими массивами столько мороки wacko.gif
- использовать vector<vector<int> > / boost::multi_array
- написать свой (перегрузить operator()(int rows, int cols))
volvo
LPBoy, давай не будем превращать ХОТЯ БЫ ЭТОТ форум в ту заумность, куда скатились два параллельных форума! Достаточно попросить на любом из них найти максимум из двух чисел, и НАЧИНАЕТСЯ!!!
"Используй stl"
"boost рулит"
"Паттерны читай"
"А можно вообще это сделать метапрограммированием/на этапе компиляции" (нужное подчеркнуть)

Это - форум для начинающих, понимаешь? Те, кто задает сюда вопросы не поймут stl/boost, для этого надо сначала разобраться в простейшем синтаксисе языка...
Гость
Цитата(volvo @ 13.03.2006 18:01) *

LPBoy, давай не будем превращать ХОТЯ БЫ ЭТОТ форум в ту заумность, куда скатились два параллельных форума! Достаточно попросить на любом из них найти максимум из двух чисел, и НАЧИНАЕТСЯ!!!
"Используй stl"
"boost рулит"
"Паттерны читай"
"А можно вообще это сделать метапрограммированием/на этапе компиляции" (нужное подчеркнуть)

lol.gif

Цитата(volvo @ 13.03.2006 18:01) *

Это - форум для начинающих, понимаешь? Те, кто задает сюда вопросы не поймут stl/boost, для этого надо сначала разобраться в простейшем синтаксисе языка...

Ладно, извини. smile.gif Но ведь я, в основном, и говорил о "простейшем синтаксисе языка" - как объявить двумерный статический массив и т.п. Просто в конце выскользнуло... Прошу прощения еще раз...
LPBoy
Сорри, Гость это был я. Забыл залогиниться.

Кстати, насчет "не поймут stl" как понимать твой первый пост в этом топике... ;)
мисс_граффити
мне наоборот интересно smile.gif
собственно, и спрашиваю не с целью "напишите за меня лабораторку".
хочется разобраться.

почти не в тему.
а есть языки, где двумерные массивы по сути не array of array, а именно матрицы?
Гость
Цитата(мисс_граффити @ 13.03.2006 20:19) *

почти не в тему.
а есть языки, где двумерные массивы по сути не array of array, а именно матрицы?


Pascal smile.gif
klem4
Цитата
именно матрицы?


А что по твоему матрица ? Массив массивов.
volvo
Цитата
как понимать твой первый пост в этом топике... ;)
Объясняю... Я предложил, естественно, STL, ибо на работе ОЧЕНЬ активно его использую, и мне-то как раз было бы гораздо легче (если человек понимает, что я ему буду советовать) объяснить ему именно с использованием STL и/или boost-а. НО!!! smile.gif Если мое предложение было проигнорировано, и в ответ я получаю
Цитата
компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double.
, то я просто сделал соответствующие выводы... Значит, уровень знания языка (или используемый компилятор) ПОКА не позволяет использовать STL... Вот и все...
мисс_граффити
volvo, все было не так.
то предложение было не проигнорировано, а использовано.

но интересно же и с другими вариантами разобраться!
я попыталась пользоваться рекомендованной преподавателем литературой.
получилось плохо.

...а уровень знания языка действительно нулевой. и компилятор здесь ни при чем.
LPBoy
Цитата(klem4 @ 13.03.2006 20:35) *

А что по твоему матрица ? Массив массивов.


klem4, я всегда думал, что матрица (которая не массив массивов smile.gif ) это когда такой синтаксис:
Код

matrix[i, j];

а массив массивов
Код

arr[i][j]

Только никак не могу вспомнить в Pascal'e 2-й вариант поддерживается?
volvo
LPBoy smile.gif А в паскале оба варианта равнозначны... Синонимы просто...
мисс_граффити
volvo, синонимы, но по сути они чем являются?..
то есть матрица - эта такая фигнюшка, которая обладает определенными св-вами...
ну, ранг, например.
volvo
По сути паскалевская матрица:
Type X = array[1 .. n, 1 .. n] of Integer;

полностью аналогична
Type X = Array[1 .. n] of Array[1 .. n] Of Integer;

То есть матрица - массив строк... А вот в Фортране, например, матрица - это массив столбцов...

Цитата
то есть матрица - эта такая фигнюшка, которая обладает определенными св-вами...
ну, ранг, например.
А это здесь ни при чем... Ранг - это математическое понятие. А средствами языка программирования я могу матрицу и списком значений представить, и все равно у нее будет такое свойство как ранг. Способ представления роли не играет, важно, ЧТО мы представляем...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.