Программирование на Visual Basic

ГОУВПО

Уфимский государственный авиационный технический университет

Кафедра Информатики



















ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к контрольной работе по информатике

Программирование на Visual Basic



























Уфа 2009 г.


Задание № 1. Сумма ряда



Условие задачи:

Для числового ряда  найти

	а) сумму членов числового ряда при М=10;

б) точное значение суммы членов числового ряда, вычисленное по формуле Sum2=15е;

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



Решение:

Составим блок-схему алгоритма решения задачи (представлена на рисунке слева).

Итак, для решения задачи используем переменные: 

М (количество членов вычисляемого числового ряда); 

f (вспомогательная переменная, вычисляющая для цикла факториал);

Sum1 (сумма членов числового ряда); 

Sum2 (точное значение суммы);

Err1 (абсолютная погрешность);

Err2 (относительная погрешность); 

и определимся с типом данных, который они могут содержать. Значения переменных M и k будут короткими целыми (Integer), значение f – длинным целым (Long), а значения переменных Sum1, Sum2, Err1,Err2 – вещественные удвоенной точности [1].

Для ввода значений переменной M, а также вывода результатов используются текстовые поля (объект TextBox). Чтобы сделать поля для вывода неизменяемыми, при определении характеристик поля в строке Enable укажем False [2].

Составим текст программы (приведен с комментариями).





Начало

Err2 = Err1 / Sum2 * 100

Sum1=0, f=1

Err1 = Sum2 - Sum1

Sum1=Sum1+(k+1)^3/f

Sum2=15*Exp(1)

f = f * k

k=1, M

Sum1, Sum2, Err1,Err2

Конец



Public Class Form1

Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click

 ' описание переменных:

Dim M As Integer ' количество членов числового ряда

Dim Sum1 As Double, Sum2 As Double ' сумма и точная сумма ряда

Dim Err1 As Double, Err2 As Double ' абсолютная и относительная погрешности

Dim k As Integer, f As Long ' вспомогат.переменные

' для организации цикла и подсчета факториала

' количество членов числового ряда вводятся в форме

M = Val(TextM.Text)

' вычисления

f = 1

Sum1 = 0

For k = 1 To M

f = f * k

Sum1 = Sum1 + (k + 1) ^ 3 / f

Next k

Sum2 = 15 * 2.718281828495

Err1 = Sum2 - Sum1

Err2 = Err1 / Sum2 * 100

' вывод результатов вычислений в поля формы

TextSum1.Text = Format(Sum1, "0.00000")

TextSum2.Text = Format(Sum2, "0.00000")

TextErr1.Text = Format(Err1, "0.00000000")

TextErr2.Text = Format(Err2, "0.00000000")

End Sub

Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click

End

End Sub

End Class

На рис.1 представлен вариант реализации формы приложения:



Рисунок 1 – Вычисление суммы ряда



Задание № 2. Работа с массивами



Условие задачи:

Дан двумерный массив (матрица) размером NxN.

1. Определить сумму элементов, значения которых кратны заданному числу F.

2. Найти местоположения (номера индексов) минимальных элементов массива.

Решение:

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




Начало

N, Amin, Amax

(i, j) = Amin + Int(Rnd() * (Amax - Amin))

Str1 = Str1 + Space(3) + Str(Arr(i, j))

Str1=” ”

i=0, N-1

i=0, N-1

Str1

1




1





F





F=0





Fsum=0





N>0





Amin=Arr (0, 0)





i=0, N-1





j=0, N-1







Arr(i,j)/F=Int(Arr(i,j)/F)









Fsum=Fsum+Arr(i,j)





Amin>Arr(i,j)







Amin = Arr(i,j)





Fsum, Amin





i=0, N-1







j=0, N-1





Amin>Arr(i,j)







Str(i+1);Str(j+1)







Конец



Программа будет содержать несколько «циклов в цикле» в виду того, что организует работы с массивами.



Текст программы



Public Class Form1

описание переменных уровня модуля: массив

Dim Arr(100, 100) As Integer

Dim N As Integer ' количество элементов массива

Private Sub ButtonGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGenerate.Click

описание переменных:

Dim Amin As Integer, Amax As Integer ' границы значений элементов массива

Dim i As Integer, j As Integer ' вспомогат.переменные

для организации цикла

' количество элементов массива и границы значений вводятся в форме

N = Val(TextN.Text)

Amin = Val(TextMin.Text)

Amax = Val(TextMax.Text)

' создание массива с помощью генератора случайных чисел

Dim Str1 As String

ListArray.Items.Clear() ' количество столбцов в поле вывода массива

For i = 0 To N - 1

Str1 = ""

For j = 0 To N - 1

Arr(i, j) = Amin + Int(Rnd() * (Amax - Amin))

Str1 = Str1 + Space(3) + Str(Arr(i, j))

Next j

ListArray.Items.Add(Str1)

Next i

End Sub

Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click

' описание переменных:

Dim F As Integer ' число (вводимое) для поиска кратных элементов массива

Dim Fsum As Long ' сумма (искомая) кратных элементов массива

Dim Amin As Integer ' значение минимального элемента

Dim i As Integer, j As Integer ' вспомогат.переменные

' для организации цикла

' число для поиска кратных элементов вводится в форме

F = Val(TextF.Text)

If F = 0 Then Exit Sub

' вычисления

Fsum = 0

If N > 0 Then Amin = Arr(0, 0)

 For i = 0 To N - 1

For j = 0 To N - 1

If Arr(i, j) / F = Int(Arr(i, j) / F) Then Fsum = Fsum + Arr(i, j)

If Amin > Arr(i, j) Then Amin = Arr(i, j)

Next j

Next i

' вывод результатов вычислений в поля формы

LabelSum.Text = Fsum

LabelMin.Text = Amin

' очистка полей для повторных нажатий кнопки "Вычислить"

ListMin.Items.Clear()

For i = 0 To N - 1

For j = 0 To N - 1

If Arr(i, j) = Amin Then

ListMin.Items.Add("элемент (" + Str(i + 1) + ";" + Str(j + 1) + ")")

End If

Next j

Next i

End Sub

Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click

End

End Sub

End Class



На рис.2 представлен вариант реализации формы приложения.

Для вывода суммы элементов, кратных заданному числу и минимальных элементов используются поля Label [2].




Рисунок 2 – Работа с массивами



Задание № 3. Работа со строковыми данными



Условие задачи:

Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов.

Решение:

Чтобы определить количество слов в строке, составим цикл, который будет проверять каждый символ в строке, начиная со второго, на совпадение с пробелом. Чтобы исключить возможность ошибки (на случай, если в одном интервале между словами окажется больше одного пробела), поставим дополнительное условие: символ, следующий до проверяемого, не должен являться пробелом. Т.е, программа будет считать пробелы, которые следуют за каким-либо другим символом. А так как интервалов между словами на 1 меньше, чем самих слов, добавим к полученной сумме пробелов единицу (но только при условии, что длина строки не равна нулю, т.е. ни одного слова не введено).



Начало

Str1

i=2, ДлинаStr1

S=0

Str1 (i,1)=" " и Str1 (i-1,1)<>" "

S=S+1

Длина Str1>0

S=S+1

S

Конец



Текст программы



Public Class Form1

Private Sub ButtonOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOk.Click

' описание переменных:

Dim Str1 As String ' вводимая строка

Dim S As Integer ' количество слов в строке

Dim i As Integer ' вспомогат.переменные для организации цикла

Str1 = TextStr1.Text

S = 0

' поиск пробелов в строке:

' каждый пробел после некоторого символа добавляет слово

' (начальные пробелы и несколько пробелов подряд игнорируются)

For i = 2 To Len(Str1)

If Mid(Str1, i, 1) = " " And Mid(Str1, i - 1, 1) <> " " Then

S = S + 1

End If

Next i

If Len(Trim(Str1)) > 0 Then S = S + 1

' вывод результатов

TextS.Text = S

End Sub



 Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click

 End

 End Sub

End Class



На рис.2 представлен вариант реализации формы приложения





Рисунок 3 – Работа со строковыми данными




Список использованной литературы



	VisualBasic-Крепкий орешек!: Вводный курс в VisualBasic. – Режим доступа: http://vb.hut.ru

		Иванюк, А. VisualBasic: Магия простоты

		Культин, Н.Б VisualBasic. Освой на примерах/Н.Б. Культин. – СПб, 2004. -288с., ил





13