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

Информатика_ЗФ / Лабораторный практикум по программированию / Лабораторный_практикум_по программированию_2

.pdf
Скачиваний:
136
Добавлен:
22.03.2016
Размер:
646.66 Кб
Скачать

– точка (x, y) находится вне всех областей.

Вариант 16

Точка (x, y) находится на двери домика;

точка (x, y) находится на стене;

точка (x, y) находится на крыше;

точка (x, y) находится вне дома.

Примечание: отрезок AB принадлежит крыше; точки, находящиеся на прямоугольнике, принадлежат двери.

Методические указания к выполнению задания А

Рассмотрим сначала пример простого ветвящегося процесса, включающего в себя две ветви.

Пример 1. Вычислить значение y. sin x, если x <

Y=

 

 

 

 

 

 

 

 

cos x, если x ≥

 

 

Визуальное

представление ал-

 

 

 

 

 

Начало

 

горитма решения задачи в виде блок-

 

2

 

схемы представлено на рисунке 1.

 

Ввод x

 

 

Базовая управляющая структу-

 

 

ра,

реализующая

разветвляющийся

 

 

 

 

 

 

вычислительный процесс, и её основ-

 

3

 

ные варианты представлены в при-

No

x

Yes

ложении А.

 

 

 

4

5

 

 

 

 

 

Для

визуального

представле-

y=cos(x)

 

y=sin(x)

 

 

ния

алгоритма

используем блоки,

 

 

 

описанные в [10], в приложении Б, в

 

6

 

котором

указаны

обозначение и

 

 

функциональное назначение некото-

 

Вывод x,y

 

 

 

рых блочных символов графического

 

7

 

описания

алгоритмов

(визуальных

 

 

алгоритмов).

 

 

 

 

Конец

 

 

 

 

Рис. 1. Пример простой структуры

 

Если x< , то блоки выполня-

ются в следующей последовательно-

 

«ВЕТВЛЕНИЕ»

сти: 1, 2, 3, 5, 6, 7. Если x , то по-

 

 

 

следовательность выполнения блоков следующая: 1, 2, 3, 4, 6, 7. Это соответствует нашему заданию.

В этом случае для программной реализации структуры «ВЕТВЛЕНИЕ» можно использовать строковый оператор IF.

11

Описание среды программирования QBasic приведено в [10], в Приложении B. Операторы, реализующие структуру «ВЕТВЛЕНИЕ», подробно описаны в приложении Б.

Программа на языке QBasic с использованием строкового оператора IF REM пример использования строкового IF

pi# = 4* ATN(1)

'вычисление

INPUT "введите аргумент";x

IF x<pi# THEN y= sin(x) ELSE y= cos(x)

PRINT "x=";x,"y=";y

END

С помощью строчного оператора If-Then-Else в программе организовано две ветви вычислений.

Однако для реализации структуры «ВЕТВЛЕНИЕ» предпочтительнее использовать блочный оператор If-Elseif-Else-End If, который является наиболее гибкой структурой передачи управления.

Программа на языке QBasic с использованием блочного оператора IF REM пример использования блочного IF

pi# = 4* ATN(1) 'вычисление

INPUT "введите аргумент";x IF x<pi# THEN

y= sin(x) ELSE

y= cos(x) END IF

PRINT "x=";x,"y=";y END

Пример выполнения задания A лабораторной работы

Задание A

Вычислить значение функции:

a x,если x 1 y x2 , если1 x 3

x, если x 3

для x=0,1, x=2,5, x=16, a=1

Визуальное представление алгоритма решения задачи в виде блоксхемы представлено на рисунке 2.

Если сравнить схему на рисунке 2 со схемой на рисунке А.1 приложения А, то видно, что S2 (по ветви NO) представляет собой структуру «ВЕТВЛЕНИЕ». То есть здесь одна структура «ВЕТВЛЕНИЕ» вложена внутрь другой. Такой процесс называют сложным ветвящимся. При x < 1

12

блоки выполняются в следующей последовательности: 1, 2, 3, 7, 8, 9. При 1 ≤ x ≤ 3 последовательность выполнения блоков: 1, 2, 3, 4, 6, 8, 9. Если x > 3, блоки выполняются в следующей последовательности: 1, 2, 3, 4, 5, 8, 9.

Начало

2

Ввод x,a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x < 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

No

 

Yes

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

x <= 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

No

 

 

 

 

 

 

Yes

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Y = sqr(x)

 

 

 

 

 

 

 

 

 

Y = x 2

 

 

 

 

 

Y = a*x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

Вывод

x,a,y

9

Конец

Рис. 2. Визуальное представление алгоритма решения задания А в виде блок-схемы

Программа на языке QBasic 1. При использовании блочного оператора IF

INPUT "введите x,a";x,a IF x<1 THEN

y=a*x

ELSEIF x<=3 THEN y=x^2

ELSE y=sqr(x) END IF

PRINT USING "x=##.## a=##.## y=##.## ";x,a,y END

2. При использовании оператора SELECT CASE

INPUT "введите x,a";x,a SELECT CASE x CASE IS<1

y=a*x CASE 1 TO 3 y=x^2 CASE ELSE y=sqr(x)

13

END SELECT

PRINT USING "x=##.## a=##.## y=##.## ";x,a,y

END

 

В качестве тестовых значений исходных данных возьмем следующие

значения:

 

 

 

 

 

 

 

1)

x=0.5

a=1

Y(x)=a*x=0.5

 

2)

x=1

a=1

Y(x)=x2=12=1

 

3)

x=2.5

a=1

Y(x)=x2=2.52=6.25

4)

x=3

a=1

Y(x)=x2=32=9

 

5)

x=9

a=1

Y(x)=

 

=

 

=3

x

9

 

Число тестовых значений равно числу ветвей плюс количество гра-

ничных точек.

 

 

 

 

 

 

 

Получим результаты работы каждой ветви при реальных значениях

переменных x и a.

 

 

 

 

 

 

 

Результат выполнения программы

 

введите x,a? 0.1,1

 

 

 

 

 

x=

0.10

a= 1.00

y=

0.10

 

введите x,а? 2.5,1

 

 

 

 

 

x=

2.50

a= 1.00

y=

6.25

 

введите x,а? 16,1

 

 

 

 

 

x= 16.00

a= 1.00

y=

4.00

 

Результаты выполнения второй программы выглядят так же.

Рассмотрим этот же пример разработки ветвящейся программы, основанный на методике компьютерного решения задач (процедурное программирование), реализуемый средствами языка VBA. Для ввода значений x и a с помощью клавиатуры используем функцию InputBox(). Для вывода значения y используем функцию MsgBox().

Программный код Public Sub Ветвление_А()

Dim x As Single

Dim a As Single

Dim y As Single

x = Val(InputBox("Введите x")) a = Val(InputBox("Введите a"))

If x < 1 Then y = a * x

ElseIf x <= 3 Then y = x ^ 2

Else

y = Sqr(x)

End If

14

MsgBox "X=" & x & " " & "A=" & a & " " & "Y=" & y

End Sub

Пояснение. Для ввода переменных x и a использована функция InputBox(), которая выводит на экран диалоговое окно, содержащее сообщение и поле ввода. Функция возвращает введенное значение типа string (строковое), поэтому его надо «подредактировать» функцией Val(), которая переводит «строку» в числовое значение соответствующего типа. Для слияния строк использована операция & (конкатенация). Допустимо использовать также «+».

Последовательность ввода кода программы, запуск программы на выполнение описаны в [10].

Результат работы программного кода показан на рисунках 3, 4, 5.

Рис. 3. Диалоговое окно ввода переменной x – результат использования функции InputBox("Введите x").

Рис. 4. Диалоговое окно ввода переменной a – результат использования функции InputBox("Введите a").

Рис. 5. Результаты работы программного кода в диалоговом окне

15

сообщений MsgBox

Протестируйте остальные ветви алгоритма, введя соответствующие значения исходных данных.

Теперь рассмотрим пример разработки программного кода того же примера, используя объектно ориентированное программирование, реализуемое средствами языка VBA. Основой для визуального программирования являются экранные формы. Форма аналогична диалоговому окну в

Windows.

Работа над проектом начинается с создания графического интерфейса приложения. Чтобы спроектировать наше приложение, нужно взять некоторые стандартные элементы управления, поместить их на форму, затем установить начальные свойства этих элементов и создать код обработки событий, связанных с этими элементами. Последовательность всех этих действий рассмотрена в [10].

Разместим на форме (рис. 4), используя метод «drag-and-drop», следующие стандартные элементы управления: три элемента типа Label (Label1, Label2 и Label3), в которых потом расположим надписи X=, A=, Y=, изменив свойства элементов Caption в окне свойств; три элемента ти-

па TextBox (TextBox1, TextBox2 и TextBox3) для размещения исходных данных; для запуска программы поместим командную кнопку Command-

Button1 , в элементе типа Image расположим формулу для вычисления y (начинающим программистам этот элемент можно не размещать).

Image1

TextBox2

TextBox3

TextBox1

Рис. 6. Форма и расположение на ней элементов управления

Зададим новые значения свойств элементам управления, размещенным на форме (рис. 7). Согласно общепринятым соглашениям, имя объекта начинается с префикса, который определяет тип объекта. Для надписей принят префикс lbl, для текстовых полей – txt, для командных кнопок –

16

cmd. После префикса идет информативная часть имени, которая пишется с прописной буквы.

Image1

LblY

TxtA

LblA

TxtY

LblX

CmdY

TxtX

Рис. 7. Форма и её элементы управления после переименования и изменения свойств

Соблюдая «этикет VBA», переименуем элементы управления TextBox1, TextBox2 и TextBox3 в TxtX, TxtA, TxtY. Для этого достаточно из-

менить их свойство Name (имя) в окне свойств. Для этого выделим элемент, в окне свойств найдем свойство Name (имя). Впишем соответствующее имя в правую колонку и нажмем <Enter>.

Таким же образом можно изменить имена меток Label1, Label2, Label3 на имена LblA, LblX, LblY.

Командной кнопке автоматически будет присвоено имя CommandButton1. Измените это имя на cmdY, также изменив свойство Name (имя) в окне свойств. Надпись на командной кнопке автоматически будет «CommandButton1». Измените надпись на кнопке – для этого достаточно изменить ее свойство Caption (надпись) и записать новый текст «Пуск». Выделите кнопку, в окне свойств найдите свойство Caption и впишите в него «Пуск». Свойство Caption можно изменить, применив два одинарных щелчка мышью и вписав надпись прямо в элемент.

Таким же образом можно изменить свойство Caption (надпись) на метках.

Сгенерируйте процедуру обработки события Click (кликанье левой кнопки мыши) для кнопки CmdY. Для этого достаточно быстро кликнуть на этой кнопке два раза левой кнопкой. В результате будет создана нужная нам процедура, в которую надо ввести следующий код.

Программный код при использовании блочного оператора If Private Sub CmdY_Click()

17

Dim x As Single

Dim a As Single

Dim y As Single

x = Val(TxtX.Value)

a = Val(TxtA.Value)

If x < 1 Then y = a * x

ElseIf x <= 3 Then y = x ^ 2

Else

y = Sqr(x)

End If

TxtY.Value = y

End Sub

Запустите ваше приложение, выбрав команду Run Run Sub/ UserForm или нажав функциональную клавишу F5. В текстовые окна введите исходные данные и нажмите командную кнопку «Пуск».

Результаты выполнения программного кода при значении X < 1 представлены на рисунке 8.

Протестируйте остальные ветви алгоритма, введя соответствующие значения исходных данных.

Рис. 8. Диалоговое окно для решения задания А при x < 1

Для решения той же задачи можно использовать оператор Select Case (прил. 2).

Программный код при использовании оператора Select Case

Private Sub CmdY_Click()

18

Dim x As Single

Dim a As Single

Dim y As Single

x = Val(TxtX.Value)

a = Val(TxtA.Value)

Select Case X

Case Is < 1 y = a * x

Case 1 To 3 y = x ^ 2

Case Else

y = Sqr(x)

End Select

TxtY.Value = y

End Sub

Форма и диалоговое окно для решения задачи в этом случае выглядят так же, как и в предыдущем случае (рис. 6, 7 и 8).

Пример выполнения задания B лабораторной работы

Задание B

Составить схему алгоритма и программу, которая определяет и выводит на экран сведения о положении точки с координатами (x, y) в указанной области. Координаты точки вводятся с клавиатуры по запросу пользователя. Выполнить тестирование и отладку программы. При тестировании программы количество точек следует взять равным количеству областей плюс одна точка, которая должна находиться вне областей. Получить результаты выполнения программы для тестового варианта исходных данных. Проанализировать результаты выполнения программы.

1)Точка (x, y) находится в области А;

2)точка (x, y) находится в области В;

3)точка (x, y) находится в области С;

4)точка (x, y) находится вне областей. Примечание: Попадание на границу области следует считать попаданием в область. Точки, находящиеся на окружности, считать принадлежащими области А.

Разработка алгоритма решения

Первым шагом алгоритма должен быть ввод координат точки: x и y. Для большего удобства при анализе результатов можно вывести введенные значения на экран.

19

Для определения условия нахождения точки в указанных областях воспользуемся справочными сведениями из математики.

Если прямая отсекает на осях x и y отрезки a и b (не равные нулю),

то её можно представить уравнением: x y 1. a b

Окружность радиуса R с центром в начале координат представляется уравнением: x2 y2 R2 .

Окружность радиуса R с центром в точке с координатами (a, b) представляется уравнением: (x a)2 (y b)2 R2 .

Исходя из этого условие нахождения точки в области А выглядит следующим образом: x2 y2 12, так как R=1.

Область B образуется пересечением прямой Y=2 и окружностью радиуса R=1 с центром в точке с координатами a=2, b=2. Уравнение этой ок-

ружности (x 2)2 (y 2)2 12 . Для проверки попадания точки в заданную область нужно проверить условия того, что:

1) Точка лежит ниже прямой или на ней, т.е.: Y 2.

2) Точка лежит внутри окружности или на ней, т.е.:

(x 2)2 (y 2)2 12 .

Точка принадлежит области B, если выполняются оба условия. Если же не выполняется хотя бы одно из них, точка лежит вне области. Следовательно, эти условия должны быть объединены логической операцией «конъюнкция» – «И». Таким образом, условие нахождения точки в области B на алгоритмическом языке выглядит: (x-2)^2+(y-2)^2<=1^2 and y<=2.

Аналогичным образом записываем выражение, определяющее условие нахождения точки в области C. Область C определяется пересечением

прямой

x

 

y

1, где a=-3, b=3, т.е.

x

 

 

y

1, осью x, уравнение которой

 

 

3

 

 

a b

3

 

y=0, осью y, уравнение которой x=0, и окружностью с центром в начале координат x2 y2 12 . Для проверки попадания точки в заданную область нужно проверить условия того, что:

1) Точка лежит ниже прямой

x

 

 

y

1 или на ней, т.е.:

x

 

 

y

1.

3

 

3

 

 

3

 

3

 

2)Точка лежит слева от оси y или на ней, т.е.: x 0.

3)Точка лежит выше оси x или на ней, т.е.: y 0.

4)Точка лежит вне окружности с центром в начале координат или на

ней, т.е.: x2 y2 12 . Проверка этого условия является лишней, так как условие нахождения точки в области C проверяется после проверки условия нахождения точки в области A и в том случае, если точка находится вне области A, следовательно, x2 y2 12 .

20