Скачать презентацию 1 Лекция 4 по курсу Информатика для Скачать презентацию 1 Лекция 4 по курсу Информатика для

Inf-U02-Lec4.ppt

  • Количество слайдов: 16

1 Лекция № 4 по курсу «Информатика» для групп У 02 -711 Б, У 1 Лекция № 4 по курсу «Информатика» для групп У 02 -711 Б, У 02 -721 Б и по курсу «Информатика и программирование» для группы У 02 -712 Б

2 Лекция на тему: «Массивы. Обработка массивов. Использование массивов. Запись в файл и чтение 2 Лекция на тему: «Массивы. Обработка массивов. Использование массивов. Запись в файл и чтение из файла» План лекции: 1. 2. 3. 4. 5. 6. 7. Понятие массива. Объявление массива. Примеры. Одномерные и многомерные массивы. Примеры. Статические и динамические массивы. Примеры обработки одномерного статического массива: поиск максимума или минимума; сортировка методом пузырька. Пример обработки одномерного динамического массива: ввод произвольного числа значений. Пример обработки двумерного массива: поиск «минимакса» ( «седловой точки» ). Запись содержимого массива в файл последовательного доступа и чтение из файла последовательного доступа в массив.

3 1. Понятие массива Вспомним определённое на 1 -й лекции понятие ПЕРЕМЕННАЯ: Переменная – 3 1. Понятие массива Вспомним определённое на 1 -й лекции понятие ПЕРЕМЕННАЯ: Переменная – это поименованная область компьютерной памяти, в которой хранятся данные определенного типа. Они могут меняться в ходе выполнения программы. Переменная должна иметь имя, тип, значение. Можно сказать короче: «Переменная – изменяемая часть программы» . Массив – это обобщение понятия переменной. По определению: массив – это набор элементов одинакового типа, имеющих одинаковое имя. Как и отдельная переменная, массив является областью компьютерной памяти. Данные, хранящиеся в массиве, могут меняться в ходе выполнения программы. Так как в массиве не один, а несколько элементов с одинаковым именем, для выявления конкретного элемента надо указывать не только имя, но и номер (индекс) этого элемента. Например: Фамилия(5) – это 5 -й элемент в массиве фамилий, если нумерация в этом массиве начинается с 1. Как и переменные, массивы объявляются с помощью ключевых слов: Dim, Private, Public. В чём различие этих определений, я рассказывал на 1 -й лекции. Пример объявления массива: Dim Фамилия(24) As String – объявлен массив фамилий, состоящий из 25 элементов. По умолчанию, нумерация начинается с нуля. Если вы хотите, чтобы нумерация начиналась с 1, надо объявить массив так: Dim Фамилия(1 To 25) As String Выражение в скобках называется диапазоном изменения индекса массива

4 2. Одномерные и многомерные массивы Одномерный массив представляет вектор значений определенного типа. Например, 4 2. Одномерные и многомерные массивы Одномерный массив представляет вектор значений определенного типа. Например, массив фамилий на предыдущем слайде. Другой пример: массив дат рождения сотрудников фирмы. Допустим, сотрудников 25 чел. Объявить этот массив можно так: Dim Bdate(24) As Date Допустим, мы хотим все эти данные поместить в ячейки F 1 – F 25 активного листа книги Excel. Программа ниже: Sub From 1 DArray () Dim D As Date, Bdate(24) As Date For i = 0 To 24 Range(“F” & i + 1) = Bdate(i) Next End Sub Двумерный массив представляет матрицу значений определенного типа. Например, матрицу, содержащую значения температуры 4 -х обитателей палаты № 6, измеряемой каждое утро в течение недели. Объявить этот массив можно так: Dim Temp(3, 6) As Single Допустим, мы хотим все эти данные поместить в ячейки B 2 – E 8 активного листа книги Excel. Программа ниже: Sub From 2 DArray() Dim T As Single, Temp(3, 6) As Single For i = 0 To 6 Range(“B” & i + 2) = Temp(0, i) Range(“C” & i + 2) = Temp(1, i) Range(“D” & i + 2) = Temp(2, i) Range(“E” & i + 2) = Temp(3, i) Next End Sub Бывают массивы и бÓльших размерностей: 3 D, 4 D, …

5 3. Статические и динамические массивы Массивы, которые объявляются с указанием конкретных значений диапазонов 5 3. Статические и динамические массивы Массивы, которые объявляются с указанием конкретных значений диапазонов своих индексов (как это демонстрировалось на предыдущих слайдах) – это статические массивы. Для них, ещё до выполнения программы, сразу выделяется определенная компьютерная память. Например, для матрицы последнего примера заранее отводится память объёмом 4*7*4 = 112 байт (4 байта на одно значение). Если же заранее не известно, сколько элементов будет в массиве (это станет известно только в процессе выполнения программы), то при объявлении массива диапазоны не указываются. В этом случае массивы называются динамическими. Примеры объявлений: Dim Bdate( ) As Date : Dim Temp( , ) As Single В этом случае в программе, после того, как переменные получат новые значения (здесь, например, это переменные N, X, Y), надо переобъявить эти массивы: Re. Dim Bdate(N) : Re. Dim Temp(X, Y) Чтобы при переопределении «старые» значения не пропадали, надо использовать ключевое слово Preserve: Re. Dim Preserve Bdate(N) : Re. Dim Preserve Temp(X, Y)

6 4. Примеры обработки одномерных статических массивов Пример 4. 1. Поиск максимального и минимального 6 4. Примеры обработки одномерных статических массивов Пример 4. 1. Поиск максимального и минимального элементов массива Здесь ничего нового для вас нет: макс. и мин. значения мы уже искали – но без использования понятия «массив» Отметим, что данные с листа не берутся и на лист не заносятся! Sub Самый. Старый() N = 24 Dmax = Bdate(0) Sub Самый. Молодой() For i = 1 To N N = 24 If Bdate(i) < Dmax Then Различие Dmax = Bdate(i) Dmax = Bdate(0) только здесь! For i = 1 To N End If Bdate(i) > Dmax Then Next Dmax = Bdate(i) Msg. Box “Дата рождения самого старого ” _ End If & Dmax Next End Sub Msg. Box “Дата рождения самого молодого ” _ & Dmax End Sub

7 Примеры обработки одномерных массивов продолжение Пример 4. 2. Сортировка одномерного массива «методом пузырька» 7 Примеры обработки одномерных массивов продолжение Пример 4. 2. Сортировка одномерного массива «методом пузырька» Идея алгоритма такая: самый маленький элемент считается самым «лёгким» . Он должен «всплыть» наверх как «пузырёк» . Для этого 1 -й (верхний) элемент (8) последовательно сравнивается с остальными (12, 9, 3, …). Если очередной элемент оказывается меньше, чем 8, они меняются местами (здесь 8 и 3). Теперь все остальные элементы сравниваются уже с числом 3, пока не найдётся ещё меньший элемент – это 2. Меняются местами 3 и 2. Достигли «дна» . Элемент 2 закрепился на самом верху – забыли о нём, начинаем процесс со 2 -го элемента сверху (12). Меняем местами 12 и 9. И так далее… 8 12 9 3 10 9 4 2 7 5 3 12 9 8 10 9 4 2 7 5 2 12 9 8 10 9 4 3 7 5 2 9 12 8 10 9 4 3 7 5 2 3 4 5 7 8 9 9 10 12 Процесс реализуется с помощью «двойного цикла» : For i = 0 To N - 1 For j = i + 1 To N If ai > aj Then Обмен(ai, aj) … Подробнее на слайде 10 …

8 5. Пример использования одномерного динамического массива Пример 5. 1. Ввод произвольного количества значений 8 5. Пример использования одномерного динамического массива Пример 5. 1. Ввод произвольного количества значений в одномерный массив Dim Fam() As String, S As String Sub Динамический. Массив() S = Input. Box("Введите первую фамилию", "Ввод в динамический массив", "") Re. Dim Fam(0) = S Do Until S = "" S = Input. Box("Введите очередную фамилию", "Ввод в динамический массив", "") Re. Dim Preserve Fam(UBound(Fam) + 1) Fam(UBound(Fam)) = S Loop Msg. Box UBound(Fam) ' Это число элементов массива N = UBound(Fam) - 1 ' Это максимальное значение индекса массива For i = 0 To N Range("B" & i + 2) = Fam(i) Next Ans = Msg. Box("Сортировать по возрастанию (Yes) или по убыванию (No)? ", vb. Question + vb. Yes. No) If Ans = vb. Yes Then Сортировка 1 Else Сортировка 2 End Sub

9 Вводить можно сколько угодно значений, ввод прекращается, когда юзер вместо ввода в текстовое 9 Вводить можно сколько угодно значений, ввод прекращается, когда юзер вместо ввода в текстовое поле нажмёт кнопку Cancel на окне ввода Здесь, например, вводятся фамилии: В колонке D введённые значения сортируются. Макросы двух видов сортировки – на следующем слайде

10 Два макроса сортировки массива (методом пузырька): Sub Сортировка 1() N = UBound(Fam) - 10 Два макроса сортировки массива (методом пузырька): Sub Сортировка 1() N = UBound(Fam) - 1 For i = 0 To N - 1 For j = i + 1 To N If Fam(i) > Fam(j) Then S = Fam(i) = Fam(j) = S End If Next For i = 0 To N Range("D" & i + 2) = Fam(i) Next End Sub Сортировка по возрастанию Sub Сортировка 2() N = UBound(Fam) - 1 For i = 0 To N - 1 For j = i + 1 To N If Fam(i) < Fam(j) Then S = Fam(i) = Fam(j) = S End If Next For i = 0 To N Range("D" & i + 2) = Fam(i) Next End Sub Сортировка по убыванию Разница только в одном знаке !

11 6. Пример использования двумерного массива – построение поверхности типа «седло» (гиперболического параболоида) и 11 6. Пример использования двумерного массива – построение поверхности типа «седло» (гиперболического параболоида) и вычисление «седловой точки» «Седловая точка» – это: Z 0 =

12 Программа примера о «седловой точке» Параметры a, b, … подобраны экспериментально Sub Седловая. 12 Программа примера о «седловой точке» Параметры a, b, … подобраны экспериментально Sub Седловая. Точка() Dim x As Integer, y As Integer Dim z(14, 9) As Double Dim Col As String Const a As Double = 5. 2, b As Double = 9. 5 Const c As Double = -1. 3, d As Double = 10. 7 Const p As Double = 1. 1, q As Double = 1. 3 For x = 0 To 14 ' 15 строк For y = 0 To 9 ' 10 столбцов ' гиперболический параболоид (седло): z(x, y) = Round((x - a) * (x - b) / p - _ (y - c) * (y - d) / q, 2) Col = De. Num(y) ' перевод цифр в имена столбцов Range(Col & x + 2) = z(x, y) Next Эта часть программы заполняет матрицу (двумерный массив) значениями и записывает эти значения в ячейки Листа Excel Min. Max = z(0, 0): ix = 0: iy = 0 For x = 0 To 14 Max# = z(x, 0) For y = 0 To 9 If z(x, y) > Max Then Max = z(x, y): iy = y End If Next y If Max < Min. Max Then Min. Max = Max: ix = x End If Next x Msg. Box "z (" & ix & ", " & iy & ") = " & Min. Max, _ vb. Information, "Седловая точка" End Sub Эта часть программы ищет для каждого из 10 значений «y» – максимум (внутренний цикл), а затем для каждого из 15 значений «x» - минимум (внешний цикл). Это и будет «седловая точка» .

13 6. (Продолжение) – что получается после запуска программы, показанной на предыдущем слайде Координата 13 6. (Продолжение) – что получается после запуска программы, показанной на предыдущем слайде Координата «x» направлена вниз, а координата «y» направлена вправо 7 -я строка (счёт с нуля!) и 5 й столбец (счёт с нуля!)

14 7. Запись массива в файл последовательного доступа и чтение из файла в массив 14 7. Запись массива в файл последовательного доступа и чтение из файла в массив В заключение, несколько операторов языка VBA, с помощью которых данные из одномерного массива легко перебрасываются в текстовый файл (который часто называют файлом последовательного доступа), а также делается обратное – данные из файла записываются в массив. 1. Открытие файла «для записи» , запись в этот файл всех элементов массива по очереди. Open <путь к файлу> For Output As # <дескриптор файла> For i = 0 To N Write #<дескриптор файла>, Next Close # <дескриптор файла> 2. Открытие файла Open <путь к файлу> For Input As # <дескриптор файла> «для чтения» , чтение i=0 Do Until EOF(<дескриптор файла>) из этого файла всех Input # <дескриптор файла>, <запись файла> записей и помещение = <запись файла> их в массив по i=i+1 очереди. Loop Close # <дескриптор файла>

15 Операторы открытия файла (для записи и для чтения), запись в файл и чтение 15 Операторы открытия файла (для записи и для чтения), запись в файл и чтение из файла на примерах Open "D: Text. Files" & "aaaa. txt" For Output As #1 For i = 0 To N record = Bdate(i) Write #1, record Next Close #1 Open "D: Text. Files" & “aaaa. txt" For Input As #1 i=0 Do Until EOF(1) Input #1, record Bdate(i) = record i=i+1 Loop Close #1

16 Конец лекции Спасибо за внимание! Лекцию в виде данной презентации выкладываю на сайте 16 Конец лекции Спасибо за внимание! Лекцию в виде данной презентации выкладываю на сайте narod. http: //narod. ru/disk/. . . /Inf-U 02 -Lec 4. pptx. html У кого старая версия MS Office 2003: http: //narod. ru/disk/. . . /Inf-U 02 -Lec 4. ppt. html