Объяснить(прокомментировать)строки программы - 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; // конец
}

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

  1. #include - подключаем библиотеку ввода вывода
  2. int gen(int n) - объявляем функцию генерации чисел
  3. static unsigned int f[100000] = { 30, 30, 30}; - объявляем статический массив и инициализируем первые 3 элемента числом 30 (первые 3 элемента ряда).
  4. if (n >= 0 && n <= 2) - граничные условия рекурсии для первых 3 членов ряда
  5. return 30; - возвращаем 30 - значение первых членов ряда
  6. f[n] = (f[n - 1] + f[n - 2] + f[n - 3]) % 239; - вызываем функцию рекурсивно от предедущих трех членов последовательности (начиная с 4-ого).
  7. return f[n]; - возвращаем n-ый элемент массива, содержащий сгенерированное число
  8. int main() - объявляем основную функцию программы
  9. int a[239] = { 0 }; - объявляем массив от 0 до 238 элементов (так как максимально возможное число 239).
  10. for (int i = 0; i < 100000; i++) - цикл для генерации 100 тыс чисел
  11. a[gen(i)]++; - увеличиваем значение элемента массива на единицу по индексу, который вернула функция генератор числа.
  12. for (int i = 0; i < 239; i++) - цикл для вывода получившегося массива
  13. printf(Chastota chisla %d ravna %d\n, i, a[i]); - вывод получившегося элемента массива
  14. return 0; - конец программы

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


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

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

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