При создании оконного приложения для организации разветвлений используются компоненты в виде кнопок-переключателей. Состояние такой кнопки (включено/выключено) визуально отражается на форме. На форме (рис. 2.1) представлены кнопки-переключатели двух типов TCheckBox и TRadioGroup.
Компонента CheckBox создает кнопку независимого переключателя, с помощью которой Пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевой переменной, которая проверяется с помощью оператора if.
Компонента Radiogroup создает группу кнопок – зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0,1,2,…), который анализируется с помощью оператора switс h.
В языке C++ используются переменные типа bool, которые могут принимать только два значения – true и false (истина – 1, ложь – 0).
2.3. Пример выполнения задания
Ввести исходные данные x, y, z. Вычислить значение u в зависимости от выбора: sin(x), cos(x) или tg(x), после чего определить максимальное либо из u, y, z, либо из их модулей – |u|, |y|, |z|.
2.3.1. Реализация примера оконного приложения
Cоздать форму, представленную на рис. 2.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 и B utton1Сlick аналогично первой работе. Текст функций приведен в примере.
Запустите программу и убедитесь в том, что все ветви алгоритма выполняются правильно. Форма приведена на рис. 2.1.
Рис. 2.1
Текст программы может быть следующим:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.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));
}
Пример написания программы консольного приложения
Текст программы может иметь вид
//---------------------------------------------------------------------------
#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\t Cos(x)= %8.6lf",u); break;
case 1: u=sin(x); printf("\n\t Sin(x)= %8.6lf",u); break;
case 2: u=tan(x); printf("\n\t 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;
}
Результаты выполнения программы:
2.4. Индивидуальные задания
Вычислить значение y в зависимости от выбранной функции j(x), аргумент которой определяется из поставленного условия. Возможные значения функции j(x): 2x, x2, х/3 (в оконном приложениии выбор выполнить с помощью компоненты RadioGroup). Предусмотреть вывод сообщений, показывающих, при каком условии и с какой функцией производились вычисления у.
1. , где
2. , где
3. , где
4. , где
5. , где
6. , где
7. , где
8. , где
9. , где
10. , где
11. , где
12. , где
13. , где
14. , где
15. , где
16. , где
Дата: 2018-11-18, просмотров: 405.