Рекурсивний виклик функції

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмізація та програмування

Частина тексту файла (без зображень, графіків і формул):

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Алгоритмізація та програмування 1: Базові концепції програмування ЗВІТ до лабораторної роботи № 5 «Рекурсивний виклик функції» Варіант 15 Дата «23» листопада 2021 Завдання на лабораторну роботу: 1. Ознайомитись з рекурсивним викликом функції. 2. Розробити алгоритмом розрахунку значення функції за її розкладенням у ряд за умови отримання результату з заданою  точністю. Врахувати діапазон дозволених значень для змінної x. 3. У якості індивідуального завдання необхідно написати програмний код, що реалізує алгоритм розрахунку значень функцій за їх розкладенням в ряд із заданою користувачем точністю. Завдання обрати згідно свого варіанта (див. Додаток 5). Завдання варіанту 15 у додатку 5: / РЕЗУЛЬТАТ РОБОТИ ПОТРІБНО: 1. Роздрукувати (вивести на екран) точне значення функції, її приблизне значення та точність розрахунку. 2. Відкритий для редагування програмний код розмістити на сайті https://replit.com/ (посилання через кнопку «+ Share»). 3. Звіт до комп’ютерного практикуму № 5 додати в свій Клас на ресурсі https://classroom.google.com/. Теоретичні відомості та хід виконання завдання: Для виконання даної лабораторної роботи №5 був використаний сайт replit.com . На цьому сайтів був написаний код програми на мові С. Саму програму можна переглянути за посиланням: https://replit.com/join/wobhxkwjyc-tr-15fundamient Для виконання поданого завдання спочатку було написано функцію factorial(), для обрахунку факторіала. На початку програми користувачем вводиться точність(кількість елементів рядку(N)) та кут у градусах(Xd), який пізніше переводиться у радіани(Xr). Наступним кроком є створення власних змінних sin та cos за допомогою обчислення суми ряду. Для цього був використаний цикл for() і формули, дані у завданні до роботи: / Далі використовуючи створені змінні та формули дані у завданні ми обраховуємо потрібні нам значення x2 та y2. Після цього, створюємо змінні x1 та y1, які обраховуємо за допомогою даних формул і бібліотеки math.h , у яку вже влаштовані функції sin() та cos(). І обраховуємо помилку вираховуючи різницю між x1 та x2, y1 та y2 (значеннями отриманими після обрахунку за допомогою суми ряду та отриманими після обрахунку за допомогою бібліотеки) Блок схема програми: / Скріншот програми: / / Результат обрахунків програми: Для N = 3: / Для N=10: / Висновок: Під час виконання даної лабораторної роботи було удосконалено навички роботи з рекурсійними функціями. Набуто досвід з написання коду для обчислення суми ряду. Також було розроблено програмний код, що реалізує розрахунок значень функції за їх розкладенням в ряд із заданою користувачем точністю. Цей алгоритм було перевірено через різницю із функціями даними в математичній бібліотеці. Посилання на Repl: https://replit.com/join/wobhxkwjyc-tr-15fundamient Копія коду: #include <stdio.h> #include <stdlib.h> #include <math.h> #define M_PI 3.14159265358979323846 double factorial(double number); int main(){ // к-сть елементів ряду int N; printf("Введіть потрібну к-сть елементів ряду(чим більшою є к-сть елементів ряду, тим більшою є точність розрахунків):\n"); scanf("%d", &N); double Xr, Xd; printf("Введіть кут(у градусах):\n"); scanf("%lf", &Xd); // перевод в радіани Xr = Xd * M_PI / 180.0; printf("Значення в радіанах:\nXr = %lf\n\n", Xr); // Значення будь-яке, тому що за умовою ОДЗ: (from -infinity to +infinity) // Cтворення змінних cos та sin за допомогою суми ряду double sinFi , cosFi; for(int i = 0; i < N; i++) { sinFi += pow(-1, i) * pow(Xr, 2*i+1)/factorial(2*i+1); cosFi += pow(-1, i) * pow(Xr, 2*i)/factorial(2*i); } printf("Значення sin та cos, обраховані за допомогою суми ряду:\nsinFi = %lf\t cosFi = %lf\n\n",sinFi, cosFi); //Введення радіуса кола у програму double k; printf("Введіть потрібний радіус кола:\n"); scanf("%lf", &k); double x1, y1, x2, y2; //Обчислення х та у за допомогою математичної бібліотеки x1 = k * (cos(Xr) + sin(Xr)); y1 = k * (sin(Xr) - cos(Xr)); // Обчислення х та у за допомогою суми ряду x2 = k * (cosFi + sinFi); y2 = k * (sinFi - cosFi); // Обрахунок похибки в обрахунках double ex, ey; ex = fabs(x2-x1); ey = fabs(y2-y1); printf("\nРезультати виконання програми:\nx1 = %lf,\ty1 = %lf\n", x1, y1); printf("\nРезультати виконання програми:\nx2 = %lf,\ty2 = %lf\n", x2, y2); printf("\nПохибка обчислення значень:\nex = %lf,\tey = %lf", ex, ey); } // Метод для обрахування факторіалу double factorial(double number) { if(number <= 0) return (1.0); else return (number * factorial(number - 1)); }
Антиботан аватар за замовчуванням

03.05.2023 18:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!