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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

20.12.2012, 09:24. Просмотров 2695. Ответов 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++
Имеется вот такое задание: Создать программу, которая реализует журнал с оценками в виде двумерного массива (студенты - строки, оценки за...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 13:55  [ТС] #31
Цитата Сообщение от daslex Посмотреть сообщение
Сколько угодно называйте бегемота гиппопотамом, от этого он не перестанет быть бегемотом
Но и гиппопотамом тоже не перестанет.

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
В С/С++ есть понятие массива массивов.
Как и в паскале. Но паскаль позволяет писать, как хочешь.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
20.12.2012, 14:39 #32
taras atavin, Короткий ответ прост: потому что С++ это не Паскаль. И не надо сравнивать. Изучайте спокойно язык, а не задавайтесь вопросом: "почему это есть в одном языке, а в другом нет?"
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 14:59  [ТС] #33
Я знаю язык и для меня не проблема сделать векторный индекс, интересна именно мотивация Страуструпа.
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,678
20.12.2012, 15:06 #34
Цитата Сообщение от taras atavin Посмотреть сообщение
Но паскаль позволяет писать, как хочешь.
мне одно удобно делать в Паскале
другое удобно в С++

Паскаль позволяет писать по другому, но ни в коем случае не как хочешь.
Потому что это разные языки и каждый заточен под свои задачи.
мотивация Страуструпа у Страуструпа в книжке написана. Там Введение есть
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 15:09  [ТС] #35
Что за книжка?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
20.12.2012, 15:13 #36
Цитата Сообщение от taras atavin Посмотреть сообщение
интересна именно мотивация Страуструпа
Ну думаю она очевидна - совместимость с С - было бы странно, если бы массивы в С++ "работали" иначе, чем в С.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 15:18  [ТС] #37
А в чём будет не совместимость? Если
C++
1
a[i,j]
будет синонимично
C++
1
a[i][j]
, то компилятор спокойно проглотит программу на чистых сях с адресацией только в раздельные скобки для разных индексов, но позволит юзать и альтернативный синтаксис. Обратной же совместимости нет всё равно из-за классов.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
20.12.2012, 15:40 #38
taras atavin, и зачем, если есть "неальтернативный" синтаксис? У запятой в С++, как и в С, другое значение, выделять отдельный случай для индексации - ИМХО просто лишняя нагрузка на компилятор, у языка и так грамматика не самая простая. Основной аудитории (знакомым с С) такой способ всё равно вряд ли был нужен. Вообщем, ИМХО, полезность крайне сомнительна. Про совместимость я пожалуй некорректно выразился, просто менять\добавлять что-то в отношении индексации имело бы мало смысла.
0
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
20.12.2012, 15:43 #39
Цитата Сообщение от taras atavin Посмотреть сообщение
a[i,j]
Это означает одно и то же, что в C, что в C++. Не вижу здесь вопросов совместимости.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 15:47  [ТС] #40
На паскале запятая тоже разделяет параметры. И она же разделяет индексы. Но в чём здесь отдельность? Два индекса - это два операнда, операнд есть параметр оператора, запятая на c/c++ разделяет параметры. Где же здесь намёк на отдельный случай?

Добавлено через 45 секунд
Цитата Сообщение от palva Посмотреть сообщение
Это означает одно и то же, что в C, что в C++. Не вижу здесь вопросов совместимости.
Оба языка прямо запрещают такой синтаксис.
0
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
20.12.2012, 15:51 #41
Цитата Сообщение от 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
gray_fox
20.12.2012, 15:56
  #42

Не по теме:

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

0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 15:56  [ТС] #43
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
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
20.12.2012, 16:03 #44
taras atavin, Warning - не ошибка. И к стандарту никакого отношения не имеет.
0
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
20.12.2012, 16:03 #45
Цитата Сообщение от gray_fox Посмотреть сообщение
смысл поддержки кода с подобными кульбитами стремится к нулю
Я, например, часто использую запятую, например
C++
1
for(i=0, j=0, k=0; i<n; i++) {...}
Для всяких счетчиков такая инициализация очень удобна.

Цитата Сообщение от taras atavin Посмотреть сообщение
Нужны комментарии?
А зачем мне комментарии. Такой синтаксис не запрещен. Просто оптимизатор видит его избыточность. Если бы вместо чисел стояли обращения к функциям, то оптимизатор бы промолчал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2012, 16:03
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.12.2012, 16:03
Ответ Создать тему
Опции темы

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