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

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

20.12.2012, 09:24. Показов 6898. Ответов 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, 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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 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
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 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
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
20.12.2012, 16:16
palva, жуть.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 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
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,469
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
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 5
20.12.2012, 17:09
Меня смущает это: 2[ по-моему это даже не скомпилируется.
Но я не об этом. Использование запятой внутри квадратных скобок разрешено, как разрешено в любом выражении си. Но операция запятая очень редко применяется и многих смущает, а некоторые даже не в курсе, что она существует.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,931
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru