Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка С#.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.13 Mб
Скачать

Циклічний алгоритм. Організація циклу за допомогою оператора for Мета роботи

Метою даної лабораторної роботи є ознайомлення зі способом організації циклу за допомогою оператора for, особливостями його застосування, а також ознайомлення зі способом реалізації циклічного алгоритму за допомогою оператора goto.

Завдання

1. Скласти алгоритм і написати мовою С для обчислення суми ряду. Алгоритм повинний включати наступні етапи:

1) визначення виду ряду: сходиться або розходиться;

2) обчислення суми ряду з певною точністю у випадку ряду, що сходиться;

3) обчислення суми перших 10 членів ряду у випадку розбіжного ряду;

4) роздруківка результатів розрахунку, що повинна включати вихідні дані, значення членів ряду з їх номерами і підсумкове значення суми ряду. Варіанти завдання дані в додатку 4. Номер варіанта призначається викладачем.

2. Здійснити налагодження програми і її тестування.

3. Скласти звіт про роботу.

Вказівки до виконання завдання

Для організації багаторазового виконання послідовності операторів крім операторів циклу while і do while використовується оператор циклу for.

Загальна форма запису:

for(ініціалізація; перевірка умови; коригуваний вираз)

оператор;

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

Принцип дії оператора for: спочатку виконується ініціалізація виразу (один раз), потім йде перевірка умови. Якщо умова правдива, виконується оператор циклу. Потім обчислюється коригувальний вираз і відбувається перевірка умови. Дані дії повторюються доти, поки перевірка не дасть значення «неправда». У цьому випадку виконання циклу припиниться, керування буде передано на оператор, що іде за циклом.

Приклад: прорахувати суму перших 10 членів ряду .

# include<stdio.h>

#include <match.h>

int main()

{

float s,s1;

int n;

s=0;

for(n=1;n<=10;n++)

{

s1=pow(n,2)/(2*n); /* Обчислення величини члена ряду */

s=s+s1;

}

printf(“Суму 10 членів ряду s=%7.2f \n”,s);

return 0;

}

Для збільшення гнучкості циклу for використовується операція «кома». Вона дозволяє включати в специфікацію циклу кілька ініціалізацій і коригувальних виразів. Операція «кома» зв'язує 2 вирази в одне і гарантує, що вони обчислюються в порядку зліва направо.

Приклад: визначити суму членів ряду .

Проаналізувавши вид ряду, можна помітити, що кожен наступний елемент ряду утвориться множенням попереднього на ½.

# include<stdio.h>

#include <match.h>

int main()

{

int n; /*n номер члена ряду*/

double s,x; /*s сума ряду; x перший член ряду*/

int limit; /*limit загальна кількість членів ряду*/

printf(“Уведіть кількість членів ряду, суму яких треба

знайти \n”);

scanf(“%d”,&limit);

for(s=0,x=1/2,n=1;n<=limit; n++, x*=1/2)

s+=x;

printf(“Сума %d членів ряду s=%f \n”,limit,s);

return 0;

}

З прикладу видно, що при використанні циклу for ми можемо ініціалізувати кілька значень, використовуючи операцію «кома»: s=0  початкове значення суми; x=1/2  перший член ряду; n=1  номер першого використовуваного члена ряду. Також є можливість вписати кілька коригувальних виразів: n++  зміна номера члена ряду; x*=1/2  новий член ряду.

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

  • «+=» – збільшує значення змінної, що стоїть ліворуч, на величину, указану праворуч: s+=x означає s=s+x;

  • «-=» – зменшує значення змінної, що стоїть ліворуч, на величину, указану праворуч: x-=2 означає x=x-2;

  • «*=» – множить значення змінної, що стоїть ліворуч, на величину, указану праворуч від знака: x*=1/2 означає x=x*(1/2);

  • «/=» – поділяє значення змінної, що стоїть ліворуч від знака, на величину, указану праворуч: x/=4 означає x=x/4.

Ці операції мають такий же пріоритет, як і основна операція присвоювання. Вони дозволяють зробити запис виразу більш компактним, особливо додаткові операції присвоювання корисні для запису виразів в операторі циклу for.

Крім операторів циклу while, do while і for, циклічне обчислення операторів можна організувати за допомогою оператора goto. Цей оператор має наступну загальну форму запису:

goto мітка;

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

Приклад: порахувати суму ряду з точністю =0,001.

# include<stdio.h>

#include <match.h>

#include<stdlib.h>

int main()

{

int i, f, k;

float x,s,s1,eps;

printf(“Уведіть точність розрахунку\n”);

scanf(“%f”, &eps);

printf(“Уведіть значення x\n”);

scanf(“%f”,&x);

s=0; i=0;

a: f=1; k=1;

і=і+1; /* Лічильник повторень */

while (k<=і+1)

f=f*k++;

s1=pow(x,і)/f; /* обчислення члена ряду */

s=s+s1;

if (і>1000) /* додаткова умова виходу з циклу */,

goto b;

if (fabs(s1)>eps)

goto a; /* умова повторення розрахунку */

b: printf (“Сума %d членів ряду дорівнює %f. \n”,i, s);

return 0; }

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

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

Лабораторна робота № 6