Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод VBA 2012_1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
871.94 Кб
Скачать

Блок-cхема алгоритма

Код

Dim A() As Single, MAX As Single

Dim N As Integer, K As Integer, I As Integer

--------------------------------------------

Private Sub CommandButton1_Click()

N = Val(TextBox1)

Redim A(1 To N)

For I = 1 To N

A(I) = InputBox (“введи массив A”)

Next I

MAX = A(1) : K = 1

For I = 1 To N

If A(I) > MAX Then

MAX = A(I) : K = I

End If

Next I

TextBox1 = Str(MAX)

TextBox2 = Str(K)

End Sub

На форму нанесены элементы управления: TextBox1, TextBox2, TextBox3, Label1, Label2, Label3, CommandButton1.

Свойство Caption изменено у элементов Label1, Label2, Label3.

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

  1. Вычислить сумму элементов каждой строки матрицы А

размерности N*M. Результат получить в виде вектора В.

M

Вi = ∑ Aij , i := 1, 2, …, N

J=1

2. Вычислить произведение элементов каждой строки матрицы А

размерности N*M. Результат получить в виде вектора В.

M

Вi = ∏ Aij , i := 1, 2, …, N

J=1

3. Вычислить сумму элементов каждого столбца матрицы А

размерности N*M. Результат получить в виде вектора В.

N

Вj = ∑ Aij , j = 1, 2, …, M

i=1

4. Вычислить произведение элементов каждого столбца матрицы А

размерности N*M. Результат получить в виде вектора В.

N

Вj = ∏ Aij , j = 1, 2, …, M

i=1

5. Вычислить произведение матрицы А размерности N*M на вектор В.

Результат получить в виде вектора С.

M

Ci = ∑ Aij * Bj , i = 1, 2, …, N

J=1

6. Вычислить сумму двух матриц А и В размерности N*M.

Результат получить в виде матрицы С.

Cij = Aij + Bij , i = 1,2, …, N

j = 1,2, …, M

  1. Найти максимальный элемент и его индексы в матрице А

размерности N*M.

  1. Найти минимальный элемент и его индексы в матрице А

размерности N*M.

  1. Найти среднее арифметическое элементов матрицы A размерности N*M.

10. К элементам K-й строки прибавить элементы L-й строки, умноженные

на число В, матрицы А размерности N*M.

Результат получить в виде вектора С.

Cj = Akj + B*Alj, J = 1,2, …, M

11. К элементам K-го столбца прибавить элементы L-го столбца, умноженные на число В, матрицы А размерности N*M. Результат получить в виде вектора С.

Ci = Aik + B*Ail, i = 1,2, …, N

12. Вычислить произведение двух матриц А и В размерности N*M.

Результат получить в виде матрицы С.

p

Сij = ∑ Aik*Bkj , i = 1,2, …, N

i:=1

J = 1, 2, …, M

Пример14. В каждой строке матрицы А размерности N*M вычислить сумму положительных элементов.

Результат получить в виде вектора В.

Словесное описание алгоритма

Начало

1. Задать (N, M, A(1:N, 1:M))

2. Для I := 1 до N выполнить

B(I) := 1

Для J :=1 до M выполнить

Если A(I,J) > 0 то B(I) := B(I) + A(I,J)

3. Выдать B(1:N)

Конец

Код

Dim A() As Single, B() As Single, N As Integer, M As Integer

-------------------------------------------------------------------------

Private Sub CommandButton1_ Click()

Dim I As Integer, J As Integer

N = Val(TextBox1)

M = Val(TextBox2)

Redim A(1 To N, 1 To M)

For I = 1 To N

For J = 1 To M

A(I, J) = InputBox(“A(“ + Str(I) +”,” + Str(J) + “)=”)

Next J

Next I

End Sub

------------------------------------------

Private Sub CommandButton2_ Click()

Dim I As Integer, J As Integer

Redim B(1 To N)

For I = 1 To N

B(I) = 0

For J = 1 To M

If A(I, J) > 0 Then B(I) = B(I) + A(I, J)

Next J

Next I

End Sub

------------------------------------------

Private Sub CommandButton3_ Click()

Dim I As Integer

For I = 1 To N

ListBox1.Additem B(I) ‘ вывод элементов массива B в ListBox1

Next I

End Sub

На форму нанесены элементы управления: ListBox1, TextBox1, TextBox2,

Label1, Label2, Label3, CommandButton1, CommandButton2,

CommandButton3.

Свойство Caption изменено у элементов Label1, Label2, Label3,

Commandbutton1, CommandButton2, CommandButton3.

Шестое задание. Пользовательские процедуры и функции.

Задачи заданий 1 – 5 выполнять с использованием пользовательских процедур и функций.

Пример15. Вычислить площадь треугольника со сторонами a, b, c.

Код

Dim a As Single, b As Single

Dim c As Single, y As Single

Private Function PLT(st1 As Single, st2 As Single, st3 As Single) As Single

Dim pp As Single

pp = (st1 + st2 + st3)/2

pp = pp * (pp – st1) * (pp – st2) * (pp – st3)

If pp <= 0 Then

MsgBox “Неверно заданы значения параметров”, 16, “ошибка”

Else

PLT = Sqr(pp)

End If

End Function

--------------------------------------

Private Sub CommandButton1_Click()

a = Val(TextBox1)

b = Val(TextBox2)

c = Val(TextBox3)

y = PLT(a, b, c)

TextBox4 = Str(y)

End Sub

Private Sub Commandbutton2_Click()

TextBox1 = “ “

TextBox2 = “ “

TextBox3 = “ “

TextBox4 = “ “

End Sub

На форму нанесены элементы управления: TextBox1, TextBox2, TextBox3, TextBox4, Label1, Label2, Label3, Label4, CommandButton1, CommandButton2.

Свойство Caption изменено у элементов Label1, Label2, Label3, Label4, CommandButton1, CommandButton2.

Пример16. Вычислить сумму двух векторов A и B размерности N.

Результат получить в виде вектора С.

ci = ai + bi

Код

Dim A() As Single, B() As Single, I As Integer

Dim C() As Single, N As Integer

Private Sub Vvod(A() As Single, N As Integer)

For I = 1 to N

A(I) = InputBox(“Введите исходный массив”)

Next I

End Sub

Private Sub Racshet(A() As Single, B() As Single, C() As Single, N As Integer)

For I = 1 to N

C(I) = A(I) + B(I)

Next I

End Sub

Private Sub Viwod(C() As Single, N As Integer)

For I = 1 to N

ListBox1.Additem C(I)

Next I

End Sub

Private Sub CommandButton1_Click()

N = Val(TextBox1)

ReDim A(1 To N) : ReDim B(1 To N) : ReDim C(1 To N)

Call Vvod(A(), N)

Call Vvod(B(), N)

Call RaschetA(), B(), C(), N)

Call Viwod(C(), N)

End Sub

На форму нанесены элементы управления: ListBox1, TextBox1, TextBox2, Label1, Label2, Label3, CommandButton1.

Свойство Caption изменено у элементов Label1, Label2, Label3,

CommandButton1.

Седьмое задание. Файлы.

  1. Создать файл, каждая запись которого имеет структуру: название товара, количество товара, цена за единицу. Выдать ведомость товара, количество которого меньше заданного значения А.

  1. Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, профессия, стаж в годах. Выдать ведомость сотрудников, стаж которых больше заданного значения А.

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

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

  1. Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, экзаменационные оценки. Выдать ведомость отличников.

  1. Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, экзаменационные оценки. Выдать ведомость неуспевающих студентов.

  1. Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, аттестация дисциплин. Выдать ведомость не аттестованных студентов

  1. Создать файл, каждая запись которого содержит информацию о компьютере: марка, объем винчестера, объем оперативной памяти, быстродействие. Выдать список компьютеров с заданным быстродействием.

  1. Создать файл, каждая запись которого содержит информацию об автомобиле: название модели, год выпуска, цена, цвет. Выдать список автомобилей, цена которых превышает заданную цену А.

  1. Создать файл, каждая запись которого содержит информацию о лекарствах, хранящихся на аптечном складе: название, количество, стоимость. Выдать список лекарств, стоимость которых не превышает заданную цену А.

  1. Создать файл, каждая запись которого содержит информации о лекарствах, хранящихся в аптеках города: номер аптеки, названия, срок годности. Выдать список просроченных лекарств.

  1. Создать файл, каждая запись которого содержит информацию о рейсах самолетов: номер рейса, пункт назначения, время прибытия, время отправления. Выдать информацию о рейсах самолетов, время отправления которых находится в заданном промежутке времени.

Пример17. Создать файл, каждая запись которого имеет структуру:

фамилия, имя, отчество, стаж, наличие детей.

Выдать ведомость сотрудников, имеющих двух детей.

Код

Private Type B

Fam As String *30

Name As String *15

Ots As Striing *15

Stag As Integer

Deti As Integer

End Type

Dim I As Integer

Dim N As String *3

Dim A As B

Dim Fih As Integer

Dim Fim As String *40

---------------------------------------

Private Sub CommandButton1_Click()

Fih = FreeFile()

Fim = InputBox(“Введите физическое имя файла”)

Open Fim for Random Access Write As #Fih Len = Len(A)

I = 0

Do

N = InputBox(“введи N”)

If N = “***” Then Exit Do

I = I + 1

A.Fam = InputBox(“введи фамилию”)

A.Name = InputBox(“введи имя”)

A.Ots = InputBox(“введи отчество”)

A.Stag = IuputBox(“введи стаж”)

A.Deti = InputBox(“введи количество детей”)

Put #Fih, I, A

Loop

Close #Fih

End Sub

--------------------------------------

Private Sub CommandButton2_Click()

Fih = FreeFile()

Fim = InputBox(“Введи физическое имя файла”)

Open Fim for Random Access Read As #Fih Len = Len(A)

I = 0

Do While Not Eof(Fih)

I = I + 1

Get #Fih, I, A

If A.Deti = 2 Then

ListBox1.Additem A.Fam ‘ вывод фамилии в окно ListBox1

Listbox2.Additem A.Name ‘ вывод имени в окно ListBox2

ListBox3.Additem A.Ots ‘ вывод отчества в окно ListBox3

End If

Loop

Close #Fih

End Sub

На форму нанесены элементы управления: ListBox1, ListtBox2, ListtBox3, Label1, Label2, Label3, CommandButton1, CommandButton2.

Свойство Caption изменено у элементов Label1, Label2, Label3, CommandButton1, CommandButton2.

РАЗНЫЕ ЗАДАЧИ

Пример18. Вычислить сумму и количество цифр целого числа.

Код

Private Sub CommandButton1_Click()

Dim S As Integer, D As Integer, K As Integer

Dim I As Integer, N As Integer, C As String*1

N = Len(TextBox1)

S = 0 : K = 0

For I = 1 To N

C = Mid(TextBox1, I, 1)

D = Val(C)

S = S + D

K = K +1

Next I

TextBox2 = Str(S)

TextBox3 = Str(K)

End Sub

На форму нанесены элементы управления: TextBox1, TextBox2, TextBox3,

Label1, Label2, Label3, CommandButton1.

Свойство Caption изменено у элементов: Label1, Label2, Label3,

CommandButton1.

Пример19. Каким прилагательным можно охарактеризовать тот или иной

возраст человека.

Субъективное представление отражает следующая таблица

менее

15 лет

15 – 30

лет

31 – 45

лет

46 – 60

лет

больше

60 лет

детский

молодой

средний

пожилой

преклонный

Код

Private Sub CommandButton1_Click()

Dim let As Integer, vozrast As String

let = Val(TextBox1)

Select Case let

Case Is < 15 : vozrast = “детский”

Case 15 To 30 : vozrast = “молодой”

Case 31 To 45 : vozrast = “средний”

Case 46 To 60 : vozrast = “пожилой”

Case Is > 60 : vozrast = “преклонный”

End Select

TextBox2 = vozrast

End Sub

На форму нанесены элементы управления: Label1, Label2, TextBox1,

TextBox2, CommandButton1.

Свойство Caption изменено у элементов Label1, Label2,

CommandButton1.

Пример20 Найти сумму ряда с заданной точностью Е, общий член которого .

Для нахождения рекуррентной формулы вычислим отношение следующего члена ряда к предыдущему:

. Отсюда . Найдем первый член ряда .

Блок схема алгоритма

Код

Private Sub CommandButton1_Click()

Dim Е As Single, Dim n As Integer Dim S As Single

Dim An As Single

E= Val(TextBox1)

S=0

n=1

An=1/3

Do While An>E

S=S+An

n=n+1

An=An*(n+1)/2/(2*n+1)

Loop

TextBox2 = Str(S)

End Sub

На форму нанесены элементы управления: Label1, Label2, TextBox1,

TextBox2, CommandButton1.

Свойство Caption изменено у элементов Label1, Label2, CommandButton1.

Пример21 Дан массив. Упорядочить его элементы по убыванию. Применим сортировку массива методом пузырька.

Сортировка методом пузырька - самый простой алгоритм сортировки.

Сортировка методом пузырька (по убыванию) работает следующим образом: в итерации цикла берётся самый первый элемент и сравнивается со следующим. Если первый элемент меньше, то элементы меняются местами. Затем происходит сравнение второго с третьим и т.д. После первой итерации цикла в конце оказывается наименьший элемент. После второй итерации на предпоследней позиции оказывается второй по величине элемент. Всего в цикле необходимо произвести на одну итерацию меньше количества элементов в массиве.