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

Что означает запись ++arr1[arr2[i]] - C++

Восстановить пароль Регистрация
 
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 00:46     Что означает запись ++arr1[arr2[i]] #1
Привет всем .

Вот нашел код но не поиму что значит запись
++frequency [ responses [ answer ] ] ; //вот все что её касаеться меня интерисует от А-Я что и как она работает подробно . Гуглил но не нашел токой информации. Знаю то что она берёт значения один за другим с помощу цыкла но и сумирует каждый элемент массива но как она распределяет единицы к еденицам , двойки к двойкам . Обычно в таком случае я бы использовал if else или switch . Но ето слижком длинный код был бы . Но вот интересно как понять даную непонятную запись. Обясните пожалуйста мне что и к чему . Буду благодарен всем кто окажет помощ. СПАСИБО )

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
int main ()
 {
 const int size1 = 40, size2 = 11;
 int responses [ size1 ] = { 1, 2, 6, 4, 8, 5, 9, 1, 8,
 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7,
 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10};
 int frequency[ size2 ] = { 0 } ;
 
 for ( int answer = 0; answer < size1; answer++ )
++frequency [ responses [ answer ] ] ;
 
 cout << "reiting" << setw( 17 ) << "chastota" << endl;
 
 for ( int rating = 1; rating < size2; rating++ )
 cout << setw( 6 ) << rating
 << setw( 17 ) << frequency[ rating ] << endl;
getch();
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
1791 / 1506 / 539
Регистрация: 24.04.2014
Сообщений: 4,229
02.07.2014, 01:28     Что означает запись ++arr1[arr2[i]] #2
Джек,
1 итерация:
a) answer = 0.
b) responses[answer] = responses[0] = 1
c) увеличить на 1 frequenses[ responses[answer] ] = frequenses[1].
2 итерация:
все тоже самое для answer = 1
увеличится frequenses[responses[1]]=frequenses[2]
3 итерация
увеличится frequenses[6]
и т.д.
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
02.07.2014, 01:42     Что означает запись ++arr1[arr2[i]] #3
Джек, массив frequency изначально заполнен нулями.
C++
1
int frequency[ size2 ] = { 0 } ;
Позже в цикле элементы данного массива увеличиваются.

Рассматриваем данную запись "изнутри".
1) переменная answer в первом цикле принимает значения от 0 до 39 включительно.
2) соответственно обращение responses[ answer ] внутри цикла - выдает нам все элементы массива responses с индексами от 0 до 39. Данные элементы являются номерами - 1, 2, 6, 4, 8, 5, 9, 1, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10. Можно заметить, что значения повторяются.
3) значит обращение frequency [ responses [ answer ] ] на определенной итерации цикла будет
- 1 итерация: frequency [ 1 ] ( answer = 0, responses [ answer ] = 1 )
- 2 итерация: frequency [ 2 ] ( answer = 1, responses [ answer ] = 2 )
- 3 итерация: frequency [ 6 ] ( answer = 2, responses [ answer ] = 6 )
- 4 итерация: frequency [ 4 ] ( answer = 3, responses [ answer ] = 4 )
- 5 итерация: frequency [ 8 ] ( answer = 4, responses [ answer ] = 8 )
...
- 39 итерация: frequency [ 10 ] ( answer = 39, responses [ answer ] = 10 )

4) Таким образом, ++frequency [ responses [ answer ] ], например на 12-ой итерации цикла ( когда answer = 11 ) - увеличивает значение элемента массива frequency[ 6 ]. Когда была 3-я итерация ( answer = 2 ) также был увеличен элемент массива frequency[ 6 ].
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 11:45  [ТС]     Что означает запись ++arr1[arr2[i]] #4
Мы сначала индексы стараемся снумеровать не с 0 а с 1 таким образом что если у нас frequency[responses[2]]
Тоисть responses[2] = 6 если нумерацыю считать с нуля. Но если мы поставим ++frequency[responses[2]] то тогда етот элмент будет находиться в масиве frequency под номером 3 . Тоисть массив frequency начинаеться у нас не с нуля а с единицы ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2014, 11:55     Что означает запись ++arr1[arr2[i]] #5
Цитата Сообщение от Джек Посмотреть сообщение
Тоисть массив frequency начинаеться у нас не с нуля а с единицы
Индексы массивов в C/C++ всегда начинаются с нуля. Если это конечно не какой-нибудь хитрый класс, для которого перегружен operator[].
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 13:15  [ТС]     Что означает запись ++arr1[arr2[i]] #6
зачем ++frequency[responses[answer]]; зачем масив frequency увеличивать на один . И вобщим как в масиве таким образом подсчитываеться количество едениц, двоек, шестёрок..... и тд. Как масив знает что если еденица стоит на первом месте и на 5-том масив их подсчитывает и другие числа как это так происходит при даной ситуации без if-ов и else-ов ? Я понимаю что все элементы массива frequency = 0 и что они становяться равными 1 при выполнении операции ++frequency.
Jewbacabra
1791 / 1506 / 539
Регистрация: 24.04.2014
Сообщений: 4,229
02.07.2014, 13:55     Что означает запись ++arr1[arr2[i]] #7
Джек, попробуй сам руками выполнить каждую итерацию цикла, должно сразу отпасть много вопросов
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.07.2014, 14:12     Что означает запись ++arr1[arr2[i]] #8
Цитата Сообщение от Джек Посмотреть сообщение
зачем ++frequency[responses[answer]]; зачем масив frequency увеличивать на один .
он подсчитывает частоту (количество определенных цифр)в массиве responses
Цитата Сообщение от Джек Посмотреть сообщение
++frequency [ responses [ answer ] ] ;
можно расписать так
C++
1
2
int tmp=responses [ answer ];// получаем число из массива responses
frequency[tmp]=frequency[tmp]+1;// добавляем 1 по "весу" числа в массиве frequency
т.е у нас в frequency изначально все 0
0 0 0 0 0 0 0 0 0 0 0
считываем число из responses 1
и в в ячейке 1(вторая ячейка) frequency прибавляем 1
0 1 0 0 0 0 0 0 0 0 0
если еще раз встретится 1 в массиве responses
то опять добавляем 1 во вторую ячейку frequency
будет
0 2 0 0 0 0 0 0 0 0 0
и потом можно смело говорить что 1 встретилась два раза
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 16:26  [ТС]     Что означает запись ++arr1[arr2[i]] #9
Но какбы в цыкле каждый раз повторяеться ++frequency как масив знает что число 1 в ячейке один ведь оператор if отсутствует и тд. вот например есть масив и в нем есть числа 1,5,3,1,1 ведь цыкл считывает в ячейку 1 еденицу , а в ячейку 2 п*ятерку в ячейку 3, в ячейку 4 он считывает 1 ну и естественно все элементы массива сначала нули . Как масив знает что в ячейку нужно кинуть 1 пото через две цифры ещё 1 и 1?
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1858 / 1654 / 577
Регистрация: 14.05.2014
Сообщений: 4,750
Записей в блоге: 1
Завершенные тесты: 5
02.07.2014, 16:44     Что означает запись ++arr1[arr2[i]] #10
Джек, массив этого не знает, он просто берет эту единичку и использует как индекс своей ячейки, а затем увеличивает значение внутри этой ячейки на единицу.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.07.2014, 16:45     Что означает запись ++arr1[arr2[i]] #11
Цитата Сообщение от Джек Посмотреть сообщение
Как масив знает что в ячейку нужно кинуть 1 пото через две цифры ещё 1 и 1?
никто никуда ничего не кидает
увеличивается значение в конкретной ячейке
попытаюсь объяснить на жизненном примере
вот пришла тебе коробка с пишущим инструментом
там карандаши, ручки, фломастеры
как узнать сколько всего?
заводишь таблицу
фломастеры(1 ячейка, смешение 0)
карандаши (2 ячейка, смешение 1)
ручки(3 ячейка, смешение 2)
и начинаешь доставать из коробки по одному предмету
достал фломастер (код 0) в первую ячейку пишешь +1
достал ручку(код 2) в третью ячейку пишешь +1
опять фломастер еще в первую ячейку +1
потом когда разобрал всю коробку (цикл кончился) подсчитываешь количество в ячейке
можно по другому объяснить, кстати ближе к этому алгоритму
достаешь три пустых коробки( массив обнулен)
фломастер кидаешь в первую коробку, ручку в третью, карандаш во вторую
(frequency[tmp]=frequency[tmp]+1)

потом смотришь сколько в каждой коробке чего
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 16:51  [ТС]     Что означает запись ++arr1[arr2[i]] #12
Хорошо а как с п*ятеркой если она вторая и повториться через 3 символа ? (чтобы понять как это происходит с следующим числом) или просто если пьятерка попадает на 2-ю ячейку то через сколько бы символов она не попадала запись во вторую ячейку буду записываться только пьятерки ?
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
02.07.2014, 16:52     Что означает запись ++arr1[arr2[i]] #13
Цитата Сообщение от Джек Посмотреть сообщение
вот например есть масив и в нем есть числа 1,5,3,1,1 ведь цыкл считывает в ячейку 1 еденицу ,
не считывает а добавляет
изначально в массиве(другом) нули 0 0 0 0 0 0
считали 1 прибавить во вторую ячейку 1 стало 0 1 0 0 0 0
считали 5 прибавили в шестую ячейку 1 стало 0 1 0 0 0 1
считали 3 прибавили в четвертую ячейку 1 стало 0 1 0 1 0 1
считали 1 прибавить во вторую ячейку 1 стало 0 2 0 1 0 1
считали 1 прибавить во вторую ячейку 1 стало 0 3 0 1 0 1

так понятней?

Добавлено через 38 секунд
Цитата Сообщение от Джек Посмотреть сообщение
или просто если пьятерка попадает на 2-ю ячейку то через сколько бы символов она не попадала запись во вторую ячейку буду записываться только пьятерки ?
ты путаешь два разных массива
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1858 / 1654 / 577
Регистрация: 14.05.2014
Сообщений: 4,750
Записей в блоге: 1
Завершенные тесты: 5
02.07.2014, 17:07     Что означает запись ++arr1[arr2[i]] #14
Джек, В массиве response максимальное значение 10. Чтобы можно было обратиться к элементу frequency[10], мы создаем массив frequency из 11 элементов. То есть массив frequency выглядит так:
frequency[0]
frequency[1]
frequency[2]
frequency[3]
frequency[4]
frequency[5]
frequency[6]
frequency[7]
frequency[8]
frequency[9]
frequency[10]
Затем инициализирем этот массив нулями и получаем
frequency[0] = 0
frequency[1] = 0
frequency[2] = 0
frequency[3] = 0
frequency[4] = 0
frequency[5] = 0
frequency[6] = 0
frequency[7] = 0
frequency[8] = 0
frequency[9] = 0
frequency[10] = 0
Теперь берем значение из массива response, например, там 5. Мы эту пятерку используем как индекс массива frequency. На данный момент в ячейке frequency[5] лежит 0, т.к пятерка до этого еще не встречалась ни разу. Увеличиваем на единицу значение frequency[5]. Теперь frequency[5] = 1, т.е. пятерка встретилась один раз.
И так со всеми остальными числами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2014, 17:34     Что означает запись ++arr1[arr2[i]]
Еще ссылки по теме:

Что означает запись int **a C++
C++ Что означает данная запись
Что означает запись? C++

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

Или воспользуйтесь поиском по форуму:
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
02.07.2014, 17:34  [ТС]     Что означает запись ++arr1[arr2[i]] #15
Всем спасибо Спаааасииибооо за помощь
Yandex
Объявления
02.07.2014, 17:34     Что означает запись ++arr1[arr2[i]]
Ответ Создать тему
Опции темы

Текущее время: 11:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru