Практична частина
При створенні віконного застосування для організації розгалужень використовуються компоненти у вигляді кнопок-перемикачів. Стан такої кнопки (включено/вимкнено) візуально відбивається на формі. На формі (мал. 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));
}