Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Программированию.doc
Скачиваний:
39
Добавлен:
22.05.2015
Размер:
3.19 Mб
Скачать

5.3.6 Операторы перехода

Операторы перехода выполняют безусловную передачу управления.

  • break – оператор прерывания цикла.

{

оператор;

if (<выражение_условие>) break;

оператор;

}

Т. е. оператор break целесообразно использовать, когда условие продолжения итераций надо проверять в середине цикла.

// Найти сумму чисел, числа вводятся с клавиатуры до тех пор, пока не будет //введено 100 чисел или 0.

for(s=0, i=1; i<100;i++)

{

x =StrToInt(Edit1->Text);

if( x==0) break; // если ввели 0, то суммирование заканчивается

s+=x;

}

  • continue – переход к следующей итерации цикла. Он используется, когда тело цикла содержит ветвления.

//Найти количество и сумму положительных чисел

for( k=0,s=0,x=1;x!=0;)

{

x =StrToInt(Edit1->Text);

if (x<=0) continue;

k++; s+=x;

}

  • goto <метка> – передает управление оператору, который содержит метку.

В теле той же функции должна присутствовать конструкция: <метка>:оператор;

Метка – это обычный идентификатор, областью видимости которого является функция. Оператор goto передает управления оператору, стоящему после метки. Использование оператора goto оправдано, если необходимо выполнить переход из нескольких вложенных циклов или переключателей вниз по тексту программы или перейти в одно место функции после выполнения различных действий.

Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и только один выход.

Нельзя передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию, на операторы, которые стоят после инициализации.

  • return – оператор возврата из функции. Он всегда завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:

return [выражение];

5.4 Пример простейшего проекта

Вычислить периметр, площадь и диагональ прямоугольника со сторонами a и b. После // в программе написан комментарий к строкам.

Форма для данного проекта может быть, например такой, как на рис.

Рисунок 6 - Форма проекта

//

#include <vcl.h>

#pragma hdrstop #include "Unit1.h"

//

#pragma package(smart_init)

#pragma resource "*.dfm"

#include <math.h> // подключение математической библиотеки

TForm1 *Form1;

//

_fastcall TForm 1::TForm 1 (TComponent* Owner) : TForm(Owner)

// сюда помещаются операторы,

// которые должны выполняться при создании формы

{ Label4->Visible=0; // сделать невидимыми метки Label4

Label5->Visible=0; // и Label5

Label6 ->Visible=0;

}

//

void_fastcall TForm1::Button2Click(TObject *Sender)

// сюда помещаются операторы,

// которые должны выполняться при нажатии на Button2 , обязательно необходимо нажать мышкой на форме на кнопку Button2 два раза

{

Close(); // закрывает форму

}

//

void fastcall TForm1::Button1Click(TObject *Sender)

// сюда помещаются операторы,

// которые должны выполняться при нажатии на Button1, обязательно необходимо нажать мышкой на форме на кнопку Button1 два раза

{

double a, b; // объявление переменных

a= StrToFloat(Edit 1->Text); // введенное значение в поле Edit 1 запомнится // в переменной а

b= StrToFloat(Edit2->Text);

double S, P, D; // объявление переменных

P=2*(a+b); // вычисление выражения

S=a*b;

D=sqrt(pow(a,2)+pow(b,2));

Label4->Visible=1; // сделать видимыми метку Label4

Label5 ->Visible=1;

Label6 ->Visible=1;

Label4->Caption=" Периметр прямоугольника Р ="+FloatToStr(P); // вывести // в метку Label4 « Периметр прямоугольника Р = »

Label5->Caption=" Площадь прямоугольника S ="+FloatToStr(S);

Label6->Caption="Диагональ прямоугольника D="+FloatToStr(D);

}

В конструктор форм внесены операторы, делающие невидимыми метки Label4 и Label5 в момент создания формы. Эти метки используются в обработчике кнопки для вывода результатов на экран. Основные вычисления производятся в подпрограмме ButtonlClick. Обратите внимание, что после заголовка подпрограммы следует открывающая фигурная скобка. Фигурные скобки ( {} ) в С всегда используются парами (открывающая и закрывающая) и являются операторными скобками.

Строка

double R,L;

объявляет вещественные переменные R и L. Все переменные в языке С должны быть объявлены перед их использованием.

Строка

R=StrToFloat(Edit 1 ->Text); является оператором присваивания. Переменной R присваивается содержимое редактора Editl. Для перевода значения из строки в вещественное число ис­пользуются, как и в Delphi, функция StrToFloat. Для обращения к свойству компонента используется символы «-» и «>», записанные без пробела.

При написании программы помните, что большие и маленькие буквы в языке C++ различаются, в отличие от Delphi. То есть, например, переменные R и r считаются различными.

Пример 2: Сформировать последовательность из n целых чисел. Определить минимальный элемент и количество четных чисел.

Рисунок 7 - Форма проекта

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int s,x,m=1000000;

int i=1,n,k;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ Label1->Caption=" Введите количество элементов n=";

Label2->Caption=" Введите 1 элемент =";

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

n=StrToInt(Edit1->Text);

x=StrToInt(Edit2->Text);

Edit2->Text="";

i=i+1; // Увеличивает значение переменной i на единицу

if (x<m) m=x;

if ((x%2)==0) k++; // Если остаток от деления х на 2 равен 0, то значение

// переменной к увеличивается на 1

if (i>n) {Button1->Enabled=False; Button2->SetFocus();}

else {Label2->Caption=" Введите"+IntToStr(i)+" элемент =";Edit2->SetFocus();

} }

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Label3->Caption=" min ="+IntToStr(m);

Label4->Caption=" Количество четных элементов ="+IntToStr(k); }

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

Пример 3: S=4+7-10+13+16-19+22+25-28+…, всего n слагаемых;

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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int i,s,n,k;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

n=StrToInt(Edit1->Text);

s=0;k=1;i=4;

do // начало цикла

{

if (k%3= =0) s=s-i; else s=s+i; // Если остаток от деления переменной к

// на 3 равен нулю, то от переменной s отнимаем i, иначе к переменной s

// прибавляем i

i=i+3; k=k+1;}

while (k<n); // конец цикла. Цикл выполняется до тех пор, пока k<n

Label2->Caption=" S ="+IntToStr(s);

}

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

Для справки

Директива #pragma имеет следующий синтаксис: #pragma имя опции и вызывает действия, зависящие от указанной опции. Список возможных опций вы можете найти во встроенной справке C++Builder. Он довольно обширен и связан с различными режимами работы препроцессора. Пример директивы #pragma вы можете видеть в любом модуле своего проекта. Первые две строки файла любого модуля имеют вид: #include <vcl.h> #pragma hdrstop Здесь использована опция hdrstop. Она связана с особенностью работы препроцессора, производительность которого существенно повышается, если учитывается, что некоторое количество заголовочных файлов общие для всех модулей. Директива #pragma hdrstop указывает компилятору конец списка таких общих файлов. Так что надо следить за тем, чтобы не добавлять перед этой директивой включение каких-то заголовочных файлов, не являющихся общими для других модулей. В файлах модулей вы можете еще увидеть две директивы #pragma: #pragma package(smart_init) #pragma resource "*.dfm" Первая из них определяет последовательность инициализации пакетов такой, какая устанавливается взаимными ссылками использующих их модулей. Вторая говорит препроцессору, что для формы надо использовать файл .dfm с тем же именем, что и имя данного файла. ... Например, директива #include <vcl.h> подключает заголовочный файл vcl.h, содержащий объявления, используемые в библиотеке визуальных компонентов C++Builder. ... Следующая директива включает файл Unit1.h, который ищется прежде всего в каталоге, в котором расположен файл, содержащий данную директиву: #include "Unit1.h"

TForm1 *Form1;

Так объявляется указатель с именем Form1 на объект класса TForm1, в дальнейшем он может использоваться для доступа к свойствам и методам формы с именем "Form1".

void __fastcall TForm1::Edit1Click(TObject *Sender)

Так начинается определение обработчика события OnClick для компонента типа TEdit с именем "Edit1", принадлежащего форме с именем "Form1".