Автор работы: Пользователь скрыл имя, 30 Марта 2013 в 09:53, курсовая работа
Целью работы является создание приложения в Visual Basic for Application, позволяющего осуществлять следующие операции: Определить сумму квадратов элементов k-го столбца массива.
Все элементы массива. Сумма индексов которых четна, заменить числом -1.
Преобразовать матрицу путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.
TextBox2.SetFocus
Exit Sub
End If
'задание размера массива
n = TextBox1.Text
m = TextBox2.Text
ReDim a(1 To n, 1 To m) As Integer
If OptionButton1.Value = True Then
'заполнение массива данными с листа
For i = 1 To n
For j = 1 To m
If Worksheets(1).Cells(i, j) > 10 Or Worksheets(1).Cells(i, j) < -10 Then MsgBox "Проверьте введенные на листе данные. Значения должны находиться в пределах [-10;10]": Exit Sub
a(i, j) = Worksheets(1).Cells(i, j)
Next j
Next i
ElseIf OptionButton2.Value = True Then
'заполнение массива случайными числами
Randomize 1
For i = 1 To n
For j = 1 To m
tmp = Format(Rnd(), "0.00")
tmp = (tmp * 20 - 10)
a(i, j) = Format(tmp, "0")
Next j
Next i
End If
'задание формата массивов
ListBox1.ColumnCount = m
s = "20"
For i = 1 To m - 1
s = s & ";20"
Next i
ListBox1.ColumnWidths = s
ListBox1.List = a
ListBox2.ColumnCount = m
ListBox2.ColumnWidths = s
ListBox3.ColumnCount = m
ListBox3.ColumnWidths = s
'некоторые объекты становятся не активными
TextBox1.Enabled = False
TextBox2.Enabled = False
CommandButton1.Enabled = False
OptionButton1.Enabled = False
OptionButton2.Enabled = False
'смена ControlTipText некоторых объектов
Label1.ControlTipText = "Чтобы изменить размер массива воспользуйтесь кнопкой Очистить"
Label2.ControlTipText = "Чтобы изменить размер массива воспользуйтесь кнопкой Очистить"
Frame1.ControlTipText = "Чтобы изменить метод заполнения исходного массива воспользуйтесь кнопкой Очистить"
CommandButton1.ControlTipText = "Чтобы изменить
исходный массив
End Sub
Private Sub CommandButton2_Click()
'проверка введенных данных
If Not CommandButton1.Enabled = False Then
MsgBox "Сначала заполните исходный массив!", vbExclamation, "Внимание!"
Exit Sub
End If
If Not IsNumeric(TextBox3.Text) Then
MsgBox "Номер столбца k должен быть целым натуральным числом от 1 до " & m, vbExclamation, "Внимание! Ошибка ввода!"
TextBox3.Text = ""
TextBox3.SetFocus
Exit Sub
End If
If CDbl(TextBox3.Text) < 1 Or CDbl(TextBox3.Text) > m Then
MsgBox "Номер столбца k должен быть целым натуральным числом от 1 до " & m, vbExclamation, "Внимание! Ошибка ввода!"
TextBox3.Text = ""
TextBox3.SetFocus
Exit Sub
End If
If Not Int(TextBox3.Text) = TextBox3.Text Then
MsgBox "Номер столбца k должен быть целым натуральным числом от 1 до " & m, vbExclamation, "Внимание! Ошибка ввода!"
TextBox3.Text = ""
TextBox3.SetFocus
Exit Sub
End If
k = TextBox3.Text
TextBox3.Enabled = False
'определить сумму квадратов элементов k-го столбца массива
ks = 0
For i = 1 To n
ks = ks + (a(i, k)) ^ 2
Next i
'все элементы массива, сумма индексов которых четна, заменить числом -1
ReDim b2(1 To n, 1 To m) As Integer
For i = 1 To n
For j = 1 To m
If (i + j) Mod 2 = 0 Then
b2(i, j) = -1
Else
b2(i, j) = a(i, j)
End If
Next j
Next i
'преобразовать матрицу путем удаления из исходной матрицы строки и столбца,
'на пересечении которых
расположен элемент с
'вычисление максимального по модулю элемента массива
abs_max = Abs(a(1, 1)): iabs_max = 1: jabs_max = 1
For i = 1 To n
For j = 1 To m
If Abs(a(i, j)) > abs_max Then abs_max = Abs(a(i, j)): iabs_max = i: jabs_max = j
Next j
Next i
'преобразование
P = 0
ReDim tmpm(1 To n * m - (n + m) + 1)
For i = 1 To n - 1
If i = iabs_max Then i = i + 1
For j = 1 To m - 1
If j = jabs_max Then j = j + 1
P = P + 1
tmpm(P) = a(i, j)
Next j
Next i
ReDim b3(1 To n - 1, 1 To m - 1) As Integer
P = 0
For i = 1 To n - 1
For j = 1 To m - 1
P = P + 1
b3(i, j) = tmpm(P)
Next j
Next i
g = "Сумма квадратов элементов k-го столбца равна " & ks
'вывод пребразованного массива и информации
'на форму
If OptionButton3.Value = True Then
ListBox2.List = b2
ListBox3.List = b3
Label5.Caption = g
'на лист
ElseIf OptionButton4.Value = True Then
For i = 1 To n
For j = 1 To m
Worksheets(1).Cells(i, j + 1 + m) = b2(i, j)
Next j
Next i
For i = 1 To n - 1
For j = 1 To m - 1
Worksheets(1).Cells(i, j + 2 + 2 * m) = b3(i, j)
Next j
Next i
For i = 1 To n
For j = 1 To m
Worksheets(1).Cells(i, j) = a(i, j)
Next j
Next i
Worksheets(1).Cells(n + 2, 1) = g
'окно, которое спрашивает, перейти на лист или же остаться
ans = MsgBox("Перейти на лист EXCEL для проверки результата?", vbYesNo + vbQuestion, "???")
If ans = vbYes Then
Application.Visible = True
UserForm1.Hide
End If
'на форму и на лист
ElseIf OptionButton5.Value = True Then
ListBox2.List = b2
Label5.Caption = g
For i = 1 To n
For j = 1 To m
Worksheets(1).Cells(i, j + 1 + m) = b2(i, j)
Next j
Next i
For i = 1 To n - 1
For j = 1 To m - 1
Worksheets(1).Cells(i, j + 1 + m + 1 + m) = b3(i, j)
Next j
Next i
For i = 1 To n
For j = 1 To m
Worksheets(1).Cells(i, j) = a(i, j)
Next j
Next i
Worksheets(1).Cells(n + 2, 1) = g
End If
End Sub
Private Sub CommandButton3_Click()
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
OptionButton1.Enabled = True
OptionButton2.Enabled = True
CommandButton1.Enabled = True
ListBox1.Clear
ListBox2.Clear
ListBox3.Clear
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
Label5.Caption = ""
ActiveSheet.Cells.Clear
TextBox1.SetFocus
Label1.ControlTipText = ""
Label2.ControlTipText = ""
Frame1.ControlTipText = "Выберите спосб заполнения матрицы"
CommandButton1.ControlTipText = "Заполнение матрицы"
End Sub
Private Sub CommandButton4_Click()
Application.Visible = True
UserForm1.Hide
End Sub
Private Sub CommandButton5_Click()
MsgBox "Дана целочисленная прямоугольная матрица. Произвести следующие действия:" & Chr(13) & "-определить сумму квадратов элементов k-го столбца массива;" & Chr(13) & "-все элементы массива, сумма индексов которых четна, заменить числом -1" & Chr(13) & "-преобразовать матрицу путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.", vbQuestion, "Условие преобразования"
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Quit
End Sub
Для создания программного кода необходимо знать основные свойства операторов и функций встроенных в программный язык VBA, чтобы не пришлось задействовать лишнее пространство в памяти под процесс.
- If Условие Then [Инструкции] [ElseIf Инструкции_else]- оператор условного перехода. Если Условие принимает значение True, то выполняется инструкция ( или инструкции) после Then, если False, то выполняется инструкция (или инструкции) после Else. Ветвь Else является необязательной.
-Dim - объявление переменных;
-MsgBox - функция, которая выводит на экран диалоговое окно, содержащее сообщение.
Exit Sub – немедленный выход из процедуры.
-Функция CDbl преобразовывает данные в числовой формат типа Double.
-IsNumeric(x) –проверяет, является ли переменная числовым значением.
Оператор цикла For позволяет повторять группу операторов заданное число раз.
For <счётчик_цикла> =<начало> To <конец> [Step <шаг>]
<тело цикла>
[Exit For]
Next [<счётчик_цикла>],
где <счётчик_цикла> — числовая переменная;
<начало> - начальное значение (выражение) переменной <счётчик_цикла>;
<конец> - заключительное значение (выражение) переменной <счётчик_цикла>;
<тело цикла> - это последовательность операторов, которая будет выполнена заданное число раз.
- «+» сложение
- «–» вычитание
- «>» больше
-«<» меньше
-«<>» не равно
4 Тестирование программного модуля
Тестирование программного модуля заключается в проверке правильности ввода данных, которые ввел пользователь и проверка результатов выполнения программы. Результатом ввода корректных данных является правильное выполнение программы.
На рисунке 8 отображена исходная форма подготовленная для заполнения случайными числами с количеством столбцов (N) и строк (M).
Рисунок 8 - Форма с исходными данными
Вид пользовательской формы после нажатия кнопки «Заполнить исходный массив» представлен на рисунке 9.
Рисунок 9 - Пользовательская форма после нажатия кнопки заполнить.
Пользовательская форма с результатами вычислений представлена на рисунке 10
Рисунок 10 - Пользовательская форма с результатами вычислений
Так же на этом этапе был введен номер столбца k.
В данной курсовой работе был разработан модуль, с помощью которого можно выполнять расчет поставленных условием задач. Полученные результаты полностью удовлетворяют требованиям, которые были поставлены в задании.
Курсовая работа выполнена в полном объеме в соответствии с заданием.
1. Мышенков В.И.,
Мышенков Е.В. Численные
2. Громов Ю.Ю., Татаренко
С.И. Введение в методы
3. Самарский А. А. Введение в численные методы. – М., 1982.
4. Выгодский М.Я., “Справочник по высшей математике”, Москва — 1982 г., 323 с.
5. Кирьянов Д. Я., «Самоучитель MathCAD 2001» , Санкт-Петербург , 2002 г. 503 с.
6. Петцольд Ч. С., «Программирование для Microsoft Windows на языке VBA», Москва, 2002 г. 2 т.
Информация о работе Разработка специализированного программного модуля