Лабораторный практикум-new
.pdf
При |
решении |
задач |
с |
использованием |
массивов |
условно |
можно |
выделить следующие модули: |
|
|
|
|
|
||
Ввод массива → Операции с массивом → Вывод массива |
|
|
|||||
|
|
Лабораторная работа №3 |
|
|
|
||
|
|
|
Одномерные массивы |
|
|
|
|
Ввод одномерного массива |
|
|
|
|
|
||
Пример: |
Ввести одномерный массив действительных чисел, состоящий из n |
|
|||||
элементов. |
|
|
|
|
|
|
|
|
А) |
|
|
|
|
|
|
|
начало |
|
|
cls |
|
|
|
|
|
|
option base 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
input n |
|
|
|
|
i = 1 |
|
|
dim a(n) |
|
|
|
|
|
|
for i=l to n |
|
|
|
|
|
|
|
|
|
|
|
|
|
i ≤ 10 |
|
|
input a(i) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
next i |
|
|
|
|
a |
|
|
|
|
|
|
|
i = i + 1 |
Рис.2 |
|
|
|
|
|
|
|
|
|
|
|
||
При выполнении этой программы элементы массива вводятся с |
|
||||||
клавиатуры. |
|
|
|
|
|
|
|
Б) При выполнении этой программы элементы массива вводятся из |
|
||||||
блока данных
dim a ( 1 to n) for i=l to n read a (i) next i
data 3.5,4.6,7.3
В |
операторе data должно |
быть |
указано |
|
n значений. |
|
|
|
|
Этот |
вариант ввода |
удобен, когда |
число |
|
элементов массива известно заранее иначе,
оператор data необходимо обновлять.
31
В) cls
input n
dim a (1 to n) for i=l to n a(i)= rnd (i) next i
В |
данном |
случае |
элементы |
масси |
генерируются с помощью функции RND. |
|
|||
Если необходимо ввести два или несколько одномерных массивов, то программа может быть:
print "введите массивы а и b" for i=l to n
input a (i), b(i) next i.
Вывод одномерного массива
Пример: вывести на печать элементы одномерного массива (массив из
10 элементов. |
|
|||
|
|
|
|
Фрагмент программы: |
|
i = 1 |
|
||
|
|
|
|
for i=l to 10 |
|
|
|
|
|
|
i ≤ n |
|||
|
print a(i) |
|||
|
|
вывод |
next i |
|
|
|
|||
|
ai |
|||
|
|
|||
i = i + 1
Рис.3
В этом случае при выполнении программы все элементы массива будут напечатаны в столбец, каждый элемент на отдельной строке.
Если в цикле будет оператор print a (i), (запятая после оператора print),
то элементы будут напечатаны по 5 элементов в строке.
Если в цикле будет оператор print a (i); (ставится ;) то элементы массива будут напечатаны в строку.
При выводе двух или более одномерных массивов одного размера удобно вывести их как параллельно расположенные столбцы:
print "массив a", "массив b"
32
for i= I to n
print a (i), b(i)
next i
Рассмотрим фрагменты отдельных операций с одномерными массивами.
1. Суммирование элементов массива
Для одномерного массива а= (а1 а2,... аn)
n
Вычислить S = åa(i)
i =1
Фрагмент программы
S = 0
S = 0
i = 1 |
i ≤ n |
S = S + ai |
For i = 1 to n
S = S + a(i)
next i
i = i + 1
Рис.4
2.Поэлементное суммирование двух массивов
Для одномерных массивов аi , bi , i = 1 , n вычислить ci = ai + bi i = 1, n
S = 0
i = 1
i ≤ n
ci = ai + bi
i = i +1
Фрагмент программы
rem суммирование векторов for i = 1 to n
c(i) = a(i) + b(i)
next i
Продолжение
программы Рис.5
33
3.Суммирование по условию
Вычислить среднее положительных элементов одномерного массива ai
(i=1, n)
|
n |
|
|
åai |
|
S = i=1 |
||
Если ai > 0 |
k |
|
|
n |
|
k = å1 |
||
|
i=1 |
|
S = 0 |
|
|
k = 0 |
|
|
i = 1 |
|
|
i ≤ m |
нет |
|
|
||
да |
S2 = S/k |
|
|
||
ai > 0 |
нет |
|
S2 |
||
да |
||
S = S + ai |
|
|
k = k + 1
i = i + 1
Рис.6
rem среднее положительных rem элементов одномерного rem массива
S = 0 : k = 0 for i = l to n
if a( i ) > 0 then S = S + a(i)
k = k + 1 end if next i S2 = S/k print S2
4.Поиск максимального (минимального) элемента в массиве.
В массиве ai (i=l, n) найти максимальный элемент и его индекс
ìmax, если a(i) < max max = í
îa(i), если а(i) ³ max
34
|
|
|
|
|
|
|
|
|
|
|
|
|
rem нахождение максимального |
|
|
|
max = -1E10 |
|
|
|
|
|
|
rem элемента массива |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
max= - 1E10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i = 1 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
for i=l to n |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i ≤ n |
|
|
|
|
|
|
if a(i)>= max then |
|||
|
|
|
|
|
|
|
|
|
max=a(i): imax=i |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
imax |
|||
|
|
|
|
|
|
|
|
|
|
end if |
|||
|
|
|
a(i) > max |
|
|
|
max |
|
|||||
|
|
|
|
|
|
|
|
|
next i |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print imax, max |
|
|
|
|
max = a |
|
|
|
|
|
|
|
|
||
|
|
|
imax = i |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i = i + 1 |
|
|
|
|
|
Рис.7 |
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
поиска минимального элемента в массиве ai (i=l, n) и его индекса |
|||||||||
|
|
|
Для |
||||||||||
математическая постановка задачи будет: |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
min = |
ìmin, если a(i) < min |
||
|
|
|
|
|
|
|
|
|
|
í |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
îa(i), если а(i) ³ min |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rem нахождение минимального |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
min = -1E10 |
|
|
|
|
|
|
rem элемента массива |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
min= 1E10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i = 1 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
for i=l to n |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i ≤ n |
|
|
|
|
|
|
if a(i)<= min then |
|||
|
|
|
|
|
|
|
|
|
min=a(i): imin=i |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
imin |
|
||
|
|
|
|
|
|
|
|
|
|
|
end if |
||
|
|
|
a(i)< min |
|
|
|
mmin |
||||||
|
|
|
|
|
|
|
|
|
next i |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
min = a(i) |
|
|
|
|
|
|
|
|
print “a(“ ; imin;”)=”; min |
|
|
|
|
imin = i |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i = i + 1 |
|
|
|
|
|
Рис.8 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.Удаление элемента из массива
Требуется удалить k-й элемент из массива ai (i = 1, n)
35
на 1. |
|
i = n |
|
i ≤ k |
|
ai+1 = ai |
a(k) = B |
i = i - 1 |
n=n+1 |
rem включение элемента в массив for i=n to k step -l
a ( i + 1 )=a( i ) next i
a( k )=b n = n + l
36
7.Получение нового массива из данного
Дано: одномерный массив аi(i = 1, n). Получить новый массив из элементов исходного, величина которых больше заданного числа p
b j = ai
|
|
n |
|
|
|
|
j - индекс нового массива b |
||
K = å1 |
|
если ai > p |
|
||||||
|
|
i=1 |
|
k - количество элементов в массиве b |
|||||
j = 1, k |
|
|
|
|
|||||
|
|
|
|
|
|||||
|
|
input p |
|
|
|
|
|
||
|
|
p |
|
|
|
|
|
||
k=0: j=1 |
|
|
|
|
|
|
|
||
|
|
k = 0 |
|
|
|
|
|
||
for i=l to n |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
if a( |
i ) >j p= then1 |
|
|
|
|
|
|||
b( j ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
= a( i ) |
|
|
|
|
|
||||
|
|
i = 1 |
|
|
|
|
|
||
k = |
|
|
|
|
|
|
|
|
|
k+1 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
нет |
|
|
|
|
j = j+1 |
||
|
|
i ≤ n |
|
|
|
|
|
||
|
|
|
|
|
|
|
|||
|
|
|
|
да |
|
|
|
|
end if |
|
|
|
|
|
|
|
|
||
|
|
|
|
нет |
|
|
|
|
next i |
|
|
|
|
|
|
|
|
||
|
|
ai > p |
|
|
|
|
|
||
|
|
да |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
bj = ai |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
k = k + 1 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
j = j + 1 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i = i + 1 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.11
8.Упорядочение (сортировка) массива. Дан числовой массив xi ..,хn
элементы которого попарно различны. Требуется переставить элементы
37
массива так, чтобы после перестановки они были упорядочены в порядке возрастания: xi<...<xn.( или убывает xi >…>xn)
а) алгоритм сортировки выбором
Первое место должен занять наименьший элемент, второе наименьший из всех остальных и т.д. Таким образом, каждый раз необходимо находить индекс наименьшего элемента (k) и осуществлять перестановку (рис.12)
i = 1 |
|
for 1=1 to n |
|
нет |
k = i |
i ≤ n |
|
да |
for j = i+1 to n |
k = i |
|
if x(j)<x(k) then k = j |
|
next j |
|
j = i + 1 |
|
swap x(i), x(k) |
|
нет j ≤ n |
next i |
да |
|
x(j) < x(k) |
Swap x(i), x(k) |
k = j |
i = i + 1 |
|
|
j = j + 1 |
|
Рис.12 |
|
б) алгоритм сортировки методом пузырька |
|
1)Сравнить х( 1) и х(2):
·если х( 1 )>х(2), сделать перестановку
·если х(1)<=х(2), перейти к 2
2)Сравнить х(2) и х(3)
38
·если х(2)<=х(3), перейти к 3
·если х(2)>х(3), поменять местами х(2) и х(3)
·сравнить х(2) и х(1), сделать перестановку, если она нужна
3)И вообще, если х (i) - последний элемент в упорядоченном списке, то сравнить х (i) и x (i+1)
4)Если х (i )<= х (i+1), установить i= i+ 1 и, если i<= n-1, перейти к 3, в
противном случае сортировка закончена.
если х (i )> х (i+1), то
·Поменять местами х (i) и х (i+1)
·Убедиться, что х (i) находится на своем месте в упорядоченном списке
·Установить k=i
5)Сравнить х (k-1) и х (k):
·если x(k) меньше, то сделать перестановку; установить k=k-l и, если
k>l, перейти к 5
·если x(k)>=x(k- 1 ), то перейти к 4
На рис.13 представлен один из возможных алгоритмов сортировки метода “ пузырька ”. Элементы массива сортируются в порядке убывания
for i =1 to n step -1
39
for j = 1 to i-1 |
|
нет |
if a(j) < a(j+1) then |
да |
swap a(j), a(j+1) |
end if |
|
next j |
|
нет |
next i |
|
да |
|
нет |
|
да |
Рис.13
Пузырьковая сортировка (bubble ) может быть выполнена и с помощью
следующих подпрограмм
Подпрограмма bubble.bas |
Подпрограмма bubble1.bas |
SUB BUBBLE (X(),N) |
SUB BUBBLE1 (X(),N) |
FOR I=1 TO N-1 |
M: Q=0 |
FOR J=N-1 TO I STEP -1 |
FOR I=1 TO N-1 |
IF X(J-1)>X(J) THEN |
IF X(I-1)>X(I) THEN |
SWAP X(J), X(J-1) |
TMP=X(I-1):X(I-1)=X(I):X(I)=TMP:Q=1 |
END IF |
|
NEXT J |
|
NEXT I |
|
END SUB |
|
|
|
Для выполнения лабораторной работы студент получает задание от преподавателя из вариантов задания по данной работе, составляет блок – схему алгоритм решения, программу на QBASIK, решает задачу на ЭВМ.
40
