Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

Поиск в массиве элементов, удовлетворяющих заданным условиям

Задача 1

Задан массив A из 10 элементов – целые числа в диапазоне от –20 до 20. Найти в массиве все отрицательные элементы и вывести их на экран.

В общем случае в массиве может не быть отрицательных элементов. Чтобы учесть и этот случай введем переменную р, которой присвоим значение 0 (или любое другое) до просмотра элементов и изменяем каким-либо образом ее значение каждый раз, когда найдем отрицательный элемент. После просмотра всех элементов проверяем значение переменной р: если оно не изменилось – отрицательных элементов нет. Сообщение «Отрицательных элементов нет» будем вsводить в окно сообщений MsgBox.

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

Фрагмент программного кода:

. . .

р = 0

For i = 1 to 10

if a(i) < 0 then ‘если элемент массива

Picture2. Print a(i); Spc(2); ‘отрицательный – выводим в

‘графическое окно

р = р + 1 ‘и применяем величину р

end if

next i

if p = 0 then

Label1 Visible = true

Label1 Caption Msg “Отрицательных элементов нет”

end if

Задача 2

В массиве А, содержащим 12 целых чисел в диапазоне от –100 до 100, найти 1-й отрицательный элемент. Вывести на экран этот элемент и его индекс i.

Для вывода ai и i используем текстовые окна text1 и text2. Для вывода сообщения «Отрицательных элементов нет» - встроенное окно сообщений MsgBox.

Private Sub btnStart_Click( )

Dim a (1 to 12) as Integer

Dim i as Byte, yes as Boolean ‘Ввод исходного массива

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

yes = true ‘если отрицательных элементов нет

for i = 1 to 12

if sgn (a(i)) = -1 then

yes = false ‘отрицательные элементы есть

text1.text = CStr (a(i)) ‘вывод ai < 0

text2.text = CStr (i) ‘и его индекса

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

end if

next i

if yes then ‘yes = true? Есть отрицательные элементы?

‘нет отрицательных элементов

MsgBox «Отрицательных элементов нет», , “окно сообщений”

end if

end Sub

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

Функция Sgn (число) проверяет знак числа

Задача 3

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

В массиве а найти максимальный элемент. Пусть задан массив a = {3,5, 0, 10, -1, 2}, i = 1,…,6. Введем переменную imax – индекс текущего максимального элемента, после просмотра всех элементов массива в этой переменной будет содержаться индекс максимального элемента.

Тогда элемент с индексом imax, т.е. аimax – это значение максимального элемента на каждом шаге сравнения.

Возьмем начальное значение imax = 1, т.е. за максимальный элемент примем сначала 1-й элемент - аimax = а1, и с ним будем сравнивать следующие элементы, начиная со 2-го, пока не найдем элемент аi > аimax. Тогда будем считать этот элемент максимальным, т.е. аimax = а. Следующие элементы будем сравнивать уже с найденными элементом, новым аimax и т.д.

imax = 1, аimax = а1 = 3

1. а2 > аimax, да  imax = 2, аimax = а2 = 5

2. а3 > аimax, нет

3. а4 > аimax, да  imax = 4, аimax = а4 = 10

4. а5 > аimax, нет

5. а6 > аimax, нет

Результат: imax = 4, аimax = а4 = 10.

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

Фрагмент программного кода:

imax = 1

for i = 2 to 6

if a(i) > a (imax) then imax = i

next i

txta.text = Cstr (a(imax)); txti.text = Cstr (imax)

Задача 4. Найти минимальный элемент в массиве. Алгоритм аналогичен поиску максимального элемента – самостоятельно.

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

Задача. Расположить элементы массива А в порядке убывания их значений.

Пусть дан массив а = {3, 2, -1, 10, 0, 5}, i = 1,…,6.

Должны получить

Рассмотрим алгоритм на примере:

1). Ищем максимальный элемент в массиве и ставим его на 1-е место, поменяв местами 1-ый и максимальный:

3 2 –1 10 0 5  10 2 –1 3 0 5

2). Ищем максимальный элемент среди элементов со 2-го по 6-й и ставим его на 2-е место, поменяв местами со 2-м элементов:

1 0 2 –1 3 0 5  10 5 –1 3 0 2

3). Ищем максимальный элемент среди элементов с 3-го по 6-й и ставим его на 3-е место.

1 0 5 –1 3 0 2  10 5 3 –1 0 2

4). Далее – аналогично:

1 0 5 3-1 0 2  10 5 3 2 0 -1

5). 1 0 5 3 2 0 –1  10 5 3 2 0 –1

После этого 5-го шага на последнем месте оказывается минимальный элемент, получен упорядоченный массив.

Просматривать и искать максимальный элемент нужно (n-1) раз (у нас 5 раз при n = 6).

Рассмотрим алгоритм обмена местами двух элементов: пусть а1 и а4 нужно поменять местами. Введем новую переменную р для временного хранения а1 (можно а4).

a 1 a4 1) p = a1

2) a1 = a4

p 3) a4 = p

В общем виде: an и am

a n am 1) p = an

2) an = am

p 3) am = p

Фрагмент программного кода:

For k = 1 to 5

imax = k ‘считаем k-ый элемент максимальным

for i = k to 6 ‘поиск максимального элемента

if a(i) > a (imax) then imax = i ‘среди элементов c

next i ‘k – ого по 6-й

p = a(k) ‘меняем местами

a(k) = a(imax) ‘k-ый элемент и

a(imax) = p ‘найденный максимальный

next k

for i = 1 to 6

Picture2.Print a(i); Spc(2);

Next i

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

Изменение размера массива

Задача 1. Из массива А удалить 3-й элемент.

Пусть дан массив а = {3, 5, 6, 10, -1, 2}, i = 1,…,6.

Алгоритм: нужно сдвинуть все элементы, начиная с 4-го, на место предыдущего – влево (6-ой занулить)

3 5 6 10 –1 2

1 2 3 =0

удалить

Сдвиг (i+1)-го элемента влево:

ai = ai + 1

Получим:

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

Ф

рагмент программного кода:

for i = 3 to 5

a(i) = a(i+1)

next i

a(6) = 0

Задача 2. В массив вставить 0 после 3-го элемента.

а = {3, 5, 6, 10, -1, 2}, i = 1,…,6  i = 1,…,7.

Алгоритм: нужно «освободить» 4-е место для вставляемого числа, для этого элементы с последнего 6-го по 4-й нужно сдвинуть вправо на одно место. Начинать сдвиг с последнего элемента; при объявлении массива в программном коде его размер нужно задать на 1 больше заданного, т.е. 7, а вводить только 6 первых элементов, оставив последнее место «свободным»:

  1. 5 6 10 -1 2  

= 0 3 2 1

4

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

Фрагмент программного кода:

for i = 6 to 4 step -1

a(i+1) = a(i)

next i

a(4) = 0