Файл: Лабораторна робота 3.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.09.2024

Просмотров: 13

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Тема: Реалізація алгоритмів, що розгалужуються.

Мета: вивчити операції порівняння, логічні операції, оператори передачі управління if, switch, break, навчитися користуватися простими компонентами організації перемикань (СheckBox, RadioGroup). Написати і відлагодити програму з розгалуженнями.

Теоретична частина Оператор умовної передачі управління if

Для вибору однієї з гілок обчислень застосовується оператор умовного переходу :

if (вираз) оператор 1;

else оператор 2;

обчислюється вираз, і якщо його значення не дорівнює 0 (істинно), то виконується оператор 1, інакше - оператор 2,

наприклад:

if(x>y) max = x;

else max = y;

Якщо оператори 1, 2 містять більше одного оператора, то вони полягають у фігурні дужки { }, тобто застосовується блок.

Конструкція else може бути відсутня і таку форму називають скороченою, тоді у разі помилковості умови управління передається на оператор, що йде за if.

Якщо оператори 1, 2 у свою чергу є операторами if, то такий оператор називають вкладеним, при цьому ключове слово else належить найближчому передуванню if.

Наприклад, знайти найбільше значення з трьох чисел x, y, z:

if (x>y)

if (x>z) max=x;

else max=z;

else if(y>z) max=y;

else max=z;

Операції порівняння : < (менше) <= (менше або рівно) > (більше) >= (більше або рівно) != (не рівно) = = (рівно). Пари символів розділяти не можна.

Операції порівняння бінарні, їх загальний вигляд:

Операнд 1 знак операції Операнд 2

Операндами операцій порівняння можуть бути дані будь-яких базових типів, значення яких перед порівнянням перетворяться до одного типу.

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

! (заперечення або логічне НЕ - унарна операція) && (кон'юнкція або логічне І) || (диз'юнкція або логічне АБО).

Наприклад:(x<=100)

((!x((z==1)&&(k>0))

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

Тернарная (умовна) операція ?:

Її загальна форма:


Операнд 1 ? Операнд 2: Операнд 3

Якщо значення операнда 1 істинно (не рівне 0), то результатом операції є операнд 2, інакше - операнд 3.

Наприклад, знайти найбільше з двох чисел: max = a>b ? a: b;

Оператор вибору switch

Загальна форма оператора вибору (перемикача) :

switch(вираз){

case const_1: оператори; break;

case const_N: оператори; break;

default: оператори;

}

Обчислюється вираз і перевіряється, чи співпадає його результат зі значенням однієї з констант. При збігу виконуються оператори цього блоку case. Значеннями const_1,., const_N можуть бути тільки цілі або символьні константи. Конструкція default виконується, якщо результат виразу не співпав ні з однією з констант, і може бути відсутнім. Оператор break виконує достроковий вихід з switch (після виконання гілки case усі інші будуть опущені). Якщо оператор break в case не записаний, то виконуватимуться оператори наступних гілок case до появи оператора break, або до завершення оператора switch.

Наприклад:

switсh(i){

case 1: f=pow(x, 2); break;

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

default: printf("Помилка"!); exit(1);

}

f=f+5;


Практична частина

При створенні віконного застосування для організації розгалужень використовуються компоненти у вигляді кнопок-перемикачів. Стан такої кнопки (включено/вимкнено) візуально відбивається на формі. На формі (мал. 3.1) представлені кнопки-перемикачі двох типів TCheckBox і TRadioGroup.

Компонент CheckBox створює кнопку незалежного перемикача, за допомогою якої Користувач може вказати своє рішення типу так або ні. У програмі стан кнопки пов'язаний зі значенням булевої змінної, яка перевіряється за допомогою оператора if.

Компонент Radiogroup створює групу кнопок - залежних перемикачів. При натисненні однієї з кнопок групи усі інші кнопки відключаються. У програму передається номер включеної кнопки (0,1,2,.), який аналізується за допомогою оператора switсh.

У мові C++ використовуються змінні типу bool, які можуть набувати тільки два значення - true і false (істина - 1, брехня - 0).

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

Ввести початкові дані x, y, z. Вичислити значення u залежно від вибору: sin(x), cos(x) або tg(x), після чого визначити максимальне або зі значень u, y, z, або з їх модулів - |u|, |y|, |z|.

Реалізація прикладу віконного застосування

Cоздать форму, представлену на мал. 3.1, скоректувати текст написів, положення вікон Edit і написати відповідну програму.

Компонента СheckBox

У меню Standard виберіть піктограму , помістите її в потрібне місце форми, зміните заголовок Caption на «max модулів», після чого в тексті програми з'явиться змінна CheckBox1 типу TСheckBox. Залежно від того, зроблений вибір або ні, булева змінна CheckBox1 ->Checked набуватиме значення true або false.

Компонента RadioGroup

У меню Standard виберіть піктограму , помістіть її в потрібне місце форми. На формі з'явиться облямований лінією чистий прямокутник із заголовком RadioGroup1. Замініть заголовок (Caption) на «Вибір функції».

У інспекторові об'єктів у властивості Items викличте рядковий редактор списку заголовків кнопок і наберіть три рядки з іменами вибираних функцій (cos(x), sin(x), tg(x)), натисніть ОК. Після цього усередині компонента з'являться три кнопки-перемикачі з введеними написами.


У тексті Unit1.h з'явилася змінна RadioGroup1 типу TRadioGroup. Тепер при натисненні однієї з кнопок групи в змінній цілого типу RadioGroup1 ->ItemIndex знаходитиметься номер вибраного рядка (відлічується від нуля).

У функції FormCreate() бажано встановити початкове значення цієї змінної, наприклад, RadioGroup1 ->ItemIndex = 0.

Підготувавши форму, створіть функції-обробники подій FormСreate і Botton1Сlick аналогічно першій роботі. Текст функцій приведений в прикладі.

Запустіть програму і переконайтеся в тому, що усі гілки алгоритму виконуються правильно. Форма приведена на мал. 3.1.

Мал. 3.1

Текст програми може бути наступним:

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

#include <vcl.h>

#pragma hdrstop

#include "Unit 1.h"

#include "math.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1 ->Text="0, 1";

Edit2 ->Text="0, 356";

Edit3 ->Text="-3,5";

Memo1 ->Clear();

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

RadioGroup1 ->ItemIndex = 0;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x, y, z, u, ma;

x=StrToFloat(Edit1 ->Text);

y=StrToFloat(Edit2 ->Text);

z=StrToFloat(Edit3 ->Text);

// Перевірка номера натиснутої кнопки і вибір відповідної функції

switch(RadioGroup1 ->ItemIndex){

case 0: u=cos(x);

Memo1 ->Lines ->Add("Cos(x)= "+FloatToStrF(u, ffFixed, 8,6));

break;

case 1: u=sin(x);

Memo1 ->Lines ->Add("Sin(x)= "+FloatToStrF(u, ffFixed, 8,6));

break;

case 2: u=tan(x);

Memo1 ->Lines ->Add("Tg(x)= "+FloatToStrF(u, ffFixed, 8,6));

break;

}

// Перевірка стану кнопки CheckBox1

if (CheckBox1 ->Checked){

u = fabs(u);

y = fabs(y);

z = fabs(z);

}

// Знаходження максимального з трьох чисел

if (u>y) ma=u;

else ma=y;

if (z>ma) ma=z;

if (CheckBox1 ->Checked)

Memo1 ->Lines ->Add("Max модулів= "+FloatToStrF(ma, ffFixed, 8,6));

else Memo1 ->Lines ->Add("Max= "+FloatToStrF(ma, ffFixed, 8,6));

}


2.3.1. Приклад написання програми консольного застосування

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

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

#include <vcl.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

#pragma hdrstop

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

#pragma argsused

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

{

double x, y, z, u, ma;

int kod;

puts("Input x, y, z");

scanf("%lf%lf%lf",&x, &y, &z);

puts("Function U(x) :\n 0 - cos(x)\n 1 - sin(x)\n 2 - tan(x)");

scanf("%d", &kod);

switch(kod){

case 0: u=cos(x); printf("\n\tCos(x)= %8.6lf", u); break;

case 1: u=sin(x); printf("\n\Sin(x)= %8.6lf", u); break;

case 2: u=tan(x); printf("\n\Tg(x)= %8.6lf", u); break;

}

puts("\nMax ABS - 1, Else - Max");

scanf("%d", &kod);

if (kod == 1){

u = fabs(u);

y = fabs(y);

z = fabs(z);

}

if (u>y) ma=u;

else ma=y;

if (z>ma) ma=z;

if (kod==1) printf("Max ABS = %8.6lf", ma);

else printf("Max = %8.6lf", ma);

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

getch();

return 0;

}

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

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

Обчислити значення y залежно від вибраної функції від (x), аргумент якої визначається з поставленої умови. Можливі значення функції від (x) : 2x, x2, х/3 (у віконному додатку вибір виконати за допомогою компоненти RadioGroup). Передбачити виведення повідомлень, що показують, за якої умови і з якою функцією проводилися обчислення у.

  1. , де

  2. , де

  3. , де

  4. , де

  5. , де

  6. , де

  7. , де

  8. , де

  9. , де

  10. , де

  11. , де

  12. , де

  13. , де

  14. , де

  15. , де

  16. , де