С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/32: Рейтинг темы: голосов - 32, средняя оценка - 4.53
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

20.12.2012, 09:24. Показов 6447. Ответов 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
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 15:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
Оба языка прямо запрещают такой синтаксис.
Да ладно вам!
C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main() {
    int a[3];
    a[0,2] = 8;
    cout << a[2] << endl; // 8
    return 0;
}
0
20.12.2012, 15:56

Не по теме:

palva, смысл поддержки кода с подобными кульбитами стремится к нулю)

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 15:56  [ТС]
C:\tsserver\Projects\cpp\codeblocks\test \test.cpp||In function 'int main()':|
C:\tsserver\Projects\cpp\codeblocks\test \test.cpp|5|warning: left-hand operand of comma has no effect|
||=== Build finished: 0 errors, 1 warnings ===|
Нужны комментарии?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.12.2012, 16:03
taras atavin, Warning - не ошибка. И к стандарту никакого отношения не имеет.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 16:03
Цитата Сообщение от gray_fox Посмотреть сообщение
смысл поддержки кода с подобными кульбитами стремится к нулю
Я, например, часто использую запятую, например
C++
1
for(i=0, j=0, k=0; i<n; i++) {...}
Для всяких счетчиков такая инициализация очень удобна.

Цитата Сообщение от taras atavin Посмотреть сообщение
Нужны комментарии?
А зачем мне комментарии. Такой синтаксис не запрещен. Просто оптимизатор видит его избыточность. Если бы вместо чисел стояли обращения к функциям, то оптимизатор бы промолчал.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
20.12.2012, 16:08
Цитата Сообщение от palva Посмотреть сообщение
Я, например, часто использую запятую
Я про запятые внутри [].
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 16:08  [ТС]
Смотри скриншот:
Миниатюры
Многомерный массив и массив массивов  
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 16:11  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
for(i=0, j=0, k=0; i<n; i++) {...}
Кстати да. В c++ для запятой два отдельных случая: разделение параметров и разделение операторов в отдельной позиции заголовка цикла for. В отличие от паскаля.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 16:13
Например, я хочу подсчитать количество обращений к массиву в моей программе. Каждое обращение к массиву я сопровождаю наращиванием счетчика, а потом печатаю счетчик.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int s=0;
void p() {s++;}
int main() {
    int a[3];
    a[p(),2] = 8;
    cout << a[p(),2] << endl; // 8
    cout << s << endl; // 2
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.12.2012, 16:15
palva, Ну это знаете-ли изврат. Кто будет такой код сопровождать - постарается найти автора.
taras atavin, и что? это всего-лишь предупреждение.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
20.12.2012, 16:16
palva, жуть.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 16:39
Ну а как иначе написать такую вдруг возникшую задачу? Я беру готовый текст и в редакторе делаю замену 'a[' на 'a[p(),' (конечно, если у меня нет массивов с именами кончающимися на a), а потом делаю обратную замену, если это рабочий код.

Добавлено через 8 минут
Обращение a[i++] ведь никого не смущает? А кого смутит наращивание еще двух счетчиков: a[j++,k++,i++]
Например, я сканирую в одном цикле сразу три массива одинаковой длины.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 16:41  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
А кого смутит наращивание еще двух счетчиков: a[j++,k++,i++]
Я уже дал скриншот, на котором видно, что запятая в квадратных скобках запрещена. Вопрос в мотивации: почему это запрещено. На паскале запятая имеет два назначения и может разделять индексы, на плюсах не может, но имеет два назначения, из них одно совпадает. Зачем на ровном месте конструкция
C++
1
a[TVerctor (i,j,k)]
? Меня не напрягает ни векторный, ни строчный индекс.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
20.12.2012, 16:45
предлагаю вынести тему в религию
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 16:49  [ТС]
Но зачем? На паскале мотивация автора очевидна: так как там индексы могут быть только целого, символьного, перечислимого, или ограниченного типа, то нет возможности прикрутить к массиву векторный индекс, а массив массивов удобен далеко не всегда. А на плюсах? Ладно, пусть индекс может быть любого типа, включая TImage. Ну и что? А зачем запрещены несколько индексов?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
20.12.2012, 16:57
Цитата Сообщение от palva Посмотреть сообщение
А кого смутит наращивание еще двух счетчиков: a[j++,k++,i++]
Меня например. Мне вообще не понятно, зачем так писать. Хотя о чём я, давайте сразу
C++
1
 std::cout << (std::cout << a[p(), 2[p(), a] = 8, 2] << std::endl, s) << std::endl;  // 8 2
ведь подобное никого не смущает.
1
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 17:09
Меня смущает это: 2[ по-моему это даже не скомпилируется.
Но я не об этом. Использование запятой внутри квадратных скобок разрешено, как разрешено в любом выражении си. Но операция запятая очень редко применяется и многих смущает, а некоторые даже не в курсе, что она существует.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
20.12.2012, 17:14
Цитата Сообщение от palva Посмотреть сообщение
2[ по-моему это даже не скомпилируется.
Да ладно вам!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
 
int s = 0;
 
void p() {
   s++;
}
 
 
int main() {
    int a[3];
    std::cout << (std::cout << a[p(), 2[p(), a] = 8, 2] << std::endl, s) << std::endl;
}
http://liveworkspace.org/code/377A2p
Я конечно передёргиваю, но то, что это разрешено, ещё не значит, что это стоит использовать. Код всё таки для людей писать.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,923
Записей в блоге: 5
20.12.2012, 17:32
А что означает: 2[p(), a] не понимаю. Это обращение к массиву, который начинается с адреса 2 что ли?

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Код всё таки для людей писать.
Бывают такие люди, для который и подобного кода не жалко.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.12.2012, 17:32  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Использование запятой внутри квадратных скобок разрешено, как разрешено в любом выражении си.
Запрещено, что хорошо видно на скриншоте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2012, 17:32
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru