Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
#1

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

20.12.2012, 09:24. Просмотров 2853. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 09:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Многомерный массив и массив массивов (C++):

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

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

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

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

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

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

66
gray_fox
What a waste!
1529 / 1234 / 71
Регистрация: 21.04.2012
Сообщений: 2,597
Завершенные тесты: 3
20.12.2012, 16:08 #46
Цитата Сообщение от palva Посмотреть сообщение
Я, например, часто использую запятую
Я про запятые внутри [].
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
20.12.2012, 16:08  [ТС] #47
Смотри скриншот:
0
Миниатюры
Многомерный массив и массив массивов  
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
20.12.2012, 16:11  [ТС] #48
Цитата Сообщение от palva Посмотреть сообщение
for(i=0, j=0, k=0; i<n; i++) {...}
Кстати да. В c++ для запятой два отдельных случая: разделение параметров и разделение операторов в отдельной позиции заголовка цикла for. В отличие от паскаля.
0
palva
2920 / 2054 / 329
Регистрация: 08.06.2007
Сообщений: 7,547
Записей в блоге: 4
20.12.2012, 16:13 #49
Например, я хочу подсчитать количество обращений к массиву в моей программе. Каждое обращение к массиву я сопровождаю наращиванием счетчика, а потом печатаю счетчик.
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
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
20.12.2012, 16:15 #50
palva, Ну это знаете-ли изврат. Кто будет такой код сопровождать - постарается найти автора.
taras atavin, и что? это всего-лишь предупреждение.
0
gray_fox
What a waste!
1529 / 1234 / 71
Регистрация: 21.04.2012
Сообщений: 2,597
Завершенные тесты: 3
20.12.2012, 16:16 #51
palva, жуть.
0
palva
2920 / 2054 / 329
Регистрация: 08.06.2007
Сообщений: 7,547
Записей в блоге: 4
20.12.2012, 16:39 #52
Ну а как иначе написать такую вдруг возникшую задачу? Я беру готовый текст и в редакторе делаю замену 'a[' на 'a[p(),' (конечно, если у меня нет массивов с именами кончающимися на a), а потом делаю обратную замену, если это рабочий код.

Добавлено через 8 минут
Обращение a[i++] ведь никого не смущает? А кого смутит наращивание еще двух счетчиков: a[j++,k++,i++]
Например, я сканирую в одном цикле сразу три массива одинаковой длины.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
20.12.2012, 16:41  [ТС] #53
Цитата Сообщение от palva Посмотреть сообщение
А кого смутит наращивание еще двух счетчиков: a[j++,k++,i++]
Я уже дал скриншот, на котором видно, что запятая в квадратных скобках запрещена. Вопрос в мотивации: почему это запрещено. На паскале запятая имеет два назначения и может разделять индексы, на плюсах не может, но имеет два назначения, из них одно совпадает. Зачем на ровном месте конструкция
C++
1
a[TVerctor (i,j,k)]
? Меня не напрягает ни векторный, ни строчный индекс.
0
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
20.12.2012, 16:45 #54
предлагаю вынести тему в религию
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
20.12.2012, 16:49  [ТС] #55
Но зачем? На паскале мотивация автора очевидна: так как там индексы могут быть только целого, символьного, перечислимого, или ограниченного типа, то нет возможности прикрутить к массиву векторный индекс, а массив массивов удобен далеко не всегда. А на плюсах? Ладно, пусть индекс может быть любого типа, включая TImage. Ну и что? А зачем запрещены несколько индексов?
0
gray_fox
What a waste!
1529 / 1234 / 71
Регистрация: 21.04.2012
Сообщений: 2,597
Завершенные тесты: 3
20.12.2012, 16:57 #56
Цитата Сообщение от 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
2920 / 2054 / 329
Регистрация: 08.06.2007
Сообщений: 7,547
Записей в блоге: 4
20.12.2012, 17:09 #57
Меня смущает это: 2[ по-моему это даже не скомпилируется.
Но я не об этом. Использование запятой внутри квадратных скобок разрешено, как разрешено в любом выражении си. Но операция запятая очень редко применяется и многих смущает, а некоторые даже не в курсе, что она существует.
0
gray_fox
What a waste!
1529 / 1234 / 71
Регистрация: 21.04.2012
Сообщений: 2,597
Завершенные тесты: 3
20.12.2012, 17:14 #58
Цитата Сообщение от 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
2920 / 2054 / 329
Регистрация: 08.06.2007
Сообщений: 7,547
Записей в блоге: 4
20.12.2012, 17:32 #59
А что означает: 2[p(), a] не понимаю. Это обращение к массиву, который начинается с адреса 2 что ли?

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Код всё таки для людей писать.
Бывают такие люди, для который и подобного кода не жалко.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
20.12.2012, 17:32  [ТС] #60
Цитата Сообщение от palva Посмотреть сообщение
Использование запятой внутри квадратных скобок разрешено, как разрешено в любом выражении си.
Запрещено, что хорошо видно на скриншоте.
0
20.12.2012, 17:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2012, 17:32
Привет! Вот еще темы с ответами:

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

Многомерный массив - C++
найти и напечатать значения и индексы минимального элемента в каждом рядке матрицы W(N,M)

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

Многомерный динамический массив - C++
Пользователь вводит размер массива Массив заполнняется рандомными (случайными) значениями 1-9 При условиях если: 1 вывеси на экран * ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru