Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Многомерный массив и массив массивов

20.12.2012, 09:24. Показов 7026. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На паскале это синонимы. Например, всё валидно:
Pascal
1
2
3
4
5
6
7
var a:array[1..n]of array[1..n]of array[1..n] of real; {объявлен одномерный массив одномерных массивов одномерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1][2,3]:=2; {А здесь как к одномерном массиву двумерных массивов реалов}
        a[3,4]:=a[5,5]; {И здесь как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
,
Pascal
1
2
3
4
5
6
var a:array[1..n]of array[1..n,1..n] of real; {Объявлен одномерный массив двумерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
Pascal
1
2
3
4
5
6
var a:array[1..n]of array[1..n]of array[1..n] of real; {Объявлен одномерный массив двумерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
,
Pascal
1
2
3
4
5
var a:array[1..n,1..n]of array[1..n] of real; {объявлен двумерный массив одномерных массивов реалов}
begin
        a[1][2,3]:=2; {А обращаемся к нему как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
,
Pascal
1
2
3
4
5
6
7
var a:array[1..n,1..n,1..n]of real; {объявлен трёхмерный массив реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1][2,3]:=2; {А здесь как к одномерном массиву двумерных массивов реалов}
        a[3,4]:=a[5,5]; {И здесь как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
. А на c/c++ нет самого понятия многомерного массива. А теперь вопрос: почему? Почему на паскале это синонимы и почему на c/c++ существует только одно из этих двух понятий?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2012, 09:24
Ответы с готовыми решениями:

Многомерный массив. С++
Здравствуйте нужно решить две задачки. а) Найдите сумму всех элементов матрицы размером 6х6, состоящей из элементов вещественного типа...

Многомерный массив
Найти максимальный элемент в массиве. Размеры массива задайте сами. Сделайте три варианта программы. В первом элементы массива...

Многомерный массив
Вот надо решить задачу. Первую я сделал. Помогите пожалуйста со второй и если можно то без замудреного кода ) ...

66
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
20.12.2012, 17:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
Запрещено, что хорошо видно на скриншоте.
На скриншоте написано, что левая часть операции запятая не влияет на выполнение программы. Типа ее можно было бы и не писать. Но компилятор не против. Синтаксически это верно. В квадратных скобках может стоять любое выражение, а запятая вполне легальная бинарная операция для формирования выражений, так же как плюс и минус.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
20.12.2012, 17:43
Цитата Сообщение от palva Посмотреть сообщение
А что означает: 2[p(), a] не понимаю.
Просто a[2] и 2[a] - то же самое по сути. Про запятую вы курсе.

Добавлено через 2 минуты
Кстати только что по этому поводу новую тему создали: Почему создатели языка C++ придумали такой странный синтаксис обращения к элементам одномерного массива? .
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 17:46  [ТС]
Блин, действительно предупреждение и игнор. Но ведь это совсем уж странно.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
20.12.2012, 17:50
Ага. понял. *(a+2)

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Но ведь это совсем уж странно.
Вам осталось спросить как работает операция "запятая" в выражениях си.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 17:58  [ТС]
В чём мотивация Страуструпа и Ритчи? Зачем делать этот игнор? Логичней использовать оба операнда.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
21.12.2012, 08:17
Цитата Сообщение от taras atavin Посмотреть сообщение
В чём мотивация Страуструпа и Ритчи? Зачем делать этот игнор? Логичней использовать оба операнда.

Не по теме:

Создай свой язык на уровне С и используй там оба операнда без игнора


Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, Короткий ответ прост: потому что С++ это не Паскаль. И не надо сравнивать. Изучайте спокойно язык, а не задавайтесь вопросом: "почему это есть в одном языке, а в другом нет?"
Цитата Сообщение от taras atavin Посмотреть сообщение
На паскале запятая тоже разделяет параметры.
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)

Страуструп и Вирт разные люди и разрабатывали разные проекты. Одним разработчикам было удобно одно, а другим другое.
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.12.2012, 08:47  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)
Паскаль с бейсиком не путай, на паскале вообще нет степеней, кроме квадратного корня, квадрата, экспоненты и самопискных функций. Всё перечисленное тоже функции.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
Паскаль и модула два тоже разные, а в них много чего совпадает.

Добавлено через 21 минуту
Цитата Сообщение от daslex Посмотреть сообщение
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)
Паскаль с бейсиком не путай, на паскале вообще нет степеней, кроме квадратного корня, квадрата, экспоненты и самопискных функций. Всё перечисленное тоже функции.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
Паскаль и модула два тоже разные, а в них много чего совпадает. Да и в c/c++ тоже есть совпадения с паскалем: точка. плюс, минус, и точка с запятой ведут себя одинаково на всех трёх языках. С другой стороны, c и c++ тоже разные языки, поэтому даже в них при всём их сходстве совпадает всё таки не всё. Это не аргумент. Вопрос не в том, почему языки разные, а в том, почему одно из различий именно такое. Это могло бы и совпадать, а операция "запятая" есть не везде, но как то же Вирт без неё обошелся. В заголовке цикла можно было бы предложить прикладникам такой синтаксис:
C++
1
for (i=1; i<=n; ++i)
для одного счётчика и такой:
C++
1
for ({i=1; j=1} i<=n {++i; ++j})
для нескольких, а в других местах она вообще не очень то и нужна. А можно сделать саму операцию, но пойти на принцип, из-за которого сравнение уже сделано двойным равенством, а обращение к члену по указателю на объект через комбинацию минуса и знака "больше" и обозначить эту операцию не запятой, а
C++
1
.,
(точка с запятой, но из двух символов и по горизонтали). Знающего язык векторные индексы напрягать не могут, а не знающий ничего хорошего не напишет всё равно, так что отсутствие именно обязательной синонимичности многомерных массивов массивам массивов - не недостаток. По идее многомерные массивы-объекты есть и на c++, это массивы-объекты с многомерными индексами. А хочет прикладник реализовать синонимичность, или нет, это его дело. Но подобное различие - это повод поинтересоваться мотивацией авторов. Может я свой кривоязык сочиняю и хочу знать, какие грабли он обходил, чтоб свою поделуху не слепить ещё кривее? Мотивация Вирта мне понятна: так как нет многомерных массивов, то остаётся единственная возможность сделать многомерные массивы, а перегрузка была придумана позже. Остаётся мотивация авторов c и c++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2012, 08:47

многомерный массив
помогите сделать задачу через указатели Сформировать массив типа char размером в 7х5х8 элементов. Проинициализировать его случайными...

Многомерный массив, Си!!!
Дан массив целых чисел a. Изменить индексацию массива на a

Многомерный массив
Имеется вот такое задание: Создать программу, которая реализует журнал с оценками в виде двумерного массива (студенты - строки, оценки за...

Многомерный массив
Пожалуйста помогите написать программу. Выделить память под многомерный массив, заполнить его произвольным образом, передать...

многомерный массив
помогите пожалуйста написать программу: Дана целочисленная прямоугольная матрица. Определить: 1) количество отрицательных элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
67
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru