матеріали для
підтримки вивчення предмету

Математичні функції. Розв’язування задач на обчислення

Під час розв’язання задач на проведення обчислень, окрім арифметичних операцій можуть знадобитися більш складні дії: піднесення числа до степеню, знаходження косинуса тощо. В мові C# існує спеціальний клас Math, який містить ряд основних математичних функцій. Розглянемо деякі з них.

Математичні функції

Функція Опис
Math.Abs(x) Модуль числа
Math.Sqrt(x) Квадратний корінь числа
Math.Pow(x,a) Піднесення числа x в степінь а
Math.Sin(x) Sin кута x
Math.Cos(x) Cos кута x
Math.Round(x,d) Заокруглення числа x до d знаків після коми
Math.Truncate(x) Ціла частина числа
Math.PI Значення числа π
таблиця 7

Примітка 1. Всі перелічені функції повертають результат типу double.

Примітка 2. У функціях Sin та Cos величина кута задається в радіанах.

Примітка 3. Функцію Round можна використовувати без другого параметра d. В такому випадку заокруглення відбудеться до цілого.

Явне перетворення типів

Програмування на C#
рис. 5.1

Розв’яжемо першу задачу на повторення. Відомо пройдений шлях та час руху автомобіля (обидва значення є цілими числами). Потрібно знайти швидкість руху автомобіля.

Створимо нове рішення lesson_5, проект task_1. Розробимо інтерфейс програми згідно рис. 5.1.

Далі напишемо програмний код для реалізації такого алгоритму:

  1. дізнаємося введені користувачем шлях та час;
  2. обчислимо швидкість руху;
  3. виведемо результат.
private void button1_Click(object sender, EventArgs e)
    {
       int s = int.Parse(textBox1.Text);
       int t = int.Parse(textBox2.Text);
       double v = s / t;
       label4.Text = v.ToString();
    }

Запустимо та протестуємо даний проект для таких вхідних даних: шлях = 120, час = 3. Програма видасть результат: Швидкість = 53. Проте правильною є відповідь 53,3333333333. Справа в тому, що при обчисленні швидкості ми ділимо змінну s на змінну t. Обидві змінні є цілочисельними, а отже і результат буде цілим. Для того, щоб результат був дробовим, потрібно, щоб ділене або (і) дільник були дробовими. Змінимо рядок
double v = s / t;
дописавши перед s у дужках тип double
double v = (double) s / t;

Така дія змінює тип змінної s на дробовий і називається явним перетворенням типів.

Також до програмного коду можна додати рядок для заокруглення результату, наприклад, до двох знаків після коми

v = Math.Round(v, 2);

В остаточному варіанті розв’язок буде мати такий вигляд:

private void button1_Click(object sender, EventArgs e)
    {
        int s = int.Parse(textBox1.Text);
        int t = int.Parse(textBox2.Text);
        double v = (double) s / t;
        v = Math.Round(v, 2);
        label4.Text = v.ToString();
    }
Програмування на C#
рис. 5.2

Коментарі в коді

Розглянемо завдання №2 (рішення lesson_5, проект task_2).

Відомо катети прямокутного трикутника (цілі числа). Скласти програму для обчислення гіпотенузи, периметра і площі даного трикутника. Всі результати вивести з точністю 3 знаки після коми.

Інтерфейс програми зображено на Рис.5.3.

Для розв’язання завдання нам знадобиться п’ять змінних: SideA, SideB – типу byte; та SideC, Perimetr, Square – типу double.

Програмування на C#
рис. 5.3

Програмний код наведено нижче:

private void button1_Click(object sender, EventArgs e)
    {
        byte SideA = byte.Parse(textBox1.Text);
        byte SideB = byte.Parse(textBox2.Text);
        double SideC = Math.Sqrt(Math.Pow(SideA, 2) + Math.Pow(SideB, 2));
        SideC = Math.Round(SideC, 3);
        double Perimetr = SideA + SideB + SideC;
        double Square = 1 / 2.0 * SideA * SideB;
        Square = Math.Round(Square, 3);
        label6.Text = SideC.ToString();
        label7.Text = Perimetr.ToString();
        label8.Text = Square.ToString();
    }

В даному коді значення змінних SideC та Square спочатку обчислюються, а потім окремими командами заокруглюється до трьох знаків після коми. Програмний код можна скоротити, додавши в рядок з обчисленням функцію заокруглення.

При редагуванні коду не будемо видаляти старі рядки, а закоментуємо їх. Коментарі в програмі дозволяють писати пояснення до фрагментів коду або позначати команди, які не потрібно виконувати компілятору. Для того, щоб закоментувати один рядок коду, перед ним потрібно записати //. Щоб закоментувати блок коду, потрібно записати символи /* та */ на початку та в кінці. Також в панелі інструментів Visual Studio передбачені відповідні кнопки «Закомментировать выделенные строки» та «Разкомментировать выделенные строки».

Отже, закоментувавши деякі рядки та додавши нові, отримаємо програмний код:

private void button1_Click(object sender, EventArgs e)
    {
        byte SideA = byte.Parse(textBox1.Text);
        byte SideB = byte.Parse(textBox2.Text);
        //double SideC = Math.Sqrt(Math.Pow(SideA, 2) + Math.Pow(SideB, 2));
        //SideC = Math.Round(SideC, 3);
        double SideC = Math.Round(Math.Sqrt(Math.Pow(SideA, 2) +
Math.Pow(SideB, 2)), 3); double Perimetr = SideA + SideB + SideC; //double Square = 1 / 2.0 * SideA * SideB; //Square = Math.Round(Square, 3); double Square = Math.Round(1 / 2.0 * SideA * SideB, 3); label6.Text = SideC.ToString(); label7.Text = Perimetr.ToString(); label8.Text = Square.ToString(); }

Практичне завдання

Задача №3. Відомо радіус круга (ціле число). Обчислити площу круга з точністю 2 знаки після коми. В програмі потрібно використати математичну константу Math.PI. (lesson_5, проект task_3). Орієнтовний інтерфейс програми зображено на Рис. 5.4.

Програмування на C#
рис. 5.4

Задача №4. Відомо сторона квадрата (ціле число). Скласти програму для обчислення периметра, площі та діагоналі квадрата з точністю 1 знак після коми (lesson_5, проект task_4) Рис. 5.5.

Програмування на C#
рис. 5.5

Консольна сторінка – складене форматування виводу

Програмування на C#
рис. 5.6

Додайте до рішення «lesson_5» проект «task_5_console» для розв’язання наступного завдання: відомо величина кута – ціле число в градусах. Скласти програму для обчислення sin та cos даного кута. Результати обчислення вивести з точністю 5 знаків після коми.

При розв’язанні даного завдання потрібно згадати, що у функціях sin та cos аргументи задаються в радіанах. Для переведення градусів у радіани потрібно градуси помножити на π і поділити на 180. Нижче наведено код програми для розв’язання поставленої задачі:

static void Main(string[] args)
    {
        Console.Write("Введiть величину кута ");
        int a = int.Parse(Console.ReadLine());
        double x = Math.Round(Math.Sin(a * Math.PI / 180), 5);
        double y = Math.Round(Math.Cos(a * Math.PI / 180), 5);
        Console.WriteLine("Sin " + a + " = " + x);
        Console.WriteLine("Cos " + a + " = " + y);
    }

Звернемо увагу на виведення відповіді на екран. Рядок відповіді складається з текстових повідомлень і змінних, значення яких виводяться на екран. Таке виведення можна реалізувати в інший спосіб, використавши складене форматування:

Console.WriteLine("Sin {0} = {1}", a, x);

У фігурних дужках записують індекси, яким відповідають змінні, що записані після повідомлення через кому. В нашому випадку індексу {0} відповідає змінна a, індексу {1} – змінна x.

Отже, закоментувавши рядки з виведенням відповідей та додавши виведення відповідей розглянутим щойно способом, отримаєм такий програмний код:

static void Main(string[] args)
    {
        Console.Write("Введiть величину кута ");
        int a = int.Parse(Console.ReadLine());
        double x = Math.Round(Math.Sin(a * Math.PI / 180), 5);
        double y = Math.Round(Math.Cos(a * Math.PI / 180), 5);
        //Console.WriteLine("Sin " + a + " = " + x);
        //Console.WriteLine("Cos " + a + " = " + y);
        Console.WriteLine("Sin {0} = {1}", a, x);
        Console.WriteLine("Cos {0} = {1}", a, y);
    }

Консольна сторінка – практичне завдання

Задача №6. Обчисліть радіус кола (з точністю 3 знаки після коми) за введеною довжиною кола (lesson_5, проект task_6) Рис. 47.

Програмування на C#
рис. 5.7

Задача №7. Відомо x – дробове число. Обчислити значення виразу y=|x5-2|+3x з точністю 3 знаки після коми (lesson_5, проект task_7) Рис. 5.8.

Програмування на C#
рис. 5.8

Олімпіадна сторінка – розв’язування задач на обчислення

Задача №924 - Кільце - https://www.e-olymp.com/uk/problems/924

Програмування на C#

Задано площу кільця й радіус зовнішнього кола. Визначити радіус внутрішнього кола.

Вхідні дані: Задано два дійсних числа: площа кільця і радіус зовнішнього кола, шо не перевищує 100.

Вихідні дані: Вивести радіус внутрішнього кола з 2 десятковими знаками.

Вхідні дані #1: 50.2655 5

Вихідні дані #1: 3.00

Розв’язок:

Розв’язавши задачу математично, отримаємо формулу для обчислення радіуса внутрішнього кола:

Програмування на C#

Скориставшись функціями Sqrt, Pow, Round та константою PI, запишемо програму для розв’язання даної задачі:

static void Main(string[] args)
    {
        string[] s = Console.ReadLine().Split(' ');
        double S = double.Parse (s[0]);
        double R1 = double.Parse (s[1]);
        double R2 = Math.Round(Math.Sqrt(Math.Pow(R1, 2) - S / Math.PI), 2);
        Console.WriteLine(R2);
    }

Олімпіадна сторінка – завдання

Задача №957 – Квадратний корінь - https://www.e-olymp.com/uk/problems/957

Знайти квадратний корінь суми цифр трицифрового натурального числа.

Вхідні дані: Одне натуральне трицифрове число.

Вихідні дані: Вивести квадратний корінь з 3 десятковими цифрами.

Вхідні дані #1: 178

Вихідні дані #1: 4.000