You are on page 1of 13

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

Національний технічний університет України


"Київський політехнічний інститут імені Ігоря Сікорського"

Факультет інформатики та обчислювальної техніки


Кафедра інформаційних систем та технологій

Програмування.
Лабораторна робота №3
Тема: Управління потоком виконання
Варіант № 16

Виконала:
студентка групи ІС-33
Овсяник О.В.

Київ-2024
Мета роботи:
1. Вивчити особливості використання текстових файлів
2. Навчитися застосовувати текстові файли в програмуванні
using System;
using System.Text;

namespace laba3
{
class Program
{

public static void Main(String[] args)


{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Лабораторна робота №3\nМоклюк Максим ІС-22\nВаріант №18");
Console.WriteLine("Введіть число:\n1 - Для першого завдання\n2 - Для другого завдання\n3 - Для
третього завдання");
int number = Convert.ToInt32(Console.ReadLine());
if (number == 1)
{
Task1.task1(args);
}
else if (number == 2)
{
Task2.task2(args);
}
else if (number == 3)
{
Task3.task3(args);
}
else
{
Console.WriteLine("Неправильне число. Введіть число від 1 до 3");
}
}
}
}

Завдання №1

using System;
using System.Text;
using System.Data;

namespace Lab3
{
internal class Task1
{
public static void task1(String[] args)
{
Console.WriteLine("Завдання 1\nВаріант №16");
PrintResults(0, 0);
PrintResults(0, 1);
PrintResults(1, 0);
PrintResults(1, 1);
PrintResults(2, 1);
PrintResults(1, 2);
PrintResults(3, 2);
PrintResults(4, 11);
PrintResults(5, 1);
PrintResults(1, 1);
PrintResults(10, 15);
PrintResults(2, 10);
PrintResults(155, 1.25);
PrintResults(5, 16);
PrintResults(-105, 7);
PrintResults(21.85, 11);
PrintResults(-0.255, 14);
PrintResults(-1, 0);
PrintResults(0, 0);
PrintResults(Double.MinValue, 1);
PrintResults(1, Double.NaN);
PrintResults(1.25, Double.MinValue);
}
public static double Summa(double k, double m)
{

double sum = 0.0;


if (k == Double.MaxValue || m == Double.MaxValue || double.IsNaN(k) || double.IsNaN(m) || k ==
Double.MinValue || m == Double.MinValue)
{
throw new ArgumentOutOfRangeException("Невірне значення параметру ");
}

else if (k < 1 && k > 14)


{
throw new ArgumentOutOfRangeException("Невірне значення параметру 'k' ");

}
else if (m == 0)
{
throw new ArgumentOutOfRangeException("Невірне значення параметру 'm' ");

}
else
{

double insum = 0;
for (int i = 1; i <= k; i++)
{
insum += Math.Sqrt(m) * (1.0 / i) * Math.Sin(m * i);
}
sum = insum;
}
return sum;

}
public static void PrintResults(double k, double m)
{
Console.Write($"k:{k}, m:{m} result: ");

try
{
Console.WriteLine(Summa(k, m));
}

catch (ArgumentOutOfRangeException e)
{

Console.WriteLine("EXCEPTION! {0}", e.Message);


}

}
}

Завдання №2

using System;
using System.Text;

namespace Lab3
{
internal class Task2
{
public static void task2(String[] args)
{
Console.WriteLine("Завдання 2\nВаріант №6");
PrintResults(1, 0);
PrintResults(1, 1);
PrintResults(1, 100);
PrintResults(1, -1);
PrintResults(2, 16);
PrintResults(2, 0);
PrintResults(2, 100);
PrintResults(2, -1);
PrintResults(5, 11);
PrintResults(3, 77);
PrintResults(-1, 11);
PrintResults(5, 0);
PrintResults(1, Double.NaN);
PrintResults(1, Double.MinValue);
PrintResults(2, Double.NaN);
PrintResults(3, Double.MinValue);
}
public static double function(double i, double t)
{
double x = 0.0;
if (i == 2 && t == 0)
{
throw new ArgumentOutOfRangeException();
}
else if (i < 1)
{
throw new ArgumentOutOfRangeException();
}

else if (t < 0)
{
throw new ArgumentOutOfRangeException();
}

else if (t >= 0)
{

if (i == 1)
{
x = Math.Sqrt(t);
}
else if (i == 2)
{
x = 1 / Math.Sqrt(t);
}
else if (i > 0 && i != 1 && i != 2)
{
for (int k = 1; k <= i; k++)
{
x = k * t;

}
}
}
else
{
throw new ArgumentOutOfRangeException();
}
return x;
}
public static void PrintResults(double i, double t)
{

Console.Write($"i:{i}, t:{t} result: ");


try
{
Console.WriteLine(function(i, t));

catch (ArgumentOutOfRangeException e)
{
Console.WriteLine("EXCEPTION! {0}", e.Message);
}

}
}
}

Завдання №3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lab3
{
internal class Task3
{
public static void task3(String[] args)
{
Console.WriteLine("Завдання 3\nВаріант №12");
PrintResults(0.1);
PrintResults(0.2);
PrintResults(0.01);
PrintResults(0.001);
PrintResults(0.0001);
PrintResults(0.00001);
PrintResults(0.99);
PrintResults(1);
PrintResults(Double.NaN);
PrintResults(Double.MinValue);
PrintResults(Double.MaxValue);
}
static double infinsum(double eps)
{
double sum = 0;
double term;
int i = 1;
if (eps == Double.MaxValue || double.IsNaN(eps) || eps == Double.MinValue || eps <= 0 || eps > 1)
{
throw new ArgumentOutOfRangeException();
}
else
{
do
{
term = 1.0 / (i * (i + 1)); // Обчислюємо поточний доданок
sum += term; // Додаємо його до суми
i++; // Збільшуємо лічильник
}
while (Math.Abs(term) >= eps); // Перевіряємо умову точності

return sum;
}
}

public static void PrintResults(double eps)


{

Console.Write($"epsilon {eps} result: ");


try
{

Console.WriteLine(infinsum(eps));

}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine("EXCEPTION! {0}", e.Message);
}

}
}
Контрольні запитання

1. Що таке структурне програмування?


Структурне програмування — це методологічний і системний підхід, що
використовується в розробці програмного забезпечення, що характеризується його
логічною та ієрархічною організацією при написанні коду. Ця техніка має на меті
зменшити складність і підвищити ясність і придатність програм шляхом поділу процесу
програмування на невеликі одиниці коду, які називаються структурами.

2. Назвіть основні конструкції структурного програмування.

Структурна програма використовує тільки три конструкції:


послідовне виконання – “виконати дію 1, виконати дію 2”;
розгалуження – “якщо умова дотримана, виконати дію 1, інакше дію 2”;
цикл – “поки умова дотримується, виконувати дію 1”.

3. Назвіть основні принципи структурного програмування.

 Алгоритмічна низхідна декомпозиція. Поставлене завдання покроково


деталізується, у напрямку від самого верхнього рівня, вниз до дрібних деталей.
Цей метод дає змогу створити чітку структуру програми.
 Модульна структура програми. У результаті декомпозиції програма
розбивається на модулі, прості елементи.
 Структурне кодування. Під час структурного кодування використовують три
керівні конструкції: послідовне керування, розгалуження, цикл. Це базові
структури.
4.Поясніть, чому в більшості мов програмування не радять використовувати оператор GOTO?

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


виконанням коду так, що точка виконання може довільно переміщуватися в
коді.Також,оператор GoTo використовується для неструктурних програм.
5. Що таке спагеті-код?
Спагеті-код — погано спроєктована, слабко структурована, заплутана і важка для розуміння
програма.

Проектування зверху-вниз (англ. Top-down design) - це методологія розробки програмного


забезпечення, в якій система розбивається на менші підсистеми або компоненти, які потім
розробляються окремо і об'єднуються разом. У цьому підході ви спочатку аналізуєте загальну
проблему і розбиваєте її на менші підзадачі, а потім кожну підзадачу розбиваєте на ще менші,
досягаючи деталізації до рівня, на якому легко написати код. Перевага проектування зверху
вниз полягає в тому, що внесення змін до проекту не вимагає від вас великої кількості роботи.
Деталі знають як провести обновлення на основі того, як вони були створені. Можна
використати проектування зверху вниз для певних елементів деталі, цілої деталі або зборки.

7. Що таке область видимості ідентифікатора?

Область видимості ідентифікатора визначає, де він доступний для використання. До


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

8. Що таке блок? Як блоки впливають на область видимості?

У програмуванні термін "блок" використовується для опису фрагменту коду, який


міститься між парою фігурних дужок {}. Блок може містити одну або кілька інструкцій.
Блоки використовуються для групування коду та визначення області видимості змінних
та функцій. Змінні, які оголошені всередині блоку, доступні лише всередині цього блоку
та будуть недоступні поза його межами. Це означає, що область видимості змінних
обмежується блоком, в якому вони були оголошені.

9. Наведіть приклади, у яких випадках краще використовувати наступні оператори та


конструкції:

- if

- if-else

- ланцюги if-else if -else if...

- switch

- тернарна умовна операція ?:

1)if: Коли потрібно перевірити одну просту умову та виконати певні дії, якщо ця умова є
істинною.

int x = 10;

if (x > 0)

{ Console.WriteLine("x додатне");}

2) if-else: Коли є дві альтернативні дії, які мають виконатися в залежності від результату
перевірки умови.

int x = 10;

if (x > 0)
{ Console.WriteLine("x додатне");}

else

{ Console.WriteLine("x від'ємне або нуль");}

3) ланцюги if-else if-else: Коли є багато альтернативних дій, і потрібно визначити, яка саме з них
має бути виконана.

int x = 10;

if (x > 0)

{Console.WriteLine("x додатне");}

else if (x < 0)

{ Console.WriteLine("x від'ємне");}

else

{ Console.WriteLine("x дорівнює нулю");}

4) switch: Коли потрібно перевірити значення змінної та виконати певні дії в залежності
від цього значення.
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("Понеділок");
break;
case 2:
Console.WriteLine("Вівторок");
break;
case 3:
Console.WriteLine("Середа");
break;
default:
Console.WriteLine("Інший день тижня");
break;
}
5) тернарна умовна операція ?:: Коли потрібно просто прийняти рішення на основі
простої умови.

int x = 10;
string result = (x > 0) ? "x додатне" : "x від'ємне або нуль";
Console.WriteLine(result);

10. Наведіть приклади, у яких випадках краще використовувати наступні оператори та


конструкції:

- while

- do-while
- for

1) while: Використовуйте цей оператор, коли кількість ітерацій не відома заздалегідь і


повторення повинні продовжуватися, доки певна умова істинна.

int x = 0;

while (x < 10)

{ Console.WriteLine(x);

x++;}

2) do-while: Використовуйте цей оператор, коли вам потрібно, щоб тіло циклу виконувалося
принаймні один раз, незалежно від умови.

int x = 0;

do

{ Console.WriteLine(x);

x++;}

while (x < 0);

3) for: Використовуйте цей оператор, коли кількість ітерацій вам відома заздалегідь або коли
вам потрібно інкрементувати або декрементувати змінну в межах циклу.

for (int i = 0; i < 10; i++)

{ Console.WriteLine(i);}

11. Чим оператор break відрізняється від оператора continue?

Оператор break завершує найближче укладаюче оператор ітерації або інструкцію switch.
Оператор continue запускає нову ітерацію найближчого в'язня оператора ітерації.

12. До якого результату призведе виконання наступного фрагменту коду? Перевірте. Поясніть.

bool a = false;

bool b = false;

if (a=false) {

Console.WriteLine("a is false");

if (b=true) {

Console.WriteLine("b is true");

if (a=b) {

Console.WriteLine("a = b");
}

Результат виконання цього фрагменту коду буде наступним:

b is true

a=b

Це тому, що a та b отримують значення false та true відповідно, і остання умова if (a=b)


спрацьовує, оскільки присвоєння a=b встановлює a в true, що відповідає значенню b.

13. До якого результату призведе виконання наступного фрагменту коду? Перевірте. Поясніть.

int a = 1;

a++;

++a;

switch(a) {

case 1: Console.WriteLine("1");

case 2: Console.WriteLine("2");

case 3: Console.WriteLine("3");

case 4: Console.WriteLine("4");

Після виконання фрагменту коду будуть виведені наступні значення:

Це тому, що у switch виконуються всі case відповідно до значення a, а оскільки відсутні


оператори break, виконання не припиняється після першого збігу.

14.double sum = 0;

// Let's find: 1 + 1/2 + 1/3 + 1/4 + 1/5 + ...

for(int i=1; i<10; i++) {

sum = sum + 1/i;

Console.WriteLine(sum > 1);

Після виконання цього фрагменту коду sum буде містити суму ряду 1 + 1/2 + 1/3 + 1/4 + 1/5 + ...
+ 1/9. Результат цієї суми можна оцінити як близький до значення константи Єйлера
(0.5772156649). Це означає, що sum буде менше за 1.
Отже, результатом виразу sum > 1 буде false, оскільки сума sum не перевищує 1.

You might also like