«Программирование в среде Visual Basic»

Вид материалаЛабораторная работа
Задание к лабораторной работе
Do... - для нечетных вариантов; оператора For...
Лабораторная работа № 4
Dim имя (индекс1[,индекс2]) [As тип], …
ReDim имя (индекс1[,индекс2])
Option Base
For Each элемент In группа
ReDim x(n) ‘Переопределение размерности массива X
Debug.Print "X("; i; ")= "; x(i)
Enabled = False, Style
Имя файла
Общие свойства элементов
Процедура кнопки Ввести массив…
Вывод массива на форму
Dim n As Integer, i As Integer
Private Sub CmdTest_Click()
Вывод массива на форму
Подобный материал:
1   2   3   4   5   6   7   8

Задание к лабораторной работе


Модифицировать программу лабораторной работы №2 таким образом, чтобы вычислялось многократно значение функции при изменении аргумента в указанном диапазоне и с заданным шагом (см. таблицу вариантов).

Реализовать циклическую структуру с помощью:
  • оператора Do... - для нечетных вариантов;
  • оператора For... - для четные вариантов.

(в программе предусмотреть выод результатов вычислений в виде таблицы: аргумент и соответствующее значение функции).

Лабораторная работа № 4


Тема "Одномерный массив"

Цель: приобретение навыков создания программ обработки одномерных массивов.

Теоретические сведения


Массив – это последовательный, упорядоченный набор однотипных элементов с общим именем. Каждый элемент массива имеет индекс – уникальный номер, который заключается в скобки. Массивы в зависимости от количества индексов, могут быть одномерные и многомерные. Как и другие переменные, массивы обязательно объявляются в начале программы с помощью оператора Dim, с указыванием размерности массива. Массивы могут быть динамические и статические, с фиксированной размерностью – статические,- динамические – размерность которых определяется во время выполнения программы.

Описание массивов

Dim имя (индекс1[,индекс2]) [As тип], …

где имя - имя массива, удовлетворяющее стандартным правилам именования переменных;

индекс1, индекс2 - размерности переменной массива; допускается описание до 60 размерностей; индексы записывается следующим образом:

[нижний1 To] верхний1 [,[нижний2 To] верхний2] ,

если нижний индекс не задан явно, нижняя граница массива определяется оператором Option Base, если отсутствует Option Base, нижняя граница массива равняется нулю;

тип - тип данных массива (Integer, Long, Single, Double, String и т.д.).

Для описания динамических массивов инструкцию Dim записывают с пустыми скобками. После ввода или расчета размерности массива, массив переопределяется оператором ReDim

ReDim имя (индекс1[,индекс2])

Оператор Option Base применяется для задания нижней границы индексов массива

Option Base {0 | 1} По умолчанию используется значение 0.

Оператор Option Base располагается в модуле перед процедурой и должна предшествовать описаниям массивов, включающих размерности.

Оператор цикла For Each...Next повторяет выполнение блока операторов для каждого элемента массива или семейства.

For Each элемент In группа

Блок операторов

[Exit For]

Next [элемент]

где элемент - переменная, используемая для выполнения итераций по элементам семейства или массива, для массива она может быть только переменной типа Variant;

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

блок операторов - один или несколько операторов, которые выполняются над каждым элементом группы.

При работе с массивами данных возникает необходимость использования вложенных циклов (один цикл For...Next или Do…Loop или For...Each...Next располагается внутри другого):

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

Однако, в случае For...Next счетчик каждого цикла должен иметь уникальное имя, For...Each...Next - каждый элемент цикла должен быть уникальным.

Пример:

Задан одномерный числовой массив Х(n), определить произведение всех чисел массива, минимальное значение, первый отрицательный, его значение и индекс, отсортировать массив по возрастанию.Предусмотреть ввод и вывод элементов массива и результатов расчета.


Option Base 1 ‘задание нижней границі массива =1

Sub lab5()

Объвление типов переменных

Dim n AsInteger, st AsIinteger, i As Integer, Min As Single, P As Single, S As Single

Dim mas As String

Dim x() As Single ‘объявление динамического массива Х

newline = Chr(13)

n = Val(InputBox("Введите к-во элементов в массиве", "Задание размерности массива"))

ReDim x(n) ‘Переопределение размерности массива X

'Ввод элементов массива _______________________________________________________

For i = 1 To n

из диалогового окна

' генератор случайных чисел

x(i) = Val(InputBox("Ввод " & i & "-го _ элемента", "Ввод элементов массива"))

x(i) = Int(n * Rnd - n / 2)


' вывод элементов массива в окно Отладки

Debug.Print "X("; i; ")= "; x(i)

Next i

'Расчет произведения_________________________________________________________

P = 1 ‘начальное значение произведения P=1, суммы=0

For i = 1 To n

P = P * x(i)

Next i

Вывод результата в окно Отладки

Debug.Print “Произведение” + P

' Использование оператора For Each… Next

для расчета суммы

обязательно оператор Option Base 1,

For Each element In x

s = s + element

Next

'Поиск минимального элемента _________________________________________________

Min = x(1) ‘Присвоить первоначальное значение = 1-ому элементу

For i = 1 To n

If Min > x(i) Then Min = x(i)

Next i

Поиск первого отрицательного элемента______________________________

For i = 1 To n

If x(i)<0 Then

xotr = x(i ) ‘ значение 1-го отрицательного

iotr = I ‘индекс 1-го отрицательного

Exit For ‘досрочный выход из цикла

End If

Next I

Вывод в окно Отладки 1-го отрицательного и его индекса

Debug.Print “1-ое отрицательное”, xotr, “индекс 1-го отрицательного”, iotr


'Вывод элементов массива, минимума и произведения в диалоговое окно ____________

mas = "Введенные числа:"

For i = 1 To n

mas =mas & " " & Str(x(i))

Next i

MsgBox mas, vbOKOnly + vbExclamation, "Элементы массива"

MsgBox "min=" + Str(Min) & newline & "Произведение=" & P, vbInformation, _ "Результаты"

Сортировка массива по возрастанию _________________________

For i = 1 To n - 1

flag = 0 ‘флаг, отмечающий, были ли перестановки

For j = 1 To n – 1

Если следующий элемент меньше текущего, тогда меняем местами

If x(j + 1) < x(j) Then

pr = x(j): x(j) = x(j + 1): x(j + 1) = pr ‘перестановка элементов

flag = 1 ‘была перестановка

End If

Next j

если перестановок больше нет, то - досрочный выход из цикла

If flag = 0 Then Exit For

Next i

Debug.Print ‘Вывод пустой строки или переход на другую строку

вывод отсортированного массива в окно Отладки

For i = 1 To n

Debug.Print x(i); ‘ в строку

Next

End Sub


Пример для формы:

Задан одномерный числовой массив Х(n), найти сумму и произведение всех чисел массива, а также минимальное и максимальное значения. Создать форму для этой задачи.

В программе предусмотреть возможность ввода размерности массива, а также ввод элементов массива с помощью окон сообщений или генератора случайных чисел. Вывод массива и результатов вычислений предусмотреть либо в окно сообщений либо в окно Просмотра.

Таблица новых свойств элементов создаваемой формы

Элемент

Свойство

Описание

Значение

CommandButton1

Enabled

Доступность элемента к действиям

False




Picture

Рисунок на кнопке (если Style=1)

Имя файла




DisablePicture

Рисунок на кнопке, когда она недоступна (если Enabled = False, Style=1)

Имя файла




DownPicture

Рисунок на кнопке, если она нажата (если Style=1)

Имя файла




Style

Стиль кнопки

1 - графический

Label1

BorderStyle

Установление стиля рамки надписи

1




Alignment

Выравнивание текста в границах элемента

Center




WordWrap

Перенос слов (если AutoSize=True )

True

Общие свойства элементов

BackColor

ForeColor

Цвет фона

Цвет выводимой информации








Рис. Форма до и после нажатия на кнопки Ввести массив…


Процедура кнопки Ввести массив…

Ввод элементов массива можно осуществить «вручную» или же с помощью генератора случайных чисел (переключатели «с клавиатуры» и «генератором»).

Нажатия на кнопку Ввести массив… приводит к следующим действиям:

- в диалоговом окне вводится число, определяющее размерность массива, а если выбран «с клавиатуры», то вводятся также последовательно элементы массива,

- кнопки Вывод массива на форму и Вычислить, которые не действовали до этого (надписи на них – серым цветом) - активизируются,

- на кнопке Ввести массив… меняется надпись на Массив введен!.

Dim n As Integer, i As Integer

Dim x() As Single

Private Sub CmdVvod_Click()

'Изменение свойств

'кнопкам Проверка ввода и Вычислить

CmdTest.Enabled = True

CmdWork.Enabled = True

n = Val(InputBox("Введите число", "Задание размерности массива"))

ReDim x(n)

If OpbHand.Value = True Then

For i = 1 To n

x(i) = Val(InputBox("Ввод " & i & "-го элемента", "Ввод массива"))

Next i

Else

For i = 1 To n

x(i) = Int(n * Rnd - n / 2)

Next i

End If

CmdVvod.Caption = "Массив введен!"

После ввода массива меняется надпись на кнопке Ввести массив…

End Sub


Процедура кнопки Вывод массива на форму:

Ввыводит элементы введенного массива в Поле ввода.

Private Sub CmdTest_Click()

Dim newline As String, elements As String

newline = Chr(13) + Chr(10)

TxtX.Text = "Элементы массива:" + newline

For i = 1 To n

TxtX.Text = TxtX.Text + Format(x(i), "0.0 ")

Next i

End Sub


Процедура кнопки Вычислить… :

Private Sub CmdWork_Click()

Dim Sum As Single, Product As Single

If ChbSum.Value = 1 Then

Sum = 0

For i = 1 To n

Sum = Sum + x(i)

Next i

LblSum.Caption = Sum

Else

LblSum.Caption = ""

End If

If ChbProduct.Value = 1 Then

Product = 1

For i = 1 To n

Product = Product * x(i)

Next i

LblProduct.Caption = Product

Else

LblProduct.Caption = ""

End If

End Sub

Процедура кнопка Сброс:

производит очистку Поля ввода и Надписей, а также отключение кнопок Вывод массива на форму и Вычислить, возвращает надпись кнопке Ввести массив….:

Private Sub CmdReset_Click()

CmdTest.Enabled = False

CmdWork.Enabled = False

CmdVvod.Caption = "Ввести массив..."

CmdVvod.SetFocus

TxtX.Text = ""

LblSum.Caption = ""

LblProduct.Caption = ""

Sum = 0

Product = 0

For i = 1 To n

x(i) = 0

Next i

End Sub

Процедура кнопки Выход при нажатии кнопки появляется на кнопке рисунок.


Лабораторная работа № 5

Тема "Обработка двумерных массивов"

Цель: приобретение навыков создания программ обработки многомерных массивов и использование процедур.