Производная алгоритмическая структура «ПОИСК ПО КЛЮЧУ»
Особенности алгоритма
Пример 1 (Поиск по ключу)
1. Постановка задачи
2. Математическая модель
3. Схема алгоритма
4. Код приложения
Пример 2 (Поиск по ключу)
1. Постановка задачи
2. Математическая модель
3. Схема алгоритма
4. Код приложения
5. Отладка программы
Пример №2 можно реализовать другим способом!
Пример 3 (Поиск по ключу)
1. Постановка задачи
2. Математическая модель
3. Схема алгоритма
4. Код приложения

Производная алгоритмическая структура "Поиск по ключу"

1. Производная алгоритмическая структура «ПОИСК ПО КЛЮЧУ»

Условие поиска задается следующим
логическим выражением:
<Элемент
массива>
<Операция сравнения>
ПГУПС, каф. ИнИБ
<Ключ
поиска>
1

2. Особенности алгоритма

1. Ключу поиска присваивается
конкретное значение
2. Организуется циклический процесс,
телом которого служит структура
«Развилка» с одной ветвью.
Логическое выражение определяет
условие поиска элементов
ПГУПС, каф. ИнИБ
2

3.

3. Если логическое выражение истинно,
то это значит, что элемент
удовлетворяет условию поиска.
Значения его индексов запоминаются
и, при необходимости, выводятся на
печать.
Если логическое выражение ложно –
осуществляется проверка следующего
элемента.
ПГУПС, каф. ИнИБ
3

4.

4. В алгоритме необходимо
предусмотреть случай, когда поиск не
дал результатов (здесь возможна
такая ситуация в отличие от поиска
max и min)
Для этого вводится понятие
«Флажок»
ПГУПС, каф. ИнИБ
4

5.

«Флажок» - это, как правило,
переменная логического типа
(Boolean), которой изначально
присваивается значение «False»
(Ложь).
В процессе поиска, как только будет
найден первый элемент,
удовлетворяющий условию поиска,
«Флажок» сразу изменяет свое
значение на «True» (Истина)
ПГУПС, каф. ИнИБ
5

6.

5. После окончания процесса поиска
анализируется значение переменной
«Флажок».
Если она изменила свое значение,
значит найден хотя бы один элемент,
удовлетворяющий условию поиска.
Если «Флажок» не изменил своего
значения – таких элементов не
найдено.
ПГУПС, каф. ИнИБ
6

7. Пример 1 (Поиск по ключу)

ПГУПС, каф. ИнИБ
7

8. 1. Постановка задачи

Дан вектор В размерности X. Напечатать
индексы элементов, значения которых
находятся в интервале [0;10]
Входные данные:
{В}-массив вещественных чисел
X-размерность массива, целое число
N-начало интервала, вещественное число
K-конец интервала, вещественное число
Выходные данные:
i- индексы искомых элементов, целые числа
ПГУПС, каф. ИнИБ
8

9. 2. Математическая модель

flag=ложь
Если Bi [N,K], то
flag=истина
печать i
i=1,2..X
Если по окончании поиска
flag=ложь, вывести сообщение
«Таких элементов не найдено»
ПГУПС, каф. ИнИБ
9

10. 3. Схема алгоритма

Начало
3. Схема алгоритма
X,{B},N,K
{B}
flag=false
i=1
i<=x
Да
Нет
N<=Bi<=K
Да
flag=true
i
Нет
i=i+1
flag=false
Да
Таких эл-тов
не найдено
Конец
ПГУПС, каф. ИнИБ
10

11. 4. Код приложения

Private Sub CommandButton1_Click()
Dim x As Integer, i As Integer, B() As Single
Dim N As Single, K As Single, flag as boolean
x = InputBox(«Введите размерность вектора")
ReDim B(x)
For i = 1 To x
B(i) = InputBox(“B(" & i & ")=")
Debug.Print B(i);
Next
N = InputBox ("Введите начало интервала")
K = InputBox ("Введите конец интервала ")
ПГУПС, каф. ИнИБ
11

12.

flag = False
Debug.Print
Debug.Print «Индексы эл., входящих в заданный интервал:"
For i = 1 To x
If B(i) >= N And B(i) <= K Then
flag = True
Debug.Print “ I =“& i
End If
Next
If flag = False Then
Debug.Print «Таких элементов не найдено"
End If
End Sub
ПГУПС, каф. ИнИБ
12

13.

Результат решения
ПГУПС, каф. ИнИБ
13

14. Пример 2 (Поиск по ключу)

ПГУПС, каф. ИнИБ
14

15. 1. Постановка задачи

Найти индекс последнего
положительного элемента вектора Х
размерности n
Входные данные:
{Х}-массив вещественных чисел
n - размерность массива, целое число
Выходные данные:
ind - индекс последнего положительного
элемента, целое число
ПГУПС, каф. ИнИБ
15

16. 2. Математическая модель

flag=ложь
Если Xi>0 то
flag=истина
ind= i
i=1,2..n
Если по окончании поиска
flag=ложь, вывести сообщение
«Положительных элементов нет»
ПГУПС, каф. ИнИБ
16

17. 3. Схема алгоритма

Начало
3. Схема алгоритма
n,{X}
{X}
flag=false
i=1
i<=n
i=i+1
Да
Да
xi >0
Да
flag=true
Ind=i
Нет
flag=false
ind
Положительных
элементов нет
Конец
ПГУПС, каф. ИнИБ
17

18. 4. Код приложения

Private Sub CommandButton1_Click()
Dim n As Integer, i As Integer, ind As Integer
Dim X() As Single, flag As Boolean
n = InputBox("Введите размерность вектора")
ReDim X(n)
For i = 1 To n
X(i) = InputBox("x(" & i & ")=")
Debug.Print X(i);
Next
flag = False
Debug.Print
ПГУПС, каф. ИнИБ
18

19.

For i = 1 To n
If X(i) > 0 Then
flag = True
ind = i
End If
Next
If flag = False Then
Debug. Print "Положительных элементов нет "
Else
Debug.Print «Индекс последнего
положительного элемента " & ind
End If
End Sub
ПГУПС, каф. ИнИБ
19

20. 5. Отладка программы

ПГУПС, каф. ИнИБ
20

21. Пример №2 можно реализовать другим способом!

Начало
Пример №2 можно
реализовать
другим способом!
n,{X}
{X}
flag=false
i=n
i > =1
Да
Нет
flag=false
xi >0
Нет
i=i-1
Да
i
Да
Положительных
элементов нет
flag=true
Конец
ПГУПС, каф. ИнИБ
21

22.

Private Sub CommandButton1_Click()
Dim n As Integer, i As Integer
Dim X() As Single, flag As Boolean
n = InputBox(" Введите размерность вектора")
ReDim X(n)
For i = 1 To n
X(i) = InputBox("x(" & i & ")=")
Debug.Print X(i);
Next
ПГУПС, каф. ИнИБ
22

23.

flag = False
Debug.Print
For i = n To 1 Step -1
If X(i) > 0 Then
Debug.Print "Индекс последнего положительного элемента" & i
flag = True
Exit For
End If
Next
If flag = False Then
Debug.Print “Положительных элементов нет"
End If
End Sub
ПГУПС, каф. ИнИБ
23

24.

5. Отладка программы
ПГУПС, каф. ИнИБ
24

25. Пример 3 (Поиск по ключу)

ПГУПС, каф. ИнИБ
25

26. 1. Постановка задачи

Дана матрица А размерности m x m.
Напечатать индекс строки, в которой на главной
диагонали лежит нулевой элемент. При наличии
нескольких таких строк напечатать индекс первой
из них
Входные данные:
А-массив вещественных чисел
m - размерность массива, целое число
Выходные данные:
i - индекс строки, целое число
ПГУПС, каф. ИнИБ
26

27. 2. Математическая модель

Flag=ложь
Если aii=0 flag=истина, напечатать i
и закончить процесс поиска
i=1,2…m
Если по окончании поиска
flag=ложь, вывести сообщение
«На главной диагонали нулевых элементов
нет»
ПГУПС, каф. ИнИБ
27

28. 3. Схема алгоритма

Начало
3. Схема алгоритма
m,{A}
{A}
flag=false
i=1
Да
i <=m
Нет
flag=false
Нет
aii =0
i=i+1
Да
i
Да
Нулевых эл-тов
на гл. диаг-ли нет
flag=true
Конец
ПГУПС, каф. ИнИБ
28

29. 4. Код приложения

Private Sub CommandButton1_Click()
Dim m As Integer, i As Integer, j As Integer
Dim A() As Single, flag As Boolean
m = InputBox("Введите размерность матрицы")
ReDim A(1 to m, 1 to m)
For i = 1 To m
For j = 1 To m
A(i, j) = InputBox("a(" & i & "," & j & ")=")
Debug.Print A(i, j);
Next
Debug.Print
Next
flag = False
Debug.Print
ПГУПС, каф. ИнИБ
29

30.

For i = 1 To m
If A(i, i) = 0 Then
Debug.Print "Индекс первой из строк с нулевым "
Debug.Print "элементом на главной диагонали " & i
flag = True
Exit For
End If
Next
If flag = False Then
Debug.Print "Нулевых элементов на главной диагонали нет”
End If
End Sub
ПГУПС, каф. ИнИБ
30

31.

5. Отладка программы
ПГУПС, каф. ИнИБ
31
English     Русский Правила