Разработка специализированного программного модуля

Автор работы: Пользователь скрыл имя, 30 Марта 2013 в 09:53, курсовая работа

Краткое описание

Целью работы является создание приложения в Visual Basic for Application, позволяющего осуществлять следующие операции: Определить сумму квадратов элементов k-го столбца массива.
Все элементы массива. Сумма индексов которых четна, заменить числом -1.
Преобразовать матрицу путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.

Прикрепленные файлы: 1 файл

Записка .doc

— 771.50 Кб (Скачать документ)

    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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2 Описание используемых операторов и функций

Для создания программного кода необходимо знать основные свойства операторов и функций встроенных в программный язык 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. Мышенков В.И., Мышенков Е.В. Численные методы. Часть первая: Учебное пособие  для студентов. – М.:МГУЛ, 2001.

2. Громов Ю.Ю., Татаренко  С.И. Введение в методы численного  анализа: Курс лекций. – Тамбов. госуд. техн. ун-т., 2001.

3. Самарский А. А.  Введение в численные методы. – М., 1982.

4. Выгодский М.Я., “Справочник по высшей математике”, Москва — 1982 г., 323 с.

5.  Кирьянов Д. Я., «Самоучитель MathCAD 2001» , Санкт-Петербург , 2002 г. 503 с.

6. Петцольд Ч. С., «Программирование для Microsoft Windows на языке VBA», Москва, 2002 г. 2 т.







Информация о работе Разработка специализированного программного модуля