Блок-схема.
Реализация 2-го задания
Задание
Построить проект для формирования таблицы значений функции f(x,y) = ((x-1+y)^(1/3))*x при изменении x на отрезке [a,b] с шагом h1 и y на отрезке [c,d] с шагом h2. Найдите наибольшее значение функции на этом же отрезке.
Формализация и уточнение задания
Для решения задачи табуляции функции на заданном интервале следует использовать алгоритмическую структуру регулярного типа, так как заданы начальное и конечное значения аргумента, а также шаг его изменения. Таким образом, в данном случае можно заранее определить количество вычисленных значений.
Графический интерфейс
Таблица элементов.
Имя объекта
|
Свойство |
Значение свойства |
Form1 |
Text |
Form1 |
Label1 |
Name |
Label1
|
Text |
Тема 4.5. Программирование алгоритмов регулярных циклических структур и цикл в цикле | |
Label3 |
Name |
Label3
|
Text |
A= | |
Label4 |
Name |
Label4
|
Text |
B= | |
Label5 |
Name |
Label5
|
Text |
H1= | |
Label6 |
Name |
Label6
|
Text |
C= | |
Label7 |
Name |
Label7 |
Text |
D= | |
Label8 |
Name |
Label8 |
Text |
H2= | |
Label9 |
Name |
Label9 |
Text |
Минимальное значение z = | |
TextBox1 |
Name |
TextBox1 |
TextBox2 |
Name |
TextBox2 |
TextBox3 |
Name |
TextBox3 |
TextBox4 |
Name |
TextBox4 |
TextBox5 |
Name |
TextBox5 |
TextBox6 |
Name |
TextBox6 |
TextBox7 |
Name |
TextBox7 |
ListBox1 |
Name |
ListBox1 |
Button1 |
Name |
Button1 |
Text |
Выполнить | |
Button2
|
Name |
Button2 |
Text |
Повторить | |
Button3
|
Name |
Button3 |
Text |
Выход |
Программный код.
Option Strict On
Option Explicit On
Imports System.Math
Public Class Form1
Sub vivod(ByVal w As Double, ByVal T As TextBox)
T.Text = CStr(w)
End Sub
Function vvod(ByVal T As TextBox) As Double
Return CSng(Val(T.Text))
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, c, d, h1, h2 As Double
Dim n1, n2 As Integer
a = CDbl(vvod(TextBox1))
b = CDbl(vvod(TextBox2))
h1 = CDbl(vvod(TextBox3))
c = CDbl(vvod(TextBox4))
d = CDbl(vvod(TextBox5))
h2 = CDbl(vvod(TextBox6))
n1 = zikl(a, b, h1)
n2 = zikl(c, d, h2)
list(a, b, c, d, n1, n2, h1, h2)
End Sub
Function zikl(ByVal a As Double, ByVal b As Double, ByVal h As Double) As Integer
Return CInt(Fix((Abs(a - b) / h)) + 1)
End Function
Function func(ByVal x As Double, ByVal y As Double) As Double
Return x * Sqrt(Sqrt(x - 1 + y))
End Function
Sub list(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double, ByVal n1 As Integer, ByVal n2 As Double, ByVal h1 As Double, ByVal h2 As Double)
Dim min, x, y, z As Double
Dim str1, str2, str3, str4 As String
Dim str, divider As String
Dim i As Integer
str = " "
str1 = " N |"
str2 = " X |"
str3 = " Y |"
str4 = " Z |"
divider = "____________________________"
min = System.Double.MaxValue
For i = 1 To n1
y = c
For j = 1 To n2
z = func(x, y)
If z < min Then min = z
str1 = str1 + Format(i, "000") + Space(6) + "|" + Space(2)
str2 = str2 + Format(x, "0.000") + Space(6) + "|" + Space(2)
str3 = str3 + Format(y, "0.000") + Space(6) + "|" + Space(2)
str4 = str4 + Format(z, "0.000") + Space(6) + "|" + Space(2)
y = y + h2
Next
x = x + h1
Next
ListBox1.Items.Add(str)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(str1)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(str2)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(str3)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(str4)
ListBox1.Items.Add(divider)
ListBox1.Items.Add(str)
vivod(min, TextBox7)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Application.Exit()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
TextBox7.Clear()
ListBox1.Items.Clear()
End Sub
End Class