Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы билдер.pdf
Скачиваний:
81
Добавлен:
07.05.2015
Размер:
989.13 Кб
Скачать

ТЕМА 2. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ

Цель лабораторной работы: научиться пользоваться простейшими компонентами организации переключений (TСheckBox, TRadioGroup). Написать и отладить программу разветвляющегося алгоритма.

2.1. Операторы if и switch языка C++

Для программирования разветвляющихся алгоритмов в языке C++ используются переменные типа bool, которые могут принимать только два значения - true и false (да, нет), а также операторы if и switch. Оператор if проверяет результат логического выражения или значение переменной типа int лабо bool и организует разветвление вычислений.

Например, если bool bl; double x,y,u; то фрагмент программы с оператором

if может быть таким:

bl=x>y;

if (bl) u=x-y; else u=x+y;

Оператор выбора swith организует разветвления в зависимости от значения некоторой переменной перечисляемого типа.

Например, если int in, то после выполнения switсh (in )

{

case 0: u=x+y; break; case 1: u=x-y; break; case 2: u=x*y; break; default u=0;

}

В соответствии со значением in вычисляется u. Если in=0, то u=x+y, если in=1, то u=x-y, если in=2, то u=x*y и, наконец, u=0 при любых значениях in

отличных от 0, 1 или 2. Ветвь default можно при необходимости опустить.

2.2. Перечисляемые типы данных

Перечисляемые типы определяют упорядоченное множество идентификаторов, представляющих собой возможные значения переменных этого типа. Вводятся эти типы для того, чтобы сделать код более понятным.

Определяются перечисляемые переменные следующим образом:

enum {константа 1, ... , константа n} <имена переменных>;

Например :

enum {mRed, mYellow, mGreen} mm;

Перечисляемые переменные можно проверять и сравнивать с возможными значениями.

Например:

If (mm > mRed) …

switсh (mm) { case mRed … brеak;

}

По умолчанию перечисляемые значения интерпретируются как целые числа, начиная с -1.

2.3. Кнопки-переключатели в C++ Builder

При создании программ в C++ Builder для организации разветвлений часто используются компоненты в виде кнопок-переключателей. Состояние такой кнопки (включено - выключено) визуально отражается на форме. На форме (рис.2.1) представлены кнопки-переключатели двух типов (TCheckBox, TRadioGroup ).

Компонент TCheckBox создает кнопку независимого переключателя, с помощью которой пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевой переменной, которая проверяется с помощью оператора if.

Компонент TRadiogroup создает группу кнопок - зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0,1,2,...), который анализируется с помощью оператора switсh.

2.4. Пример написания программы

Задание: ввести три числа - x,y,z. Вычислить по усмотрению u=sin(x), u=cos(x) или u=tg(x). Найти по выбору максимальное из трех чисел: max(u,y,z), или max (|u|,|y|,|z|). Cоздать форму, представленную на рис. 2.1, и написать соответствующую программу.

2.4.1. Coздание формы

Создайте форму, такую же, как в первом задании, скорректировав текст надписей и положение окон TEdit.

2.4.2. Работа с компонентом TСheckBox

Выберите в меню компонентов Standard пиктограмму и поместите ее в нужное место формы. С помощью инспектора объектов измените заголовок (Caption) на maxabs. В тексте программы появилась переменная CheckBox1 типа

TСheckBox. Теперь в зависимости от того, нажата или нет кнопка, булева переменная CheckBox1.Checked будет принимать значение true или false.

2.4.3. Работа с компонентом TRadioGroup

Выберите в меню компонентов Standard пиктограмму и поместите ее в нужное место формы. На форме появится окаймленный линией чистый прямоугольник с заголовком RadioGroup1. Замените заголовок (Caption) на U(x). Для того чтобы разместить на компоненте кнопки, необходимо свойство Columns установить равным единице (кнопки размещаются в одном столбце). Дважды щелкните по правой части свойства Items мышью, появится строчный редактор списка заголовков кнопок. Наберите три строки с именами: в первой строке - cos(x), во второй - sin(x), в третьей - tg(x), нажмите ОК.

После этого на форме внутри окаймления появится три кнопкипереключателя с введенными надписями.

Обратите внимание на то, что в тексте программы появится переменная RadioGroup1 типа TRadioGroup. Теперь при нажатии одной из кнопок группы в переменной целого типа RadioGroup1->ItemIndex будет находиться номер нажатой клавиши (отсчитывается от нуля), что используется в тексте приведенной программы.

2.4.4. Создание обработчиков событий FormСreate и Botton1Сlick

Функции для обработки событий FormСreate и Botton1С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="0"; Memo1->Clear();

Memo1->Lines->Add("Рез-ты ст. гр.920201 Петрова И.И.");

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x,y,z,u,ma;

// Ввод исходных данных и вывод в окно Memo1 x=StrToFloat(Edit1->Text); Memo1->Lines->Add("x="+Edit1->Text); y=StrToFloat(Edit2->Text); Memo1->Lines->Add("y="+Edit2->Text); z=StrToFloat(Edit3->Text);

Memo1->Lines->Add("z="+Edit3->Text);

// Проверка номера нажатой кнопки и выбор соответствующей ей функции

switch(RadioGroup1->ItemIndex)

{

case 0: u=cos(x); break; case 1: u=sin(x); break; case 2: u=tan(x); break;

}

if (CheckBox1->Checked) // Проверка состояния кнопки CheckBox1