Массивы

Download Report

Transcript Массивы

Массивы
Для хранения в памяти компьютера большого числа
однотипных данных используются массивы. Каждый элемент
массива обладает общим именем индивидуальным номером
(индексом) и значением, т. е. является переменной с
индексом.
Допустим, нам известна температура в каждый из дней
октября.
День месяца
1
2 3 4 5 6
7
8
9
10
11
12
13
14
…
29
30
31
Температура, С
5
7 9 8 2 0
3
11
12
3
0
-2
-4
0
…
0
1
2
Тогда температура - это последовательность чисел,
следующих по порядку одно за другим. А день месяца – это
порядковый номер элемента в этой последовательности или
индекс.
Массивы
Если обозначим последовательность температур за
весь месяц, например, буквой t, тогда можно
обозначить через t(l) температуру первого дня
месяца, t(2) - второго, ..., t(31) -последнего.
Тогда под массивом можно понимать набор
однотипных данных, объединенных одним именем и
отличающихся индексами или последовательность
фиксированного числа однотипных переменных,
имеющих общее имя.
Этот пример является определением одномерного
массива – одномерной таблицы, а если данные
можно представить в виде двумерной таблицы, то и
массив можно определить как двумерный.
Массивы могут быть различных типов: числовые,
строковые и т. д.
Объявление одномерных
массивов
Dim t(31) As Integer
‘ Указывается
максимальное значение индекса
Dim t(1 To 31) As Integer ‘ Указывается
диапазон значений индекса с
использованием ключевого
слова To
Dim Year(1917 to 2000) as Integer ‘Указывается
массив с произвольными границами индексов.
Объявление одномерных
массивов
Одним из этих способов можно объявить массив, если
он локальный. Если же массив предназначен для
общего пользования (проект содержит несколько
форм, в которых массив обрабатывается), то он
должен быть описан с помощью служебного слова
Public (а не Dim) и это описание помещается в
раздел General Declarations стандартного модуля.
Если до выполнения программы размер массива
неизвестен, используется динамический массив. Он
описывается в разделе General Declarations
стандартного модуля в виде:
Public Имя массива() As тип массива.
Пример использования динамического
массива
Public Day() As Integer‘ Описание
массива в модуле
Public I As Integer
‘Описание переменной в
модуле
…
‘Программный код задачи
I = Val(InputBox("Введите количество дней"))
ReDim Day(I)
‘Задание
размерности массива
Заполнение массива с помощью функции
Inputbox
Dim t(1 To 31) As Integer, I As Integer
For I=1 To 31
T(I)= Val(InputBox(“Введите значение
дневной температуры в ”+Str(I)+” день”
Next I
Заполнение массива с помощью датчика
случайных чисел
Dim A(10) As Byte, I As Integer
Randomize
For I = 1 To 10
A(I) = Int(Rnd*10) + 1
Next I
Заполнение массива из ячеек листа Excel
Для заполнения массива
значениями,
расположенными в
ячейках листа Ms Excel,
например, таким образом
→
Можно воспользоваться
одним из фрагментов:
Заполнение массива из ячеек листа Excel
Dim A(10) As Single, I As Integer
For I = 1 To 10
A(I) = Cells(I + 1, 1)
Next I
Или
Dim a(10) As Single, i As Integer
i=1
Do While Cells(i + 1, 1) <> ""
a(i) = Cells(i + 1, 1)
i=i+1
Loop
Вывод элементов одномерного
массива в ячейки листа Excel
Dim A(10) As Single, I As Integer
For I = 1 To 10
Cells(I + 1, 2) = A(I)
Next I
Задача1
Составить алгоритм и программу заполнения
элементов массива A с помощью датчика
случайных чисел целыми числами от -10 до
15, массив B действительных чисел ввести с
клавиатуры и получить массив C по формуле:
C(i)=(A(i)+B(i))/(3+cos(i)). Вывести элементы
всех массивов, содержащих по 7 элементов
на Лист1.
Постановка задачи
Исходными данными для данной задачи
является массив B(7) действительных
чисел, которые вводятся с клавиатуры,
и массив целых чисел A(7), получаемых
датчиком случайных чисел.
Результатом работы программы является
массив C(7) действительных чисел,
вычисляемых по заданной формуле.
Кроме того, в задаче предлагается
вывести все массивы на лист Ms Excel.
Блок – схема задачи 1
Начало
I=1,7,1
A(I)=-10+Int(Rnd*26)
Ввод B(I)
C(I)= (A(I)+B(I))/(3+Cos(I))
Вывод
A(I),B(I),C(i)
Конец
Программа задачи 1
Sub massiv()
Dim A(7) As Integer, B(7) As Single, C(7) As Single
Dim I As Integer
Sheets("Лист1").Select
Cells(1, 1) = "A(i)": Cells(1, 2) = "B(i)«
Cells(1, 3) = "C(i)"
For I = 1 To 7
A(I) = -10 + Int(Rnd * 26)
B(I) = Val(InputBox("Введите " + Str(I) + " элемент
массива B"))
C(I) = (A(I) + B(I)) / (3 + Cos(I))
Cells(I + 1, 1) = A(I): Cells(I + 1, 2) = B(I)
Cells(I + 1, 3) = C(I)
Next I
End Sub
Результаты работы программы
задачи 1
Особенности алгоритмов и программ
с накоплением в массивах
Сумма вычисляется всегда по такой формуле:
Сумма = Сумма + очередной элемент массива
Произведение вычисляется всегда по такой формуле:
Произведение = Произведение* очередной
элемент массива
Количество вычисляется по формуле:
Количество = Количество+1
Примечание: до вычисления этих величин в цикле они
должны быть подготовлены таким образом:
начальному значению суммы и количества надо
присвоить ноль, а произведению присвоить
единицу.
Особенности поиска экстремальных
значений
1. В начале за текущий минимум (максимум)
принимается значение первого элемента
массива, например, min=A(1) или max=
min=A(1)
2. Затем в цикле, начиная со второго элемента
массива, производится его сравнение со
значением переменной min (max) и если
это число меньше min (больше max), то на
место min (max) записывается этот элемент
и он становится текущим минимумом
(максимумом). Например, min=A(I)
Задача 2
Составить проект программы для нахождения
в одномерном массиве (размерностью не
более 200 элементов), состоящем из N
действительных чисел, количества
элементов, больших 5, произведения
элементов массива, попавших в интервал
(2;4), минимального элемента массива и его
номера. Массив заполняется из столбца А
Листа1 (начиная с ячейки А2 и до первой
пустой ячейки). Результаты выдаются на
лист “Результат”в столбец С.
Постановка задачи 2
Для решения задачи определим такие
переменные:
A(200) – массив действительных чисел;
N- общее количество элементов массива, не
более 200;
Ct - количество элементов массива, больших 5;
Mult - произведение элементов массива,
попавших в интервал (2;4);
Min - минимальный элемент массива,
Nmin – номер минимального элемента массива.
Лист2 переименуем в «Результат» и пусть
числа расположены на Листе1 таким
образом:
Блок-схема задачи 2
Начало
I=2
Да
Cells(I,1)=””
Нет
Ввод значений в массив
A(I-1)
I=I+1
N=I-2;
1
1
Mult=1;Min=A(1);Nmin=1; Ct=0
I=1 to N
Нет
A(I)>2 и A(I)<4
Да
Mult=Mult*A(I)
Нет
A(I)<Min
Да
Min=A(I), Nmin=I
Нет
A(I)>5
Да
Ct=Ct+1
Вывод Mult, Min,
Nmin, Ct
Конец
Программа задачи 2
Sub massiv1()
Dim A(200) As Single, N As Integer, Ct As Integer, i As Integer
Dim Avr As Single, Sum As Single, Min As Single, Mult As Double, Nmin As Integer
Sheets("Лист1").Select
i=2
Do Until Cells(i, 1) = ""
A(i - 1) = Cells(i, 1).Value
i=i+1
Loop
N = i - 2: Mult = 1: Min = A(1): Nmin = 1: Ct = 0
For i = 1 To N
If A(i) > 2 And A(i) < 4 Then Mult = Mult * A(i)
If A(i) < Min Then Min = A(i): Nmin = i
If A(i) > 5 Then Ct = Ct + 1
Next i
Sheets("Результат").Select
Range("c1").Value = " Минимальный элемент массива =" + Format(Min, "0.000")
Range("c2").Value = " Номер минимального элемента массива =" + Format(Nmin, "0.0")
Range("c3").Value = " Произвед. эл-тов массива, из инт-ла (2;4) =" + Format(Mult, "0.0")
Range("c4").Value = " Количество эл-тов массива, больших 5=" + Format(Ct, "0.000")
End Sub
Результаты работы программы
задачи 2
Сортировка элементов одномерного
массива
Сортировка элементов одномерного
массива - расположение в порядке
возрастания или убывания его
элементов.
Существует много различных способов
сортировки: Сортировка выбором,
сортировка вставкой, пузырьковая
сортировка и т.д.
Мы рассмотрим последнюю на примере
решения задачи (см. след. слайд)
Задача3
Для каждого из студентов группы
известны фамилия и номер зачетной
книжки. Составить алгоритм и проект
программы вывода фамилий и номеров
их зачетных книжек в порядке убывания
номеров зачетных книжек.
Постановка задачи 3
Для решения задачи определим такие
переменные:
Names(30) – массив фамилий
Number(30) - массив номеров зачетных книжек
i, j - переменные циклов
n - количество студентов в группе
zk, s – промежуточные переменные.
Исходные данные массив фамилий и массив
номеров зачетных книжек возьмем из 1-ого и
2-ого столбцов Листа1 Ms Excel, а
отсортированные данные разместим в 4-ом
и 5-ом столбцах также на Листе1.
Блок-схема задачи 3
Начало
I=2
Cells(I,1)<>””
Да
Ввод номеров за
четных книжек в массив
Number
Ввод фамилий
в массив Names
I=I+1
N=I-2
1
1
Повтор по i от 1
до n -1
Повтор по j от i+1
до n
Number(j) >
Number(i)
Да
zk =Number(i):
s = Names(i)
Number(i) =Number(j):
Names(i) = Names(j)
Number(j) = zk:
Names(j) = s
2
Нет
2
Повтор по i от 1
до n
Вывод фамилий и
номеров зачетных
книжек
Конец
Программа задачи 3
Sub сортировка()
Dim Names(30) As String, Number(30) As Long
Dim N As Integer, zk As Long, s As String, I As Integer, J As Integer
I=2
Do While Cells(I, 1) <> ""
Names(I - 1) = Cells(I, 1): Number(I - 1) = Cells(I, 2)
I=I+1
Loop
N=I-2
For I = 1 To N - 1
For J = I + 1 To N
If Number(J) > Number(I) Then
zk = Number(I): s = Names(I)
Number(I) = Number(J): Names(I) = Names(J)
Number(J) = zk: Names(J) = s
End If
Next J
Next I
For I = 1 To N
Cells(I + 1, 4) = Names(I): Cells(I + 1, 5) = Number(I)
Next I
End Sub
Результаты работы программы
задачи 3
Задания для подготовки к
тестированию
Задание 1.
В приведённом фрагменте программы определяется:
S=1
Цикл по i от 1 до 6
если Z(i) < > 0, то S= Z(i)*S
Конец цикла
Вывод S
a.
b.
c.
d.
Сумма элементов массива, не равных 0
Произведение элементов массива, не равных 0
Количество элементов массива, не равных 0
Произведение элементов массива, равных 0
Правильный ответ к заданию 1
В приведённом фрагменте программы определяется:
S=1
Цикл по i от 1 до 6
если Z(i) < > 0, то S= Z(i)*S
Конец цикла
Вывод S
a.
b.
c.
d.
Сумма элементов массива, не равных 0
Произведение элементов массива, не равных 0
Количество элементов массива, не равных 0
Произведение элементов массива, равных 0
Задание 2
В приведённом фрагменте программы
определяется:
S=0
Цикл по i от 1 до 6
S= Z(i)+S
Конец цикла
S=S/6
Вывод S
a.
b.
c.
d.
Среднее значение элементов массива
Сумма элементов массива
Произведение элементов массива
Количество элементов массива
Правильный ответ к заданию 2
В приведённом фрагменте программы
определяется:
S=0
Цикл по i от 1 до 6
S= Z(i)+S
Конец цикла
S=S/6
Вывод S
a.
b.
c.
d.
Среднее значение элементов массива
Сумма элементов массива
Произведение элементов массива
Количество элементов массива
Задание 3
В приведённом фрагменте программы
определяется:
S=1
Цикл по i от 1 до 6
если Z(i) < > 0, то S= S+1
Конец цикла
Вывод S
a. Сумма элементов массива, не равных 0
b. Произведение элементов массива, не равных 0
c. Количество элементов массива, не равных 0
d. Произведение элементов массива, равных 0
Правильный ответ к заданию 3
В приведённом фрагменте программы определяется:
S=1
Цикл по i от 1 до 6
если Z(i) < > 0, то S= S+1
Конец цикла
Вывод S
a. Сумма элементов массива, не равных 0
b. Произведение элементов массива, не равных 0
c. Количество элементов массива, не равных 0
d. Произведение элементов массива, равных 0
Задание 4
Дан фрагмент программы:
M=A(1)
Цикл по i от 1 до 8
если A(i) > M, то M=A(i)
Конец цикла
Сколько раз будет исполнен оператор M=A(i) при
заданном массиве: 3, 8, 7, 9, 4, 10, 2, 12:
a. 2
b. 4
c. 8
d. 1
e. 3
Правильный ответ к заданию 4
Дан фрагмент программы:
M=A(1)
Цикл по i от 1 до 8
если A(i) > M, то M=A(i)
Конец цикла
Сколько раз будет исполнен оператор M=A(i)
при заданном массиве: 3, 8, 7, 9, 4, 10, 2, 12:
a. 2
b. 4
c. 8
d. 1
e. 3
Задание 5
Задан одномерный массив: Хi: -1, -2, 3, 0, -5, 1
алг «Вычисление значения переменной m»
i=1
m= Хi
Цикл пока i  6
если Xi < m, то m= Хi
i=i+1
Конец цикла
Вывод m
Какое значение получит переменная m после
выполнения данного алгоритма?
a. -2
b. 1
c. 3
d. 0
e. 5
Правильный ответ к заданию 5
Задан одномерный массив: Хi: -1, -2, 3, 0, -5, 1
алг «Вычисление значения переменной m»
i=1
m= Хi
Цикл пока i  6
если Xi < m, то m= Хi
i=i+1
Конец цикла
Вывод m
Какое значение получит переменная m после
выполнения данного алгоритма?
a. -2
b. 1
c. 3
d. 0
e. 5
Задание 6
Задан одномерный массив: Хi: 1, 8, 3, 8, 5, -1
i=1: m= Хi: n=1
Цикл по i от 1 до 6
Если Xi > m, то
m= Хi: n=i
Конец если
Конец цикла
Вывод n
Какое значение получит переменная n после
выполнения данного алгоритма?
a. 2
b. 1
c. 3
d. 4
e. 6
Правильный ответ к заданию 6
Задан одномерный массив: Хi: 1, 8, 3, 8, 5, -1
i=1: m= Хi: n=1
Цикл по i от 1 до 6
Если Xi > m, то
m= Хi: n=i
Конец если
Конец цикла
Вывод n
Какое значение получит переменная n после
выполнения данного алгоритма?
a. 2
b. 1
c. 3
d. 4
e. 6