ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Московский технический университет
СВЯЗИ И ИНФОРМАТИКИ
Кафедра информатики
Лабораторная работа
по теме: «4.5.Программирование алгоритмов регулярных циклических структур и циклических структур цикл в цикле»
Реализация 1-го задания
Задание
Построить проект для формирования таблицы значений функции f(x) = x*exp(-x) при изменении x на отрезке [a,b] с шагом h (a=0.1, b=1.5, h=0.1). Найдите наибольшее значение функции на этом же отрезке.
Формализация и уточнение задания
Для решения задачи табуляции функции на заданном интервале следует использовать алгоритмическую структуру регулярного типа, так как заданы начальное и конечное значения аргумента, а также шаг его изменения. Таким образом, в данном случае можно заранее определить количество вычисленных значений.
Графический интерфейс
Таблица элементов.
Имя объекта
|
Свойство |
Значение свойства |
Form1 |
Text |
Form1 |
Label1 |
Name |
Label1
|
Text |
Тема 4.5. Программирование алгоритмов регулярных циклических структур и цикл в цикле | |
ForeColor |
Blue | |
Font |
Microsoft Sans Serif, полужирный, 15 пунктов | |
Label3 |
Name |
Label3
|
Text |
A= | |
ForeColor |
Черный | |
Font |
Microsoft Sans Serif, полужирный, 10 пунктов | |
Label4 |
Name |
Label4
|
Text |
B= | |
ForeColor |
Черный | |
Font |
Microsoft Sans Serif, полужирный, 10 пунктов | |
Label5 |
Name |
Label5
|
Text |
H= | |
ForeColor |
Черный | |
Font |
Microsoft Sans Serif, полужирный, 10 пунктов
| |
Label6 |
Name |
Label6
|
Text |
Максимальное значение y = | |
ForeColor |
64; 0; 0 | |
Font |
Microsoft Sans Serif, полужирный, 11 пунктов | |
TextBox1 |
Name |
TextBox1 |
TextBox2 |
Name |
TextBox2 |
TextBox3 |
Name |
TextBox3 |
TextBox4 |
Name |
TextBox4 |
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, h As Double
Dim n As Integer
a = CDbl(vvod(TextBox1))
b = CDbl(vvod(TextBox2))
h = CDbl(vvod(TextBox3))
n = zikl(a, b, h)
list(a, b, n, h)
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) As Double
Return x * Exp(-x)
End Function
Sub list(ByVal a As Double, ByVal b As Double, ByVal n As Integer, ByVal h As Double)
Dim max, x, y As Double
Dim str1, str2, str3 As String
Dim str, divider As String
Dim i As Integer
str = " "
str1 = " N |"
str2 = " X |"
str3 = " Y |"
divider = "____________________________"
max = System.Double.MinValue
For i = 1 To n
y = func(x)
If y > max Then max = y
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)
divider = divider + "____________"
x = x + h
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(str)
vivod(max, TextBox4)
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()
ListBox1.Items.Clear()
End Sub
End Class