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

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

Войти
Регистрация
Восстановить пароль
 
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

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

05.10.2013, 21:28. Просмотров 410. Ответов 13
Метки нет (Все метки)

Привет.
Что за конструкция такая?
Поясните что делает:
C++
1
2
3
  for( int i=0;i<N;++i ){
    ++nCount[ f()/Step ];
  }
f() - возвратит случайное число от 0 до 10000, Step - шаг определенный. 1000 например.

Полный код программы и результат работы здесь. http://ideone.com/vNB9Ow . Не понимаю что делает вот эта часть кода. Поясните пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 21:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за конструкция? (C++):

Что за конструкция? - C++
Доброго времени суток. Встречал где-то конструкцию типа for(;;) { тыры-пыры; } В общем, без указания параметров цикла. Встречал...

Что за конструкция? - C++
что означает такая конструкция??? int *&amp;node

Что за конструкция в языке? - C++
int a = {{1,2},3}; что значат скобки внутри скобок?

Что за конструкция языка - C++
int a={{{1,2},3},{{4,5},6},{{7,8},9}}; как можно вывести значение 6 например? как вообще обращаться к элементам массива?

Что означает конструкция int x{}; ? - C++
Что означает конструкция int x{}; ???

Что значит эта конструкция? - C++
Расскажите что это за конструкция double fm(double, int);

13
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.10.2013, 21:33 #2
инкрементирует элементы массива
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 21:48  [ТС] #3
Подробнее можно пожалуйста.
Результат f()/Step от 0 до 10 кажется. Правильно?
а если у меня будет генерироваться случайное число от 0 до 1? причем Double?
Подробнее поясните пожалуйста.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.10.2013, 21:51 #4
Цитата Сообщение от VladSharikov Посмотреть сообщение
Результат f()/Step от 0 до 10 кажется. Правильно?
Правильно.
Цитата Сообщение от VladSharikov Посмотреть сообщение
а если у меня будет генерироваться случайное число от 0 до 1? причем Double?
В какой функции? И вообще, может проще (правильнее) написать код под задание, чем выяснить, что делает (возможно и вовсе бредовый) какой-то код?
1
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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?
то без преобразования к целочисленному типу не будет работать
0
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.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.10.2013, 22:01 #7
Цитата Сообщение от VladSharikov Посмотреть сообщение
У меня генерируются случайные числа от 1 до 3 типа Double.
Если приведенный код Вас устраивает, то подправьте его например для чисел от 1000 до 3000, а где нужно отображать диапазон 1..3 просто делите на 1000.0
1
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 ];
    }
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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;
}
Так яснее?
1
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. Округляется в меньшую сторону. Даже не округляется, а просто отбрасывается все, что после запятой. Так?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.10.2013, 22:50 #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
100/1000 даст 0.1.
даст 0. Т.к. целочисленное деление.
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.10.2013, 22:54  [ТС] #12
3500/1000 тоже целочисленное деление. Это тоже даст 0? Я же несколько вопросов задал.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.10.2013, 22:56 #13
Цитата Сообщение от VladSharikov Посмотреть сообщение
3500/1000 тоже целочисленное деление.
даст 3.
Цитата Сообщение от VladSharikov Посмотреть сообщение
Если получится число 3500/10000 будет индекс 3.
Даст 0. Но тут, видимо, у Вас просто опечатка.

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

Не по теме:

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

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

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

спасибо за ответы!
0
05.10.2013, 23:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 23:06
Привет! Вот еще темы с ответами:

Что делает данная конструкция? - C++
int x = 5; 0 = x + x; Что она делает, как называется и зачем используется?

Что значит эта конструкция - C++
Здравствуйте. return (h&lt;0) ? (h + a) : h; Впервые вижу такую строку. Что на значит. Спасибо.

Что за static friend конструкция? - C++
Здравствуйте, изучаю C++, откопал я тут случайно пример: class t{ int var; public: t(int val):var(val){}; static friend int...

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?


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

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

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