Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Belova_T_M_Programmirovanie_na_S_Builder

.pdf
Скачиваний:
226
Добавлен:
15.03.2016
Размер:
2.15 Mб
Скачать

Программирование линейных алгоритмов в системе C++Builder

71

25.Дано целое четырехзначное число. Вычислить дробную часть среднего арифметического цифр этого числа.

26.Дано целое четырехзначное число. Вычислить дробную часть среднего геометрического цифр этого числа.

27.Дано целое пятизначное число. Вычислить среднее геометрическое и среднее арифметическое 1, 3, 5 цифр этого числа.

28.Дано целое пятизначное число. Вычислить сумму и произведение 1, 3, 5 цифр этого числа.

29.Дано целое пятизначное число. Вычислить среднее арифметическое и среднее геометрическое 2, 4 цифр этого числа.

30.Даны x, y, z. Вычислить a, b, если:

 

3 + e y-1

(y-x)2

 

|y-x|3

a =

 

; b = 1 + |y-x| +

 

+

 

.

1 + x |y-tg z|

2

3

 

2 + |x - 2x/(1 + xy)|

 

 

 

 

П р и м е ч а н и я:

1.Сторона треугольника c a2 b2 2 a b cos g , где a,b - стороны треугольника; g - угол между сторонами a и b.

2.Площадь треугольника s p p a p b p c , где a,b,c- стороны

треугольника; p – полупериметр.

3.Радиус вписанной в прямоугольный треугольник окружности r=s/p, где s – площадь треугольника; p – полупериметр треугольника.

4.Площадь окружности s= r2 , длина окружности l=2 r, где r - радиус окружности.

72

3 ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЕННЫХ

АЛГОРИТМОВ В СИСТЕМЕ C++BUILDER

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

3.1 Основные понятия

Составной оператор представляет собой группу операторов, отделенных друг от друга точкой с запятой и ограниченную операторными скобками {}.

Пример:

{

оператор 1; оператор 2;

. . .

оператор n;

}

Пример:

{

a+=12;

c=a*b+2;

}

Составной оператор воспринимается как единое целое и может находиться в любом месте программы.

На языке C++Builder имеются две формы условного оператора: полный и неполный.

Полный условный оператор (рисунок 3.1)

Ключевые слова if, else означают, соответственно, «если», «иначе». Условие – выражение логического типа. При записи условия могут использоваться операции отношения =, !=, >, >=, <, <= и логические операции &&, ||, !.

Программирование с использованием одномерных массивов

73

...

 

 

 

 

 

 

 

 

if (условие) s1;

 

 

 

 

 

да

 

 

 

нет

else s2;

условие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s1

 

 

 

 

 

s2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...

Рисунок 3.1 Схема алгоритма полного условного оператора

Здесь s1, s2 - один простой или составной оператор.

Если после условия или ключевого слова else следует выполнить не один, а несколько операторов, то необходимо использовать составной оператор. Результатом вычисления условия может являться истина (true) или ложь (false). Если условие истинно, то выполняется оператор s1, иначе – оператор s2.

Приоритеты выполнения операций: () ; ++, -- ; !;

*, /, % ; +, – ;

>, >=, <, <= ; ==, != ; && ; ||, ^ ; =.

Пример:

int a=1, b=2, c=0; if (a>b)

c=a; else c=b;

Так как выражение a>b ложно, будет выполняться оператор после else, то есть c=b.

74

Программирование линейных алгоритмов в системе C++Builder

Неполный условный оператор (рисунок 3.2)

 

...

 

 

нет

 

да

if (условие) S1;

условие

 

 

 

 

 

 

S1

 

 

...

 

 

Рисунок 3.2 Схема алгоритма неполного условного оператора

Если результат условия – истина, то выполняется оператор s1. Если ложь, то выполняется оператор, непосредственно следующий за условным оператором if.

Пример:

int a=2, b=8, c=0; if (a>b) c=a+b;

c+=12;

Результатом выполнения данного примера будет c=12, так как выражение a>b ложно и оператор c=a+b не будет выполняться. Если после условия следует выполнить не один, а несколько операторов, то необходимо использовать составной оператор.

Оператор выбора

switch <выражение - селектор> {

case значение 1 : оператор 1; break; case значение 2 : оператор 2; break;

. . .

case значение n : оператор n; break; default : оператор;

}

Оператор выбора switch является обобщением оператора if и позволяет сделать выбор из произвольного числа вариантов.

Программирование с использованием одномерных массивов

75

Оператор switch работает следующим образом. Сначала вычисляется значение выражения - селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если значение выражения – селектора совпало со значением, указанным в одной из меток case, то выполняется оператор, записанный после этой метки. После чего будут выполняться все последующие операторы остальных меток, если не записан оператор break. Он прерывает выполнение структуры switch, и управление передается следующему за ней оператору. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словом default. Слово default может отсутствовать. Если слово default отсутствует, то активизируется первый оператор за границей switch. Селектор может иметь любой порядковый тип (целый, символьный, логический) и не может иметь вещественный тип. Тип констант в любом случае должен совпадать с типом селектора.

Примеры записи оператора switch

1. Селектор целого типа int k. switch (k)

{

case 1: z=k+10; break; case 2: z=k+100; break;

case 3: case 4: case 5: z=k+1000; break;

}

2. Селектор символьного типа char n (рисунок 3.3). switch (n)

{

case A : case a : Label1->Caption= арбуз ; break; case Д : case д : Label1->Caption= дыня ; break; case C : case c : Label1->Caption= слива ; break;

default: Label1->Caption= ошибка ;

}

76

Программирование линейных алгоритмов в системе C++Builder

n

а,А

ошибка

 

 

 

арбуз

д,Д

дыня

с,С

слива

Рисунок 3.2 Схема алгоритма оператора выбора с селектором символьного типа

В первом и во втором примерах показан способ задания размещения подряд нескольких меток.

3.2 Пример программирования разветвленного алгоритма Задание. Вычислить значение функции

sin2x,

если x<0,

f = cos x2,

если 0 x < 1.5,

x, если x 1.5.

1.Разработка алгоритма (рисунок 3.4):

Входные данные: x – действительная переменная. Выходные данные: f – действительная переменная.

Программирование с использованием одномерных массивов

77

 

 

х

 

нет

да

 

 

x<0

нет

x>=1.5

да

 

f =sin2x

 

 

f=cos x2

 

f = x

f

Рисунок 3.4 Схема алгоритма программы

2. Разработка формы (рисунок 3.5, таблица 3.1):

Таблица 3.1 Используемые компоненты

Имя ком-

Страница

Настраиваемое

 

палитры

Значение

понента

свойство

компонент

 

 

 

 

 

1.

Form1

Caption

Пример лабораторной работы №3

 

 

 

 

 

2.

Edit1

Standard

Text

 

 

 

 

 

 

3.

Label1

Standard

Caption

Введите x

 

 

 

 

 

4.

Label2

Standard

Caption

Результат

 

 

 

 

 

5.

Label3

Standard

Caption

 

 

 

 

 

 

6.

Label4

Standard

Caption

Для вывода результата – щелчок

по метке «Результат»

 

 

 

 

78

Программирование линейных алгоритмов в системе C++Builder

Рисунок 3.5 Внешний вид формы

3. Текст программы: //---------------------------------------------------------------------------

#include <vcl.h> #include <math.h> #pragma hdrstop #include "Unit1.h"

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

#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{

}

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

//обработчик события OnClick

void __fastcall TForm1::Label2Click(TObject *Sender) { double x,f;

//преобразование текста из Edit1 в вещественное число

Программирование с использованием одномерных массивов

79

x=StrToFloat(Edit1->Text);

/*при выполнении определённого условия вычисление f осуществляется по соответствующей формуле*/

If (x<0) f=pow(sin(x),2); else

if(x>=1.5) f = x;

else f = cos(pow(x,2));

/* преобразование числа f в строковый формат и вывод результата в метке Label3 */

Label3->Caption=FloatToStr(f);

}

3.3Контрольные вопросы к разделу 3

1.Вычислить значения выражений:

a || b && !a при a=true и b=false;

t && (p %3==0) при t=true, p=1011; (x*y) && (y>x) при x=2, y=1; (x*y!=0) || (y>x) при x=2, y=1;

!(a && b) при a=false, b=true.

2.Записать на C++Builder выражение, истинное при выполнении данного условия:

хпринадлежит отрезку [0,1];

x лежит вне отрезка [0,1];

x принадлежит отрезку [2,5] или [-1,1]; x лежит вне отрезка [2,5] или [-1,1].

3.Пояснить структуру и правила выполнения условных операторов.

4.Записать указанное действие в виде одного условного оператора:

cos2x, при 0< x <2;

у =

1-sin2x, иначе.

5. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x=1, y= 1;

80 Программирование линейных алгоритмов в системе C++Builder

if (x>0) if (y>0) z=1; else z=2;

6. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x= 1, y=1;

if (x) { if (y>0) z=1;} else z=2;

7. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x=0, y=1;

if (x) { if (y>0) z=1;} else z=2;

8. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x=3, y=1;

if (x) { if (y) z=1;} else z=2;

9. Укажите ошибки в следующих операторах: if (1<x<2) x=x+1; y:=0;

else x=0; y+= 1;

10. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x=0, y=1;

if (!x) { if (!(y 1)) z=1;} else z=2;

11. Какое значение будет иметь переменная z после выполнения операторов:

int z=0, x=1, y=1;

if (!x) { if (!(y 1)) z=1;} else z=2;

12.Найдите ошибки во фрагменте программы:

{int n,x; switch (k)

case + : x:=x-4 break;

case - , * , x=5;

}

Какие правила нарушены и как можно исправить ошибки?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]