Главная страница
Навигация по странице:

  • Лабораторная работа №1

  • Постановка задачи

  • Листинг программы

  • Лабораторная работа по ООП 2 курс. Отчет 1. Вычисление функций с использованием их разложения в степенной ряд


    Скачать 79.05 Kb.
    НазваниеВычисление функций с использованием их разложения в степенной ряд
    АнкорЛабораторная работа по ООП 2 курс
    Дата17.01.2022
    Размер79.05 Kb.
    Формат файлаdocx
    Имя файлаОтчет 1.docx
    ТипЛабораторная работа
    #333671

    Министерство образования Российской Федерации

    Федеральное государственное бюджетное образовательное учреждение

    высшего образования

    «Пермский национальный исследовательский политехнический университет»

    Кафедра «Информационные технологии и автоматизированные системы»

    Лабораторная работа №1

    по дисциплине «Объектно-ориентированное программирование»

    Тема:
    Вычисление функций с использованием их разложения в степенной ряд


    Вариант 5

    Выполнил

    студент группы ИВТ-20-2б

    Исламов И. И.

    Проверила

    доцент кафедры ИТАС

    Викентьева О. Л.

    Пермь, 2021

    Постановка задачи


    Задача 1. Определить тип заданных выражений и найти их значения:

    1.--m-n++
    2.m*m3. n-->++m

    Составить систему тестов и вычислить полученное выражение для нескольких значений Х, определить при каких Х выражение не может быть вычислено.

    Задача 2. Записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит.


    Составить систему тестов и вычислить полученное выражение для нескольких точек, принадлежащих и не принадлежащих заштрихованной области.

    Задача 3. Вычислить значение выражения, используя различные вещественные типы данных (float и double)


    Результаты всех вычислений вывести на печать.

    Объяснить полученные результаты.

    Анализ

    Для решения задачи 2 используется формула окружности



    где центр окружности, – координаты точки окружности, – радиус окружности.

    Заштрихованная область является полукругом радиуса центром в начале координат, поэтому

    Листинг программы

    Задание 1.

    1. using System;

    2.  

    3. namespace lab1

    4. {

    5. class Program

    6. {

    7. static int InputInteger(string text = "")

    8. {

    9. int result;

    10. bool ok;

    11. do

    12. {

    13. Console.Write(text);

    14. string buf = Console.ReadLine();

    15. ok = Int32.TryParse(buf, out result);

    16. } while (!ok);

    17. return result;

    18. }

    19. static double InputDouble(string text = "")

    20. {

    21. double result;

    22. bool ok;

    23. do

    24. {

    25. Console.Write(text);

    26. string buf = Console.ReadLine();

    27. ok = Double.TryParse(buf, out result);

    28. } while (!ok);

    29. return result;

    30. }

    31. static void Main(string[] args)

    32. {

    33. int m, n;

    34. double x;

    35. Console.WriteLine("Введите значение m: ");

    36. m = InputInteger();

    37. Console.WriteLine("Введите значение n: ");

    38. n = InputInteger();

    39. First(m, n);

    40. Second(m, n);

    41. Third(m, n);

    42. Console.WriteLine("Введите значение x: ");

    43. x = InputDouble();

    44. Console.WriteLine($"tg(x) - (5-x)^4 = {Math.Tan(x)} - {Math.Pow(5 - x, 4)} = {Math.Tan(x) - Math.Pow(5 - x, 4)}");

    45. }

    46. static void First(int m, int n)

    47. {

    48. Console.WriteLine($"--m-n++ = {--m - n++}");

    49. Console.WriteLine($"M, N = {m}, {n}");

    50. Console.WriteLine("\n---\n");

    51. }

    52. static void Second(int m, int n)

    53. {

    54. Console.WriteLine($"m*m < n++: {m * m < n++}");

    55. Console.WriteLine($"M, N = {m}, {n}");

    56. Console.WriteLine("\n---\n");

    57. }

    58. static void Third(int m, int n)

    59. {

    60. Console.WriteLine($"n-- > ++m: {n-- > ++m}");

    61. Console.WriteLine($"M, N = {m}, {n}");

    62. Console.WriteLine("\n---\n");

    63. }

    64. }

    65. }

    Задание 2.

    1. using System;

    2. namespace lab1._2

    3. {

    4. class Program

    5. {

    6. static double InputDouble(string text = "")

    7. {

    8. double result;

    9. bool ok;

    10. do

    11. {

    12. Console.Write(text);

    13. string buf = Console.ReadLine();

    14. ok = Double.TryParse(buf, out result);

    15. } while (!ok);

    16. return result;

    17. }

    18. static void Main(string[] args)

    19. {

    20. double X1, Y1;

    21. Console.WriteLine("Введите координату X: ");

    22. X1 = InputDouble();

    23. Console.WriteLine("Введите координату Y: ");

    24. Y1 = InputDouble();

    25. bool isIncluded = (X1 >= 0 && X1 <= 1 && Y1 >= -1 && Y1 <= 1 && (Y1 * Y1 + X1 * X1 <= 1));

    26. Console.WriteLine($"Принадлежность координат ({X1}, {Y1}) is {isIncluded}");

    27. Console.WriteLine();

    28. }

    29. }

    30. }

    Задание 3.

    1. using System;

    2.  

    3. namespace lab1._3

    4. {

    5. class Program

    6. {

    7. static void Main(string[] args)

    8. {

    9. double A = 100, B = 0.001;



    10. double dT1 = Math.Pow(A - B, 3);

    11. double dT2 = Math.Pow(A, 3) - 3 * Math.Pow(A, 2) * B;

    12. double dT3 = 3 * A * Math.Pow(B, 2) - Math.Pow(B, 3);

    13. Console.WriteLine($"DOUBLE = {(dT1 - dT2) / dT3}");



    14. float fT1 = (float)Math.Pow(A - B, 3);

    15. float fT2 = (float)(Math.Pow(A, 3) - 3 * (float)Math.Pow(A, 2) * B);

    16. float fT3 = (float)(3 * A * Math.Pow(B, 2) - Math.Pow(B, 3));

    17. Console.WriteLine($"FLOAT = {(fT1 - fT2) / fT3}");

    18. }

    19. }

    20. }


    Блок схема

    Задание 1.



    Задание 2.



    Задание 3.



    Системы тестов решения задач

    Тесты для задачи 1


    Значения m и n могут быть любыми целыми числами.

    Необходимо проверить ввод целых и дробных чисел, а также ввод символов

    Для выражения



    Точность, предоставляемая типом double не позволяет получить такое значение x, при котором значение tg(x) не существует.

    Результаты тестов:

    Тест

    Входные данные

    Ожидаемый результат

    Фактический результат

    Т1

    m = M(5)
    n = -2

    x = 1

    Повторное приглашение ввести M, затем:
    --m-n++ = 6

    M, N = 4, -1
    m*m < n++: False

    M, N = 5, -1
    n-- > ++m: False

    M, N = 6, -3
    tg(x) - (5-x)^4 = 1,5574077246549023 - 256 = -254,4425922753451

    Совпадает с ожидаемым

    Т2

    m = 0

    n = 0

    x = 0

    --m-n++ = -1

    M, N = -1, 1
    m*m < n++: False

    M, N = 0, 1
    n-- > ++m: True

    M, N = 1, -1
    tg(x) - (5-x)^4 =

    0 - 625 = -625

    Совпадает с ожидаемым

    Т3

    m = -1

    n = 4,0(0)

    x = X(-14,88)

    Повторное приглашение ввести N, затем:

    --m-n++ = -6

    M, N = -2, 5
    m*m < n++: True

    M, N = -1, 5
    n-- > ++m: True

    M, N = 0, 3
    tg(x) - (5-x)^4 = 1,088971008059664 - 156194,42196736007 = -156193,33299635202

    Совпадает с ожидаемым

    Т4

    m = 5,5(5)

    n = n(15)

    x = sy(3,141592)

    Повторное приглашение ввести M, затем:

    --m-n++ = -11

    M, N = 4, 16
    m*m < n++: False

    M, N = 5, 16
    n-- > ++m: True

    M, N = 6, 14
    Повторное приглашение ввести X, затем:

    tg(x) - (5-x)^4 = -6,535897930763814E-07 - 11,927907576368938 = -11,927908229958732


    Совпадает с ожидаемым


    Тестирование по методу чёрного ящика:

    Переменная

    Тип

    Т1

    Т2

    Т3

    Т4


    m

    char













    double













    int













    > 0













    < 0













    = 0















    n

    char













    double













    int













    > 0













    < 0













    = 0















    x

    char













    double













    int













    > 0













    < 0













    = 0














    Тесты для задачи 2.


    X и Y могут быть любыми действительными числами

    Необходимо проверить ввод положительных, отрицательных чисел, нуля и символов.

    Результаты тестирования:

    Тест

    Входные данные

    Ожидаемый результат

    Фактический результат

    Т1

    x = 0

    y = y(0)

    Повторное предложение ввести Y, затем:

    True

    Совпадает с ожидаемым

    Т2

    x = x(0,5)

    y = -0,5

    Повторное предложение ввести X, затем:

    True

    Совпадает с ожидаемым

    Т3

    x = 1

    y = 1,0

    False

    Совпадает с ожидаемым

    Т4

    x = -5,0

    y = 0

    False

    Совпадает с ожидаемым

    Тестирование по методу чёрного ящика:

    Переменная

    Тип

    Т1

    Т2

    Т3

    Т4


    x

    char













    > 0













    < 0













    = 0














    y

    char













    > 0













    < 0













    = 0














    Тестирование задачи 3.


    Вычисление значения выражения при без действий пользователя для двух типов данных и, по правилам математики, результат должен равняться 1.

    Результат для float – 0;

    Результат для double – 0,9999996943445747

    Объяснение полученных результатов


    В задаче 2 получение результата происходит без проверки внутри if так как выражение (X1 >= 0 && X1 <= 1 && Y1 >= -1 && Y1 <= 1 && (Y1 * Y1 + X1 * X1 <= 1)) вернёт значение логического типа, что позволяет сразу присвоить его в переменную соответствующего типа.

    В задаче 3 результаты объясняются точностью типов данных float и double.

    Точность float не позволяет получить результат, отличный от нуля

    Точность double позволяет получить результат, близкий к 1, но всё равно недостаточно точный


    написать администратору сайта