Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Генератор псевдослучайных чисел Лемера

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

sunstars

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это код генератора псевдослучайных чисел Лемера. Нужно пдсчитать все числа в периоде. Но программа считает все числа в массиве, вместотого, чтобы посчитать только те, которые входят в период.

Код:
 
#include <iostream>
#include <malloc.h>
#include <windows.h>
#include <iomanip>
 
using namespace std;
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;
}
 

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

Всего записей: 22 | Зарегистр. 06-01-2016 | Отправлено: 17:10 14-04-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сразу вижу ошибку в первой же строке
    int x[250];
 
    for(n=1; n <= 250;n++)x[n]=(a*x[n-1]+c)%m;
 
дальше давай сам...
 
и со всеми задачами на С/С++ сюда:
http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=4338&glp
 
Добавлено:
у тебя период больше 250...
 
попробуй так:
 

Код:

#include <iostream>
#include <windows.h>
using namespace std;
 
#define N 2500
 
int main() {
  int i, n;
  int a = 71;
  int m = 251;
  int c = 71;
  int p = 0;
  int x[N];
 
  x[0] = 5;
 
  for (n = 1; n < N; n++)
    x[n] = (a*x[n-1] + c) % m;
 
  cout << "Последовательность псевдослучайных чисел: " << endl;
 
  for (n = 0; n < N; n++) cout << x[n] << endl;
 
  cout << endl;
 
  p = 1;
  for (n = 1; n < N; n++) {
 
    if (x[n] == x[0]) break;
    else p++;
  }
 
  cout  << endl << "Элементов в периоде: " << p << endl;
  return 0;
}//main

 
Добавлено:
 
 
а, кстати, вот этими двумя циклами ты рисуешь херню, т.е. _всегда_ первые 11 значений и так 24 раза...
 
for(n=1;n<25;n++)
        for(i=0;i<=10;i++)cout<<x[i]<<", ";

Всего записей: 18832 | Зарегистр. 06-12-2002 | Отправлено: 23:57 14-04-2019 | Исправлено: akaGM, 00:51 15-04-2019
sunstars

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Количество элементов в периоде всёравно не считает.
q]а, кстати, вот этими двумя циклами ты рисуешь херню, т.е. _всегда_ первые 11 значений и так 24 раза... [/q]
Я знаю. Что подали на вход, то и получили на выходе.

Всего записей: 22 | Зарегистр. 06-01-2016 | Отправлено: 18:51 15-04-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
выдача при N=2500, даны реперы 1, 251 и 501
можешь проверить...
 

Цитата:
всёравно не считает
всёравно проверяй...
 
фрагмент выдачи при N=2500

Всего записей: 18832 | Зарегистр. 06-12-2002 | Отправлено: 19:17 15-04-2019 | Исправлено: akaGM, 19:20 15-04-2019
sunstars

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Работает. Проблема была с выводом сгенерированого массива. А как его вывести в строки по  10 элементов?

Всего записей: 22 | Зарегистр. 06-01-2016 | Отправлено: 19:51 15-04-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А как его вывести в строки по  10 элементов?
не наглей, тебе помогли в гораздо более серьёзной вещи, а это тебе домашнее задание...

Всего записей: 18832 | Зарегистр. 06-12-2002 | Отправлено: 20:07 15-04-2019
sunstars

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за помощь.

Всего записей: 22 | Зарегистр. 06-01-2016 | Отправлено: 20:10 15-04-2019
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Генератор псевдослучайных чисел Лемера

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru