Генерировать псевдослучайные числа линейным конгруэнтным методом через рекуррентную формулу - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#define LIMIT 30
 
main()
 
{
    const int a=1103515245, c=12345, m=4294967296;
    int i;
    unsigned long long int x;   
    printf ("Vvedute nach. znach. x\n");
    scanf ("%d", &x);
    printf ("*******************************\n");
    for (i=1; i<=LIMIT; ++i)
    {
        x=(a*x+c)%m;
        printf ("%.4d    ", x);
        if (i%5==0)
        {
            printf("\n");
        }
    }
    getchar();
    getchar();
}
На этом шаге программа перестает работать (зависает). Видимо неправильно задан тип переменных.
x=(a*x+c)%m;
Какой тип нужно задать ?

Решение задачи: «Генерировать псевдослучайные числа линейным конгруэнтным методом через рекуррентную формулу»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
#define LIMIT 300
 
int main() {
    unsigned long int x = 0, a=1103515245, c=12345, m = 4294967296;
    //m=1; m <<= 32;
    printf("%zu\n", m);
    printf("Vvedute nach. znach. x\n");
    scanf("%ld", &x);
    printf("Ruad chusel\n");
    printf("*******************************\n");
    for (int i = 1; i <= LIMIT; ++i) {
        x = (a * x + c) % m;
        printf("%10ld ", x);
        if (i % 5 == 0) {
            printf("\n");
        }
    }
    getchar();
    getchar();
}

Объяснение кода листинга программы

В этом коде используется линейный конгруэнтный метод для генерации псевдослучайных чисел.

  1. #include Включает в программу библиотеку стандартного ввода/вывода.
  2. #include Включает в программу библиотеку математических функций.
  3. #define LIMIT 300 Определяет максимальное количество итераций цикла.
  4. int main() { Функция main() является точкой входа в программу.
  5. unsigned long int x = 0, a=1103515245, c=12345, m = 4294967296; Задает значения переменных.
  6. printf(%zu\n, m); Выводит значение переменной m.
  7. printf(Vvedute nach. znach. x\n); Выводит приглашение для ввода начального значения x.
  8. scanf(%ld, &x); Считывает начальное значение x из стандартного ввода.
  9. printf(Ruad chusel\n); Выводит приветствие.
  10. **printf(*******************************\n);** Выводит разделительную строку.
  11. for (int i = 1; i <= LIMIT; ++i) { Запускает цикл для генерации псевдослучайных чисел.
  12. *x = (a x + c) % m;** Генерирует следующее псевдослучайное число методом линейного конгруэнтного преобразования.
  13. printf(%10ld, x); Выводит сгенерированное число.
  14. if (i % 5 == 0) { Если число итераций делится на 5 без остатка, выводит новую строку.
  15. printf(\n); Выводит символ новой строки.
  16. } Конец условия.
  17. getchar(); Считывает символ из стандартного ввода (используется для обработки ввода с клавиатуры).
  18. getchar(); Считывает еще один символ из стандартного ввода.
  19. } Конец цикла.
  20. return 0; Возвращает 0, указывая, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы