Ім'я файлу: Lab-02-ready-Zakaliak-Roman.docx
Розширення: docx
Розмір: 199кб.
Дата: 22.08.2022
скачати

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

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут КНІТ

Кафедра ПЗ


ЗВІТ
До лабораторної роботи № 2

На тему: Програмування циклічних процесів в С

З дисципліни: “Основи програмування”
Лектор:

ст.викл. каф. ПЗ

Муха Т.О.
Виконав:

ст. гр. ПЗ-13

Закаляк Р.А.
Прийняла:

асист. каф. ПЗ

Терендій О.В.

« ____ » ________ 2020 р.
∑= ____ .


Львів – 2020

Тема роботи: Програмування циклічних процесів в С.
Мета роботи: навчитися організовувати програми циклічної структури, які дозволяють повторювати певну групу операторів задану кількість разів .
Лабораторне завдання

1. Ознайомитися з теоретичним матеріалом викладеним вище в даній інструкції і виконати приклади програм.

2. Одержати індивідуальне завдання з Додатку 1.

3. Розробити алгоритм розв’язання індивідуального завдання і подати його у вигляді блок схеми.

4. Скласти програму на мові С у відповідності з розробленим алгоритмом. 5. Виконати обчислення по програмі.

6. Одержати індивідуальне завдання з Додатку 2.

7. Розробити алгоритм розв’язання індивідуального завдання і подати його у вигляді блок схеми.

8. Скласти програму на мові С у відповідності з розробленим алгоритмом. 9. Виконати обчислення по програмі при різних значеннях точності і порівняти отримані результати.

10.Підготувати та здати звіт про виконання лабораторної роботи.

Індивідуальне завдання
1. Додаток 1. Знайти і вивести всі цілі числа в діапазоні від 2 до n, для яких у двійковому представленні числа одиниці знаходяться тільки в парних розрядах.

2. Додаток 2. З допомогою операторів циклу, протабулювати на відрізку від А до В з області визначення функцію, задану розкладом у ряд Тейлора. Для порівняння обчислити також у кожній точці табуляції значення функції задане формулою. Результати подати у виді таблиці з коментарями.



Теоретичні відомості

1. Поняття про цикли 

Алгоритм називається циклічним, якщо певна послідовність однотипних дій (тіло циклу) виконується багато разів. Однократне виконання тіла циклу називається ітерацією. В залежності від постановки задачі розрізняють арифметичні цикли (тобто цикли з наперед відомою кількістю ітерацій) та ітераційні цикли (число ітерацій такого циклу наперед невідомо). В арифметичних циклах кількість повторень відома до його початку і задається за допомогою лічильника повторень. В ітераційних циклах кількість ітерацій задається неявно,  

наприклад досягненням якоїсь змінної заданої точності, або заданого значення. Отже, цикли дозволяють багатократно виконувати сукупність однотипних операцій. Це означає, що програмний код за рахунок циклів виглядатиме компактнішим. Умовою виходу циклу або ж умовою продовження циклу є вираз, від істинності якого залежить, буде виконуватися тіло циклу чи ні. Цикл може мати лічильник (можливо, не один), що зберігає номер ітерації циклу. Значення лічильника водночас може бути і умовою виходу з циклу. У мові С використовуються оператори циклу while, do…while та for. Усі три оператори циклу в С можуть використовуватися для реалізації як арифметичних, так й ітераційних циклічних процесів. Цикл while є циклом з передумовою, а цикл do…while – з післяумовою. В циклах з передумовою спочатку перевіряється умова, а тоді, залежно від того, істинна вона чи хибна,  виконується або не виконується тіло циклу. У циклах з післяумовою спочатку виконується тіло циклу, а тоді перевіряється умова, від істинності якого залежить виконання наступної ітерації циклу. Одне з типових застосувань циклу while – перевірка, чи не досягнуто кінець файлу. Цикл for, як правило, застосовується при заздалегідь відомій кількості ітерацій – наприклад, для опрацювання всіх елементів масиву. 

2. Конструкція while 

Оператор while – це оператор циклу з передумовою. Синтаксис: 

while(<умова>) <оператор>;  

Цикл виконується, поки умова є істинною. Якщо умова початково є хибною (вираз, що задає умову має нульове значення), цикл не виконається жодного разу. У ролі <оператор>, який і є тілом циклу, може бути будь-який допустимий оператор мови С. Єдине обмеження, яке накладає тут мова С полягає в тому, що, структурно, тіло циклу має мати вигляд одного єдиного оператора, що змушує нас використовувати операторні дужки тоді, коли нам потрібно задати тіло циклу за допомогою декількох операторів (аналогічно як було в операторі умови if).

3. Конструкція do…while 

Цикл dowhile відрізняється від циклу while тим, що умова його виконання перевіряється після виконання тіла циклу. Це означає, що тіло циклу виконається принаймні один раз.  Синтаксис цього оператоа:  

do <тіло циклу> while(<умова>)  

Інша відмінність оператора циклу do...while полягає в тому, що тіло циклу може складатися з довільної кількості операторів, тобто використання операторних дужок не є обов’язковим. 

4. Конструкція for 

Цикл for управляється змінною, що називається лічильником циклу. Величину зміни лічильника називають кроком. Синтаксис циклу є наступний: 

for(<початкова_інструкція>; <умова>; <вираз>)  

 <тіло циклу>; 

Спочатку виконується початкова інструкція та перевіряється умова. Якщо вона істинна, то виконуються інструкції з тіла циклу, а тоді обчислюється вираз та управління передається в початок циклу з тією різницею, що початкова інструкція вже не виконується. У циклі for можуть бути відсутні ініціалізація лічильника і/або умова виходу і/або приріст.  Відсутність умови виходу інтерпретується як істинний вираз, тобто, цикл стає нескінченним.  Якщо ініціалізація не виконується в заголовку циклу, то її слід здійснити раніше. Відсутність всіх виразів одночасно (for(;;) {}) означає нескінченний цикл. Згідно синтаксису С, оператор for може бути пустим. 

5. Оператор break  

Оператор break дозволяє здійснити “достроковий” вихід із циклу, коли умова циклу є істинною. Він використовується тоді, коли продовжувати цикл недоцільно.

6. Оператор continue 

Оператор continue дозволяє проігнорувати всі інструкції, записані у тілі циклу після нього,  та перейти до наступної ітерації циклу. 
7. Вкладені цикли 

У мові С існують вкладені цикли. Тобто, один цикл (внутрішній) може знаходитися в тілі іншого циклу (зовнішнього). При цьому глибина вкладення (кількість вкладених циклів) не обмежується. Типове застосування вкладених циклів – для обробки матриць (двовимірних масивів). Цикл for може знаходитися у тілі циклу while (чи do…while), і навпаки.  

Приклад. З клавіатури ввести довільну кількість чисел (ввід числа супроводжується натисканням клавіші ‘y’ для продовження або ж довільної іншої клавіші для завершення вводу даних, як розглядалося вище). Знайти та вивести число з максимальною кількістю дільників, а також вивести саме максимальне число дільників. Потрібний програмний код мовою С можна утворити, застосувавши розглянуті вище фрагменти кодів – один для вводу довільної кількості чисел з клавіатури, а другий – для знаходження кількості дільників числа. 

8. Ітераційні цикли

Багато задач у математиці передбачає використання числових методів, в яких обчислення проводиться до досягнення заданої точності. Так, наприклад, обчислення суми нескінченого ряду Тейлора проводиться до тих пір поки наступний член ряду за абсолютним значенням стане меншим за значення точності ε, де ε- достатньо мале число. При розв’язуванні таких задач наперед не відома кількість ітерацій циклу.

Код програми (1)
Назва файлу: Lab02_Task01_Zakaliak.c
#include

#include

int main()

{

int n, zero = 0, power = 1, power2 =2 ;

double reminder;

scanf_s("%d", &n);
for (int i = 2; i <= n; ++i)

{

reminder = i;

while (1)

{

reminder = reminder - power2;

power2 = power2* 4;

if (reminder == 0)

{

printf_s("%d \t", i);

break;

}

else if(reminder < 0)

{

break;

}

}

power2 = 2;

}

return 0;

}
Протокол роботи
Протокол вводу:

171
Протокол виводу:

2 10 42 170


Рис. 1. Результат виконання програми 1


Рис. 2. Блок-схема програми(1)


Код програми (2)
Назва файлу: Lab02_Task02_Zakaliak.c
#include

#include
int main()

{

double A = 0, B = 0, E = 0, STEP = 0.05, sum = 0, y1 = 0, y2 = 0, nom = 1, denom = 4, x = -0.5, k = 1, error =0;

printf_s("Enter margins A and B( A>=-1; B<=0 ) : ");

scanf_s("%lf %lf", &A, &B);

x = A;

printf_s("Enter the step of the x : ");

scanf_s("%lf", &STEP);
printf_s("Enter epselon : ");

scanf_s("%lf", &E);

printf_s("\n --------------------------------------------------------------------------------------------------------\n");
while (x <= B)

{

y1 = sqrt(1 + x);

y2 = x / 2.0;

sum = 1 + (x / 2.0);

while (fabs(y2) >= E)

{

y2 = (y2 * -1 * k * x) / denom;

k += 2;

denom += 2;

sum += y2;

}

printf_s("|x = %lf \t|\ty = %lf \t|\tTaylor serie = %lf \t|\n"

" --------------------------------------------------------------------------------------------------------\n", x, y1, sum);

x += STEP;

}
return 0;

}

Протокол роботи
Протокол вводу:

-0.5 0.5

0.05

0.00000000000001
Протокол виводу наведений на рисунку 3


Рис. 3. Результат виконання програми 2



Рис. 4. Блок-схема програми(2)

Висновки

На лабораторній роботі розглянуто організацію програм циклічної структури, які дозволяють повторювати певну групу операторів задану кількість разів, застосування рекурентної формули .
скачати

© Усі права захищені
написати до нас