Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Примеры решения задач с разветвляющимся вычислительным процессом

Задача 1. Определить попадание точки с координатами (x, y) в область S (рис. 1).

Сформулируем логическое условие попадания точки с координатами (x, y) в область S.

Уравнение окружности, которая ограничивает область S в первом и втором квадранте системы координат XOY имеет вид:

Рис. 1. Область S

Введём логическую переменную FLAG типа Boolean.

Тогда величину FLAG, которая принимает значение true, в том случае, когда точка с координатами (x, y) принадлежит области S, можно найти по формуле:

FLAG = (X>=-A) AND (X<=A) AND ((Y<=(A*A–X*X)^(1/2) AND (Y>=0))

OR ((Y<0) AND (Y>=B)))

Либо, учитывая приоритеты выполнения операций, можно записать

FLAG = X>=-A AND X<=A AND (Y<=(A*A–X*X)^(1/2) AND Y>=0 OR

Y<0 AND Y>=B)

Код программы представлен процедурой pr1.

Sub pr1()

Dim A As Double, B As Double

Dim X As Double, Y As Double

Dim Flag As Boolean

 

A = InputBox(“введите A “)

B = InputBox(“введите B “)

X = InputBox(“введите X “)

Y = InputBox(“введите Y “)

Flag = X>=-A AND X<=A AND _

(Y>=0 AND Y<=(A*A–X*X)^(1/2) OR Y<0 AND Y>=B)

If Flag Then

MsgBox(“Точка попадает в область”)

Else

MsgBox(“Точка вне области”)

EndIf

EndSub

Задача 2. Для заданного с клавиатуры значения X вычислить Y по формуле:

Эту задачу можно решить двумя способами. Первый способ предусматривает использование трех операторов IF сокращенной формы. Алгоритм решения достаточно прост (см. блок-схему на рис. 2а). Последовательно проверяется три взаимно исключающих друг друга условия, образующих полную группу событий. Для любого X только одно условие примет значение true, остальные два условия равны false. Таким образом, оператор присвоения выполнится только один раз, и этот оператор будет соответствовать условию, имеющему значение true.

Программная реализация представлена процедурой pr2_1.

Второй способ предусматривает использование одного оператора If полной формы. Алгоритм этого способа реализован в виде блок-схемы, представленной на рис. 2б. Программная реализация представлена процедурой pr2_2.


 

 
 


Рис. 2а. Блок-схема алгоритма решения задачи 2 (вариант pr2_1)


 

 
 


Рис. 2б. Блок-схема алгоритма решения задачи 2 (вариант pr2_2)

 

Sub pr2_1() Dim X As Double, Y As Double X=InputBox(“введите X “) If X<=0 Then Y=1/4*(Abs(X)+1)^(1/4) End If If X>0 And X<1 Then Y=1/3*X^(1/3) End If If X>=1 Then Y=1/2*X^(1/2) End If MsgBox(“Y=“ & Y) End Sub   Sub pr2_2() Dim X As Double, Y As Double X = InputBox(“введитеX “) If X<=0 Then Y=1/4*(Abs(X)+1)^(1/4) ElseIf X>0 And X<1 Then Y=1/3*X^(1/3) Else Y=1/2*X^(1/2) End If MsgBox(“Y=“ & Y) End Sub  

Задача 3. Составить программу, которая по введенному значению X вычисляет и выводит значение Y = F(X), где F(X) задана графически на рис. 3.

Эта задача отличается от задачи, описанной в предыдущем примере, только тем, что нужно самостоятельно составить формулу для функции F(X). В предыдущей задаче эта формула была задана в качестве исходных данных. Таким образом, от вас требуется сделать формальную, математическую постановку задачи, которая в данном случае сводится к составлению по графику системы уравнений, аналогичной заданной в условии задачи 2.

Глядя на график (см. рис. 3) нетрудно увидеть, что на нем изображена кусочно-линейная функция, содержащая три прямых линии. Первая прямая имеет уравнение Y = –X–1 и определена для X ≤ 0. Вторая линия определена на отрезке 0 ≤ X ≤ 1 и имеет уравнение Y = X – 1. Третья прямая линия имеет уравнение Y = 0 и определена для X ≥ 1. С учетом выше сказанного, искомая формула будет иметь вид:

Блок-схема алгоритма решения задачи представлена на рис. 4.

Код программы – процедура pr3.

Sub pr3()

Dim X As Double, Y As Double

X = InputBox(“введите X “)

If X >= 1 Then

Y = 0

ElseIf X <= 0 Then

Y = -X - 1

Else

Y = X – 1

End If

MsgBox(“Y=“ & Y)

End Sub


Рис. 4. Блок-схема алгоритма решения задачи 3

Задача 4. Составить программу, которая по введенному значению X вычисляет и выводит значение Y = F(X), где F(X) задана графически на рис. 5.

Задача аналогична предыдущей, отличается от неё лишь тем, что при X<-2 значение функции Y не определено. По этой причине нельзя использовать общий блок вывода результата, а вывод результата необходимо вставить в каждую ветку программы.

В результате формализации задачи получим следующую систему уравнений:

Блок-схема алгоритма решения задачи представлена на рис. 6, а код программы представлен процедурой pr4_1.


Рис. 6. Блок-схема алгоритма решения задачи 4 (вариант pr4_1)

Sub pr4_1()

Dim X As Double, Y As Double

X = InputBox(“Введите X “)

If X >= 1 Then

Y = 0

MsgBox(“Y=“ & Y)

ElseIf X > 0 And X < 1 Then

Y = X – 1

MsgBox(“Y=“ & Y)

ElseIf X >= -2 And X <= 0 Then

Y = -X – 1

MsgBox(“Y=“ & Y)

Else

MsgBox(“Нет решения“)

End If

End Sub

Другой вариант решения той же задачи заключается в том, что используем дополнительную переменную логического типа mist, которая первоначально содержит значение false, а при вводе Х < -2 меняет своё значение на true. Анализируя значение mist, выводим либо значение переменной Y, либо сообщение о том, что задача не имеет решения. Блок-схема алгоритма этого варианта решения представлена на рис. 7. Код программы – процедура pr4_2.

 
 


Рис. 7. Блок-схема алгоритма решения задачи 4 (вариант pr4_2)

Sub pr4_2()

Dim XAs Double, Y As Double, mist As Boolean

mist = false

X = InputBox(“введитеX “)

If X >= 1 Then

Y = 0

ElseIf X > 0 And X < 1 Then

Y = X – 1

ElseIf X >= -2 And X <= 0 Then

Y = –X – 1

Else

mist = true

End If

If mist Then

MsgBox(“Нет решения “)

Else

MsgBox(“Y= “ &Y)

End If

End Sub

Задача 5. Для заданного целого положительного K и значения вещественного числа X вычислить Y = F(X) по формуле:

Блок-схема алгоритма решения задачи с применением оператора If представлена на рис. 8, а код программы – в процедуре pr5_If.

Sub pr5_If()

Dim X As Double, Y As Double, K As Integer, mist As Boolean

X = InputBox(“X=“)

K = InputBox(“K=“)

mist=false

If K=2 Or K=3 Then

Y = X^K + X + 1

ElseIf K>=4 And K<=10 Then

If X<>-1 Then

Y=1/Abs(X+1)

Else

mist=true

End If

Else

Y=Abs(X+K)^(1/2)+ Abs(X-K)^(1/2)

End If

If Not mist Then

MsgBox(“Y=“ &Y)

Else

MsgBox(“Нет решения“)

End If

End Sub

 
 


Рис. 8. Блок-схема алгоритма решения задачи 5 (вариант pr5_If)

Решим эту же задачу с использованием оператора варианта Select Case. Блок-схема алгоритма решения задачи с применением оператора Select Case отличается от блок-схемы решения с помощью оператора If. Алгоритм решения этой задачи описан с помощью блок-схемы, представленной на рис. 9, код программы представлен в процедуре pr5_Case.

 
 


Рис. 9. Блок-схема алгоритма решения задачи 5 (вариант pr5_Case)

Sub pr5_Case()

Dim X As Double, Y As Double, K As Integer, mist As Boolean

X = InputBox(“X=“)

K = InputBox(“K=“)

mist = false

Select Case K

Case 2, 3

Y = X^K + X + 1

Case 4 To 10

If X<>-1 Then

Y = 1 / Abs(X+1)

Else

mist = true

End If

Case Else

Y = Abs(X+K)^(1/2) + Abs(X-K)^(1/2)

End Select

If Not mist Then

MsgBox(“Y=“ & Y)

Else

MsgBox(“Нет решения“)

End If

End Sub


Задача 6. В прямоугольный люк трюма судна с габаритными размерами X × Y следует погрузить прямоугольный контейнер с размерами сторон L, W, H. Требуется проанализировать ситуацию и вывести на экран сообщения о том пройдёт ли контейнер в люк, а если пройдёт, то какими сторонами его опускать. Величины X, Y, L, W, H ввести с клавиатуры. В расчётах учесть технологический зазор Обратите внимание, что исходные данные должны быть введены в одних единицах измерения.

Блок-схема алгоритма решения задачи представлена на рис. 12, а код программы представлен процедурой pr6.


 

       
 
 
   
Рис. 12. Блок-схема алгоритма решения задачи 7  


Sub pr6()

Dim X As Double, Y As Double

Dim L As Double, W As Double, H As Double

Dim d As Double

Dim Prompt As String

Dim cargo As Boolean ‘первоначальная установка – не пройдёт

X = InputBox(“Введите X”)

Y = InputBox(“Введите Y”)

L = InputBox(“Введите длину контейнера L”)

W = InputBox(“Введите ширину контейнера W”)

H = InputBox(“Введите высоту контейнера H”)

d = InputBox(“Введите технологический зазор d”

L = L + d

W = W + d

H = H + d

 

‘ Пройдёт ли сторонами L × W?

If X >= L And Y >= W Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами L по X, W по Y”

cargo = true

End If

If X >= W And Y >= L Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами W по X, L по Y”

cargo = true

End If

 

‘ Пройдёт ли сторонами L × H?

If X >= L And Y >= H Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами L по X, H по Y”

cargo = true

End If

If X >= H And Y >= L Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами H по X, L по Y”

cargo = true

End If

 

‘ Пройдёт ли сторонами H × W?

If X >= H And Y >= W Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами H по X, W по Y”

cargo = true

End If

If X >= W And Y >= H Then

Prompt = Prompt & vbNewLine & _

“Пройдёт сторонами W по X, H по Y”

cargo = true

End If

If cargo Then

MsgBox(Prompt)

Else

MsgBox(“Контейнер не пройдёт в люк!”)

End If

End Sub



<== предыдущая лекция | следующая лекция ==>
Глава 3. Реальности загробной жизни Эль Бренан. | Отдел Plasmodiophoromycota.
Поделиться с друзьями:


Дата добавления: 2016-12-05; Мы поможем в написании ваших работ!; просмотров: 1212 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студенческая общага - это место, где меня научили готовить 20 блюд из макарон и 40 из доширака. А майонез - это вообще десерт. © Неизвестно
==> читать все изречения...

2389 - | 2339 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.