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

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

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

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

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

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

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Алгоритмізація та програмування 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:57

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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