Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

О.О.П / 3_кол / Лабораторні роботи / Лабораторна робота 4

.doc
Скачиваний:
12
Добавлен:
30.05.2020
Размер:
186.88 Кб
Скачать

Лабораторна робота №4.

Тема: Реалізація циклічних алгоритмів

Мета: вивчити циклічні оператори while, do - while, for, навчитися реалізовувати циклічні алгоритми. Вивчивши прості засоби відладки програм в середовищі C++ Builder, скласти і відлагодити програму.

4.1. Загальні теоретичні відомості

Під циклом розуміється багатократне виконання одних і тих же операторів при різних значеннях проміжних даних. Число повторень може бути задане в явній або неявній формах. Для організації повторень в мові C++ використовуються три різні оператори циклу.

1. Оператор циклу з передумовою

while (вираз)

код циклу

організовує повторення операторів коду циклу до тих пір, поки вираз істинне (не рівне 0), якщо вираз = 0 (помилкове) при першому вході, то код циклу не виконається жодного разу. Якщо код циклу складається більш ніж з одного оператора, то організовується блок.

2. Оператор циклу з постумовою

do

код циклу

while (вираз);

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

3. Оператор з передумовою і корекцією

for (вираз 1; вираз 2; вираз 3)

код циклу

де вираз 1 - початкове значення параметра циклу (його ініціалізація); вираз 2 - перевірка умови на продовження циклу; вираз 3 - зміна (корекція) параметра циклу (пряме нарощення – інкремент, або зворотне - декремент).

Спочатку обчислюється вираз 1, потім перевіряється вираз 2, якщо він - істинний, то виконується код циклу, потім проводиться корекція у виразі 3, і так до тих пір, поки вираз 2 не набуде значення «брехня».

Достроковий вихід з операторів циклу виконує оператор break, а оператор continue виконує передачу управління в головний оператор циклу.

Засоби відладки програм в C++ Builder

Практично в кожній новій програмі після запуску виявляються помилки.

Синтаксичні помилки пов'язані з неправильним записом операторів. При виявленні таких помилок компілятор Builder зупиняється навпроти оператора, в якому вона виявлена. У нижній частині екрану з'являється текстове вікно, що містить відомості про усі помилки, знайдені в проекті, в кожному рядку якого вказано ім'я файлу, номер рядка і характер помилки.

Для швидкого переходу до помилки, що цікавить, треба двічі клацнути кнопкою миші по рядку з її описом, а для отримання повнішої інформації - звернутися до HELP натисненням клавіші F1.

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

У простому випадку для пошуку місця помилки рекомендується виконати наступні дії.

У вікні редагування тексту встановити курсор в рядку перед підозрілою ділянкою і натиснути клавішу F4 (виконання до курсора) - виконання програми буде зупинено на рядку, що містить курсор. Щоб побачити, чому дорівнює значення змінної, що цікавить, треба помістити на змінну курсор - на екрані буде висвічено її значення, або натиснути Ctrl+F7 і в діалоговому вікні, що з'явилося, вказати цю змінну (за допомогою цього вікна можна також змінити значення змінної під час виконання програми).

Натискаючи клавішу F7 (покрокове виконання), відрядковий виконувати програму, контролюючи зміну тих або інших змінних і правильність обчислень. Якщо курсор знаходиться усередині циклу, то після натиснення F4 розрахунок зупиняється після одного виконання коду циклу;

Для продовження розрахунків слід натиснути <Run> у меню Run.

4.2. Приклад виконання завдання

Написати і відлагодити програму виведення усіх значень функції S(x) для аргументу х, що змінюється в інтервалі від а до b c кроком h і заданому n.

.

Панель діалогу і отримані результати представлені на мал. 3.1.

4.2.1. Приклад створення віконного застосування

Текст функцій-обробників може бути наступним (стандартний текст опущений) :

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1 ->Text="0, 1"; Edit2 ->Text="1, 0";

Edit3 ->Text="10"; Edit4 ->Text="0, 2";

Memo1 ->Lines ->Add("Лабораторна робота 3");

}

Мал. 4.1

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double a, b, x, h, r, s;

int n, zn = - 1, k;

a = StrToFloat(Edit1 ->Text);

b = StrToFloat(Edit2 ->Text);

n = StrToInt(Edit3 ->Text);

h = StrToFloat(Edit4 ->Text);

for(x = a; x<=b; x+=h){

r = s = 1;

for(k = 1; k<=n; k++){

r = zn*r*x/k;

s+=r;

}

Memo1 ->Lines ->Add("при x= "+FloatToStrF(x, ffFixed, 8,2)

+" сума= "+FloatToStrF(s, ffFixed, 8,5));

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Memo1 ->Clear();

}

4.2.2. Приклад створення консольного застосування

Текст програми запропонованого завдання може мати вигляд

#include <vcl.h>

#include <stdio.h>

#include <conio.h>

#pragma hdrstop

#pragma argsused

int main(int argc, char* argv[])

{

double a, b, x, h, r, s;

int n, zn = - 1, k;

puts("Input a, b, h, n");

scanf("%lf%lf%lf%d", &a, &b, &h, &n);

for(x = a; x<=b; x+=h){

r = s = 1;

for(k = 1; k<=n; k++){

r=zn*r*x/k;

s+=r;

}

printf("\n x= %8.2lf sum= %8.5lf", x, s);

}

puts("\nPress any key ... ");

getch();

return 0;

}

Результат програми з введеними значеннями a=0.1, b=1.0, h=0.2 і n=10:

4.3. Індивідуальні завдання

Для кожного x, що змінюється від a до b з кроком h, знайти значення функції Y(x), суми S(x) і |Y(x) - S(x)| і вивести у вигляді таблиці. Значення a, b, h і n вводяться з клавіатури. Оскільки значення S(x) є рядом розкладання функції Y(x), при правильному рішенні значення S і Y для заданого аргументу x (для тестових значень початкових даних) повинні співпадати в цілій частині і в перших двох-чотирьох позиціях після десяткової точки.

Роботу програми перевірити для a = 0,1; b = 1,0; h = 0,1; значення параметра n вибрати залежно від завдання.

1. , .

2. .

3. .

4. .

5. .

6. .

7. , .

8. , .

9. , .

10. , .

11. , .

12. , .

13. , .

14. , .

15. , .

16. .

В додатку до роботи наведено 8 груп завдань, які мають бути вирішені за допомогою циклів. Номер завдання визначається згідно номеру в списку академічної групи. Тип циклу обирається наступним чином – завдання групи 1 і 4 вирішити за допомогою циклічного оператору while, завдання 2 і 5 – за допомогою dowhile, завдання 3 і 6 – for. Для завдань 7 і 8 циклічний оператор обрати за бажанням. Межі розрахунку – початкове і кінцеве значення, крок та інші параметри мають вводитися користувачем. Передбачити перевірку можливості обрахунку значення виразу – використати оператор розгалуження.

Структура звіту

  1. Назва роботи.

  2. Тема роботи.

  3. Мета роботи.

  4. Перелік використних компонентів.

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

  6. Скрін-шот працюючого додатку.

  7. Програмний код додатку.

  8. Відповіді на контрольні питання до роботи.

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

  1. Що називають керуючим оператором мови С?

  2. Дайте визначення циклу.

  3. Які циклічні оператори ви можете назвати?

  4. Які види циклів наявні в мові програмування С? Які оператори пов'язані з кожним з видів циклів?

  5. Поясніть принци роботи циклічного оператора for. Намалюйте блок-схему роботи оператора.

  6. Поясніть принци роботи циклічного оператора while. Намалюйте блок-схему роботи оператора.

  7. Поясніть принци роботи циклічного оператора do...while. Намалюйте блок-схему роботи оператора.