Форум «Всё о Паскале» _ Ада и другие языки _ динамические массивы
Автор: мисс_граффити 20.02.2006 1:16
есть ли аналог для
mas:array of integer; ... SetLength(A,10)
? или это как-то сложно реализуется?
Автор: volvo 20.02.2006 1:17
Если C++ , то смотри в сторону
std::vector<int> mas; mas.resize(10);
Автор: мисс_граффити 20.02.2006 1:43
спасибо, буду пробовать.
Автор: мисс_граффити 9.03.2006 20:46
в результате попыток почитать толстую книжку вопросов возникло еще больше Архангельский предлагает для двумерных массивов делать так:
double *mas=new double[8][10]
компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double. вариант double[8,10] ему очень нравится... но что происходит дальше - я не поняла. что можно сделать? идеи такие были: 1. работать с длииинным одномерным массивом, а при выводе в стринггрид просто разбивать по 8 элементов. 2. создать массив из указателей, где каждый из указателей отсылает к массиву.
Автор: volvo 9.03.2006 21:12
Цитата
компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double.
Прав 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; }
вариант double[8,10] ему очень нравится... но что происходит дальше - я не поняла.
Это СОВСЕМ не то, что ты подумала: в С есть операция "запятая", которая возвращает результат ПОСЛЕДНЕЙ произведенной операции, то есть
double[8, 10]
раскладывается на операцию (8, 10) результатом которой будет 10, и затем эта 10-ка подставляется в double[...], итого имеем double[10], что НЕ является матрицей, это обычный одномерный массив...
Автор: мисс_граффити 10.03.2006 0:04
то есть фактически мой второй вариант... рассматриваем матрицу как одномерный массив, эл-тами которого являются одномерные массивы. тот же array of array по сути...
спасибо, в общем.
Автор: LPBoy 13.03.2006 21:54
Цитата(мисс_граффити @ 9.03.2006 16:46)
в результате попыток почитать толстую книжку вопросов возникло еще больше Архангельский предлагает для двумерных массивов делать так:
double *mas=new double[8][10]
Серьезно? Запусти эту книгу с балкона! Правильно так:
double (*arr2d)[10] = new double[8][10];
Хотя если размеры константные, то лучше использовать обычный статический массив.
double arr[8][10];
В варианте с динамическим массивом первая размерность может быть и не константной.
int n = 8; double (*arr2d)[10] = new double[n][10];
Если надо, чтобы обе размерности были неконстантами, то можно: - сделать так как сказал volvo, но с такими массивами столько мороки - использовать vector<vector<int> > / boost::multi_array - написать свой (перегрузить operator()(int rows, int cols))
Автор: volvo 13.03.2006 22:01
LPBoy, давай не будем превращать ХОТЯ БЫ ЭТОТ форум в ту заумность, куда скатились два параллельных форума! Достаточно попросить на любом из них найти максимум из двух чисел, и НАЧИНАЕТСЯ!!! "Используй stl" "boost рулит" "Паттерны читай" "А можно вообще это сделать метапрограммированием/на этапе компиляции" (нужное подчеркнуть)
Это - форум для начинающих, понимаешь? Те, кто задает сюда вопросы не поймут stl/boost, для этого надо сначала разобраться в простейшем синтаксисе языка...
Автор: Гость 13.03.2006 22:29
Цитата(volvo @ 13.03.2006 18:01)
LPBoy, давай не будем превращать ХОТЯ БЫ ЭТОТ форум в ту заумность, куда скатились два параллельных форума! Достаточно попросить на любом из них найти максимум из двух чисел, и НАЧИНАЕТСЯ!!! "Используй stl" "boost рулит" "Паттерны читай" "А можно вообще это сделать метапрограммированием/на этапе компиляции" (нужное подчеркнуть)
Цитата(volvo @ 13.03.2006 18:01)
Это - форум для начинающих, понимаешь? Те, кто задает сюда вопросы не поймут stl/boost, для этого надо сначала разобраться в простейшем синтаксисе языка...
Ладно, извини. Но ведь я, в основном, и говорил о "простейшем синтаксисе языка" - как объявить двумерный статический массив и т.п. Просто в конце выскользнуло... Прошу прощения еще раз...
Автор: LPBoy 13.03.2006 22:33
Сорри, Гость это был я. Забыл залогиниться.
Кстати, насчет "не поймут stl" как понимать твой первый пост в этом топике... ;)
Автор: мисс_граффити 14.03.2006 0:19
мне наоборот интересно собственно, и спрашиваю не с целью "напишите за меня лабораторку". хочется разобраться.
почти не в тему. а есть языки, где двумерные массивы по сути не array of array, а именно матрицы?
Автор: Гость 14.03.2006 0:33
Цитата(мисс_граффити @ 13.03.2006 20:19)
почти не в тему. а есть языки, где двумерные массивы по сути не array of array, а именно матрицы?
Pascal
Автор: klem4 14.03.2006 0:35
Цитата
именно матрицы?
А что по твоему матрица ? Массив массивов.
Автор: volvo 14.03.2006 0:39
Цитата
как понимать твой первый пост в этом топике... ;)
Объясняю... Я предложил, естественно, STL, ибо на работе ОЧЕНЬ активно его использую, и мне-то как раз было бы гораздо легче (если человек понимает, что я ему буду советовать) объяснить ему именно с использованием STL и/или boost-а. НО!!! Если мое предложение было проигнорировано, и в ответ я получаю
Цитата
компилятор сильно ругается, типа не может преобразовать "double(*)[10]" в double.
, то я просто сделал соответствующие выводы... Значит, уровень знания языка (или используемый компилятор) ПОКА не позволяет использовать STL... Вот и все...
Автор: мисс_граффити 14.03.2006 0:42
volvo, все было не так. то предложение было не проигнорировано, а использовано.
но интересно же и с другими вариантами разобраться! я попыталась пользоваться рекомендованной преподавателем литературой. получилось плохо.
...а уровень знания языка действительно нулевой. и компилятор здесь ни при чем.
Автор: LPBoy 14.03.2006 0:49
Цитата(klem4 @ 13.03.2006 20:35)
А что по твоему матрица ? Массив массивов.
klem4, я всегда думал, что матрица (которая не массив массивов ) это когда такой синтаксис:
Код
matrix[i, j];
а массив массивов
Код
arr[i][j]
Только никак не могу вспомнить в Pascal'e 2-й вариант поддерживается?
Автор: volvo 14.03.2006 0:54
LPBoy А в паскале оба варианта равнозначны... Синонимы просто...
Автор: мисс_граффити 14.03.2006 2:54
volvo, синонимы, но по сути они чем являются?.. то есть матрица - эта такая фигнюшка, которая обладает определенными св-вами... ну, ранг, например.
Автор: volvo 14.03.2006 3:02
По сути паскалевская матрица:
Type X = array[1 .. n, 1 .. n] of Integer;
полностью аналогична
Type X = Array[1 .. n] of Array[1 .. n] Of Integer;
То есть матрица - массив строк... А вот в Фортране, например, матрица - это массив столбцов...
Цитата
то есть матрица - эта такая фигнюшка, которая обладает определенными св-вами... ну, ранг, например.
А это здесь ни при чем... Ранг - это математическое понятие. А средствами языка программирования я могу матрицу и списком значений представить, и все равно у нее будет такое свойство как ранг. Способ представления роли не играет, важно, ЧТО мы представляем...