
- •© Королева е.М., Котельницкая л.И.
- •Типовые структуры алгоритмов и их реализация
- •Visual Basic содержит несколько отдельных окон, любое из них можно сделать “плавающим” путем перетаскивания строки заголовка по экрану Размеры можно изменить, перетаскивания их границы и углы.
- •Элементы управления
- •Image (изображение)
- •InputBox(строка_сообщение [, Заголовок_ окна] [, НачЗначение]),
- •Задания для самостоятельной работы
- •Блок-cхема алгоритма
- •Блок-схема алгоритма
- •Варианты контрольных работ для студентов заочной формы обучения
- •Второе задание
- •Третье задание
Блок-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
Н
Свойство Caption изменено у элементов Label1, Label2, Label3.
Пятое задание. Двумерные массивы (матрицы).
Вычислить сумму элементов каждой строки матрицы А
размерности 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
Найти максимальный элемент и его индексы в матрице А
размерности N*M.
Найти минимальный элемент и его индексы в матрице А
размерности N*M.
Найти среднее арифметическое элементов матрицы 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
Н
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
Н
Свойство 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
Свойство Caption изменено у элементов Label1, Label2, Label3,
CommandButton1.
Седьмое задание. Файлы.
Создать файл, каждая запись которого имеет структуру: название товара, количество товара, цена за единицу. Выдать ведомость товара, количество которого меньше заданного значения А.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, профессия, стаж в годах. Выдать ведомость сотрудников, стаж которых больше заданного значения А.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, наличие детей, зарплата. Выдать ведомость сотрудников, не имеющих детей.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер курса, проживание. Выдать ведомость студентов, проживающих в общежитии.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, экзаменационные оценки. Выдать ведомость отличников.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, экзаменационные оценки. Выдать ведомость неуспевающих студентов.
Создать файл, каждая запись которого имеет структуру: фамилия, имя, отчество, номер группы, аттестация дисциплин. Выдать ведомость не аттестованных студентов
Создать файл, каждая запись которого содержит информацию о компьютере: марка, объем винчестера, объем оперативной памяти, быстродействие. Выдать список компьютеров с заданным быстродействием.
Создать файл, каждая запись которого содержит информацию об автомобиле: название модели, год выпуска, цена, цвет. Выдать список автомобилей, цена которых превышает заданную цену А.
Создать файл, каждая запись которого содержит информацию о лекарствах, хранящихся на аптечном складе: название, количество, стоимость. Выдать список лекарств, стоимость которых не превышает заданную цену А.
Создать файл, каждая запись которого содержит информации о лекарствах, хранящихся в аптеках города: номер аптеки, названия, срок годности. Выдать список просроченных лекарств.
Создать файл, каждая запись которого содержит информацию о рейсах самолетов: номер рейса, пункт назначения, время прибытия, время отправления. Выдать информацию о рейсах самолетов, время отправления которых находится в заданном промежутке времени.
Пример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
Н
Свойство 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 Дан массив. Упорядочить его элементы по убыванию. Применим сортировку массива методом пузырька.
Сортировка методом пузырька - самый простой алгоритм сортировки.
Сортировка методом пузырька (по убыванию) работает следующим образом: в итерации цикла берётся самый первый элемент и сравнивается со следующим. Если первый элемент меньше, то элементы меняются местами. Затем происходит сравнение второго с третьим и т.д. После первой итерации цикла в конце оказывается наименьший элемент. После второй итерации на предпоследней позиции оказывается второй по величине элемент. Всего в цикле необходимо произвести на одну итерацию меньше количества элементов в массиве.