Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > генератор псевдослучайных чисел Лемера


Автор: StillPhelix 14.4.2019, 14:09
Это код генератора псевдослучайных чисел Лемера. Нужно пдсчитать все числа в периоде. Но программа считает все числа в массиве, вместотого, чтобы посчитать только те, которые входят в период.
Код

int main()
{
    int t;
    int n;
    int i;
    int a=71;
    int m=251;
    int c=71;
    int p=0;
    int zero=0;
    int one=0;
    int x[250];
    x[0]=5;
    int count=0;
    int *bin;

    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for(n=1;n<=250;n++)x[n]=(a*x[n-1]+c)%m;
    cout<<"Последовательность псевдослучайных чисел: "<<endl;
    for(n=1;n<25;n++)
        for(i=0;i<=10;i++)cout<<x[i]<<", ";
    cout<<endl;
    for (n=0;n<250;n++)
    {
        if(x[n]!=x[0]||n==0)p++;
        if(x[n]==x[0]&&n!=0)break;
        //else p++;
    }
    cout<<"Элементов в периоде: "<<p<<endl;
    return 0;
}

Автор: StillPhelix 14.4.2019, 20:11
У меня стоит Visual Studio 2010. Неправильные результаты почему-то даёт последний цикл for

Автор: xvr 15.4.2019, 15:13
Цитата(StillPhelix @  14.4.2019,  14:09 Найти цитируемый пост)
Но программа считает все числа в массиве, вместотого, чтобы посчитать только те, которые входят в период.

Видимо они все и входят.

PS. Программа странная, куча мусора и мутный цикл в конце  smile 

Автор: StillPhelix 15.4.2019, 20:31
Цитата(xvr @  15.4.2019,  15:13 Найти цитируемый пост)
Видимо они все и входят.

Да это так. Ошибка была в выводе массива на консоль.

Цитата(xvr @  15.4.2019,  15:13 Найти цитируемый пост)
PS. Программа странная, куча мусора и мутный цикл в конце


Это фрагмент кода программы. А последний цикл можно написать проще. В любом случае - разобрался. Всё работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)