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

Что за конструкция? - C++

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 21:28     Что за конструкция? #1
Привет.
Что за конструкция такая?
Поясните что делает:
C++
1
2
3
  for( int i=0;i<N;++i ){
    ++nCount[ f()/Step ];
  }
f() - возвратит случайное число от 0 до 10000, Step - шаг определенный. 1000 например.

Полный код программы и результат работы здесь. http://ideone.com/vNB9Ow . Не понимаю что делает вот эта часть кода. Поясните пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.10.2013, 21:33     Что за конструкция? #2
инкрементирует элементы массива
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 21:48  [ТС]     Что за конструкция? #3
Подробнее можно пожалуйста.
Результат f()/Step от 0 до 10 кажется. Правильно?
а если у меня будет генерироваться случайное число от 0 до 1? причем Double?
Подробнее поясните пожалуйста.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 21:51     Что за конструкция? #4
Цитата Сообщение от VladSharikov Посмотреть сообщение
Результат f()/Step от 0 до 10 кажется. Правильно?
Правильно.
Цитата Сообщение от VladSharikov Посмотреть сообщение
а если у меня будет генерироваться случайное число от 0 до 1? причем Double?
В какой функции? И вообще, может проще (правильнее) написать код под задание, чем выяснить, что делает (возможно и вовсе бредовый) какой-то код?
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.10.2013, 21:53     Что за конструкция? #5
Цитата Сообщение от VladSharikov Посмотреть сообщение
Результат f()/Step от 0 до 10 кажется. Правильно?
Цитата Сообщение от VladSharikov Посмотреть сообщение
f() - возвратит случайное число от 0 до 10000, Step - шаг определенный. 1000 например.
ну так, да

Цитата Сообщение от VladSharikov Посмотреть сообщение
а если у меня будет генерироваться случайное число от 0 до 1? причем Double?
то без преобразования к целочисленному типу не будет работать
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 21:57  [ТС]     Что за конструкция? #6
Код всей программы на С++:
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
31
32
33
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <time.h>
    using namespace std;
     
    const int A=0;
    const int B=10000;
    const int N_int=10;
    const int N=100;
    const int Step=(B-A)/N_int;
     
    int f(){ return rand()%(B-A) + A; }
     
    int main(){
    double Xi = 0;
    unsigned nCount[N_int];
    srand(time(NULL));
    memset( nCount, 0, sizeof(nCount) );
    for( int i=0;i<N;++i ){
    ++nCount[ f()/Step ];
    }
    for( int i=0;i<N_int;++i ) cout <<nCount[i] << " ";
    cout << endl;
    double dPTeor = 1.0/N_int;
    cout << dPTeor << endl;
    for( int i=0;i<N_int;++i ){
    cout << 1.0*nCount[i]/N << " ";
    Xi+=pow(dPTeor - 1.0*nCount[i]/N, 2.0) / dPTeor;
    }
    cout << endl << Xi*N_int << endl;
    }
Есть выборка из 100 значений размахом 10000 (от 0 до 10000). Мы проверяем эту выборку на соответствие нормальному закону через критерий Пирсона.
Вот этот код это и делает я так понял. По крайней мере формула в 30 строке кода правильная, да и вообще в программе кажется делается все для расчета этого критерия.

Я хочу применить что-то подобное в моей задачи. У меня генерируются случайные числа от 1 до 3 типа Double. Я хочу взять этот алгоритм и закодить его в Delphi. Для этого нужно понять, что делает эта конструкция.
В теории эта част кода должна считать кол-во значений в каждом интервале. Она это и делает, в сумме полученные значения дадут 100. Но как она это делает я не понимаю. Мне нужно понять, чтобы написать такой же алгоритм на Delphi.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:01     Что за конструкция? #7
Цитата Сообщение от VladSharikov Посмотреть сообщение
У меня генерируются случайные числа от 1 до 3 типа Double.
Если приведенный код Вас устраивает, то подправьте его например для чисел от 1000 до 3000, а где нужно отображать диапазон 1..3 просто делите на 1000.0
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 22:11  [ТС]     Что за конструкция? #8
рррр!!!... =)))

Меня не устраивает код с++, мне нужно переписать его на другом языке)))

Давайте с другого бока.
Перепишите пожалуйста код другим способом. Возможно так пойму.
C++
1
2
3
    for( int i=0;i<N;++i ){
    ++nCount[ f()/Step ];
    }
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:20     Что за конструкция? #9
C++
1
2
3
4
5
for( int i=0;i<N;++i )
{
   int index = f()/Step;
   nCount[index] = nCount[index] + 1;
}
Так яснее?
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 22:36  [ТС]     Что за конструкция? #10
Так яснее, спасибо.

Хочу уточнить. Может сгенериться число 100 например. 100/1000 даст 0.1. Это число округлиться получается? Значит индекс будет 0, правильно? Если например было число 3500, то индекс будет 4, правильно?

Добавлено через 11 минут
Хотя стоп. Если получится число 3500/10000 будет индекс 3. Округляется в меньшую сторону. Даже не округляется, а просто отбрасывается все, что после запятой. Так?
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:50     Что за конструкция? #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
100/1000 даст 0.1.
даст 0. Т.к. целочисленное деление.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 22:54  [ТС]     Что за конструкция? #12
3500/1000 тоже целочисленное деление. Это тоже даст 0? Я же несколько вопросов задал.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:56     Что за конструкция? #13
Цитата Сообщение от VladSharikov Посмотреть сообщение
3500/1000 тоже целочисленное деление.
даст 3.
Цитата Сообщение от VladSharikov Посмотреть сообщение
Если получится число 3500/10000 будет индекс 3.
Даст 0. Но тут, видимо, у Вас просто опечатка.

Добавлено через 52 секунды

Не по теме:

Цитата Сообщение от VladSharikov Посмотреть сообщение
Я же несколько вопросов задал.
Ну я тут не на зарплате вообще-то

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 23:06     Что за конструкция?
Еще ссылки по теме:

Что делает данная конструкция? C++
Что значит эта конструкция C++
Что за конструкция? C++
C++ Что означает конструкция vector<int> v1{ 5 }; ?
Что означает конструкция int x{}; ? C++

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

Или воспользуйтесь поиском по форуму:
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 23:06  [ТС]     Что за конструкция? #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Даст 0. Но тут, видимо, у Вас просто опечатка.
точно. очепятался, извините.

тонкий намек =) да дело не в том. просто вы так ответили, будто бы я итак все знаю. если бы знал, я б и не спрашивал.

спасибо за ответы!
Yandex
Объявления
05.10.2013, 23:06     Что за конструкция?
Ответ Создать тему
Опции темы

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