Объяснить(прокомментировать)строки программы - C (СИ)
Формулировка задачи:
Написать генератор псевдослучайных чисел по алгоритму f[n] = (f[n - 1] + f[n - 2] + f[n - 3]) % 239;f(0)=f(1)=f(2)=30.Посчитать частоту каждого числа при выборке 100000
int gen(int n) { static unsigned int f[100000] = { 30, 30, 30 }; if (n >= 0 && n <= 2) return 30; f[n] = (f[n - 1] + f[n - 2] + f[n - 3]) % 239; return f[n]; } int main() { int a[239] = { 0 }; for (int i = 0; i < 100000; i++) a[gen(i)]++; for (int i = 0; i < 239; i++) printf("Chastota chisla %d ravna %d\n", i, a[i]); return 0; }
Решение задачи: «Объяснить(прокомментировать)строки программы»
textual
Листинг программы
#include <stdio.h> // подключаем библеотеку ввода вывода int gen(int n) // n - число от 0 до 100000 { static unsigned int f[100000] = { 30, 30, 30}; // объявляем статический массив и инициализирруем первые 3 элемента числом 30 (первые 3 элемента ряда). if (n >= 0 && n <= 2) // граничные условия рекурсии для первых 3 членов ряда return 30; // возвращаем 30 - значение первых членов ряда f[n] = (f[n - 1] + f[n - 2] + f[n - 3]) % 239; // вызываем функцию рекурсивно от предедущих трех членов последовательности (начиная с 4-ого). return f[n]; // возвращаем n-ый элемент массива, содержащий сгенерированное число } int main() { int a[239] = { 0 }; // объявляем массив от 0 до 238 элементов (так как максимально возможное число 239). for (int i = 0; i < 100000; i++) // по условию 100 тыс a[gen(i)]++; // увеличиваем значение элемента массива на единицу по индексу, который вернула функция генератор числа. for (int i = 0; i < 239; i++) // вывод printf("Chastota chisla %d ravna %d\n", i, a[i]); // получившегося массива return 0; // конец }
Объяснение кода листинга программы
- #include
- подключаем библиотеку ввода вывода - int gen(int n) - объявляем функцию генерации чисел
- static unsigned int f[100000] = { 30, 30, 30}; - объявляем статический массив и инициализируем первые 3 элемента числом 30 (первые 3 элемента ряда).
- if (n >= 0 && n <= 2) - граничные условия рекурсии для первых 3 членов ряда
- return 30; - возвращаем 30 - значение первых членов ряда
- f[n] = (f[n - 1] + f[n - 2] + f[n - 3]) % 239; - вызываем функцию рекурсивно от предедущих трех членов последовательности (начиная с 4-ого).
- return f[n]; - возвращаем n-ый элемент массива, содержащий сгенерированное число
- int main() - объявляем основную функцию программы
- int a[239] = { 0 }; - объявляем массив от 0 до 238 элементов (так как максимально возможное число 239).
- for (int i = 0; i < 100000; i++) - цикл для генерации 100 тыс чисел
- a[gen(i)]++; - увеличиваем значение элемента массива на единицу по индексу, который вернула функция генератор числа.
- for (int i = 0; i < 239; i++) - цикл для вывода получившегося массива
- printf(
Chastota chisla %d ravna %d\n
, i, a[i]); - вывод получившегося элемента массива - return 0; - конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д