- 20) Способы обработки массивов.
- 21) Ввод и вывод в программе.
- Примеры обработки массивов данных
- Учитель информатики
- Сайт учителя информатики. Технологические карты уроков, Подготовка к ОГЭ и ЕГЭ, полезный материал и многое другое.
- Обработка массивов.
- §20. Обработка массивов.
- Введение
- Перестановка элементов массива
- Реверс массива
- Линейный поиск в массиве
- Сортировка массивов
- Выводы
- Вопросы и задания
20) Способы обработки массивов.
Сумма элементов массива
Пример программы, которая сначала вводит 30 действительных чисел, организовывает их хранение в массиве, определяет сумму элементов этого массива и выводит результат на экран монитора.
Число положительных элементов массива
Пример программы, которая сначала вводит 30 действительных чисел, организовывает их хранение в массиве, определяет количество положительных элементов и выдает сообщение на экран.
Определение максимального элемента
Пример программы, которая сначала вводит 30 действительных чисел, затем организовывает их хранение в массиве, определяет значение и индекс (номер) максимального элемента этого массива и выдает сообщение на экран.
Поиск элемента в неупорядоченном массиве
Пример программы, которая сначала вводит 30 различных (!) реальных чисел, организовывает их хранение в массиве, затем запрашивает так называемое «контрольное число». После этого проверяет, есть ли в массиве элемент, который равен контрольному числу.
21) Ввод и вывод в программе.
Sub йцу() Dim c As Integer ‘ для ввода можно использовать стандартный метод inputbox с = InputBox(«Введите значение», «Заголовок», 0) ‘ для вывода используется Msgbox MsgBox c End Sub Метод InputBox в VBA При работе с VBA неоценимую помощь может оказать использование метода InputBox в качестве окна ввода данных для получения информации от пользователя. Метод имеет следующий общий вид: object.InputBox(Запрос, Заголовок, По_умолчанию, Слева, Сверху, Справка, Раздел, Тип) • Запрос – указывает текст, отображаемый в окне ввода (обязательный пара-метр). • Заголовок – определяет заголовок окна ввода (необязательный параметр). • По_умолчанию – задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр) • Слева, Сверху – определяет координаты верхнего левого угла окна ввода на экране (необязательный параметр). • Справка, Раздел – указывает файл и раздел в справочной системе (необяза-тельный параметр). • Тип – указывает код типа данных, который будет возвращаться методом (не-обязательный параметр).
Пример. Метод InputBox является достаточно гибким. Использование суммы значений позволяет возвратить несколько типов данных. Например, для отображения окно ввода, которое принимает текстовый или чис¬ловой тип данных, установим код в значение 3 (т.е. 1+2 или «число» + «текст»). Следующая процедура вычисляет сумму двух чисел, если вводится числовые данные, и конкатенацию, если вводится текстовые данные. Sub Subjects4_Prog3() Dim A As Integer, B As Integer A = Application.InputBox(Prompt:=»Введите данные», Type:=3) B = Application.InputBox(Prompt:=»Введите данные», Type:=3) S = A + B MsgBox S End Sub MsgBox же позволяет вывести на экран диалоговое окно с определенным сообщением MsgBox c, vbOKOnly, «Значение с» с — возвращаемое значение, vbOkOnly — тип диалогового окна Значение с — заголовок окна
Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.
Источник
Примеры обработки массивов данных
Рассмотрим основные действия над элементами массивов на примерах.
Пример 1. Обработка одномерного массива.
Вычислить % дней в месяце, когда температура опускалась ниже 0 0 С.
Для упрощения вычислений введем следующие обозначения:
all_d – всего дней в месяце (примем значение all_d =31);
cold_d– количество холодных дней;
t – массив температур за месяц;
pr – процент дней с отрицательной температурой.
Текст программы Coldна языке Паскаль
Type days = array[1..31] of real;
Writeln(‘Введите количество дней в месяце’);
Writeln(‘Введите массив температур за месяц — t’);
For i:= 1 to all_d do
For i := 1 to all_d do
Упорядочивание элементов совокупности позволяет упростить дальнейший поиск или представить полученные результаты в более понятном виде. Рассмотрим основные определения.
Сортировкой называется процесс упорядочивания набора данных одного типа по возрастанию или убыванию значения какого-либо признака [1].
Массив, например, массив А=1, a2, …, an>, является отсортированным (упорядоченным) по возрастанию, если для всех индексов i из интервала выполняется условие
.
Сортировка строк – это ранжирование данных строкового типа по алфавиту. Фактически символы, составляющие строку, упорядочиваются по их номеру в кодовой таблице ASCII. Наиболее часто сортировку строк выполняют при выводе различных списков (фамилий, названий).
Различают обменные сортировки, сортировки выбором, сортировку вставками, сортировку слиянием.
Предположим, что имеется исходный массив А=1, a2, …, a10>, который необходимо упорядочить по возрастанию.
Обменные сортировки
Суть обменных сортировок заключается в следующем. Сначала последовательно просматриваются элементы a1, …, an и находится наименьшее i, такое, что ai>ai+1. Затем элементы ai и ai+1 меняются местами, и просмотр возобновляется с ai+1 элемента, и т.д. Тем самым, наибольшее число передвигается на последнее место. Следующие просмотры начинаются опять сначала, уменьшая на единицу количество просматриваемых элементов. Массив будет упорядочен после просмотра, в котором участвовали только первый и второй элементы. Процесс сортировки по убыванию будет аналогичен.
В пределах этого вида можно выделить такие методы сортировок, как метод «пузырька»; метод улучшенной «пузырьковой» сортировки; метод быстрой сортировки.
Для сортировки методом «пузырька»массив последовательно просматривается несколько раз. Каждый просмотр состоит из сравнения каждого элемента массива ai с элементом ai+1 и обмена этих двух элементов, если они расположены не в нужном порядке.
Пример 1 . Пусть задан массив А, состоящий из элементов: А=<25; 57; 48; 37; 12; 92; 86; 33>. Упорядочить его по возрастанию значений элементов.
На первом просмотре делаем следующие сравнения:
а1 с а2 (25 и 57) – нет обмена;
а5 с а6 (57 с 92) – нет обмена;
Таким образом, после первого просмотра элементы массива будут располагаться в таком порядке:
25 48 37 12 57 86 33 92.
После первого просмотра наибольший элемент 92 находится в нужной позиции. В общем случае элемент а(n—i+1) будет находиться в нужной позиции после i-той итерации. Этот метод называется «методом пузырька» потому, что каждое число, словно пузырек, медленно всплывает вверх в нужную позицию.
После второго просмотра получим последовательность:
25 37 12 48 57 33 86 92.Элемент 86 на нужном месте.
Поскольку каждая итерация помещает новый элемент в нужную позицию, то для сортировки некоторого массива, состоящего их n элементов, требуется не более n-1 итерации. Полный набор итераций для массива А выглядит следующим образом:
1-ая итерация | 92; |
2-ая итерация | 92; |
3-ая итерация | 92; |
4-ая итерация | 92; |
5-ая итерация | 92; |
6-ая итерация | 92; |
7-ая итерация | 92. |
Метод улучшенной «пузырьковой» сортировки основан на методе «пузырька» с той лишь разницей, что количество итераций меньше. Рассмотрим его на примере.
Пример 2. Упорядочим по возрастанию методом «пузырька» массив А, представленный в примере 13.1, а также проиллюстрируем метод улучшенной «пузырьковой» сортировки на примере упорядочивания данного массива по убыванию.
Создаем вспомогательные массивы В и С. В массиве В будут сохраняться результаты сортировки по убыванию, в массиве С – по возрастанию. Исходный массив А и отсортированные массивы В и С выведем на экран, используя подпрограмму-процедуру.
Источник
Учитель информатики
Сайт учителя информатики. Технологические карты уроков, Подготовка к ОГЭ и ЕГЭ, полезный материал и многое другое.
Обработка массивов.
Информатика. Учебник для 9 класса (по учебнику К. Ю. Полякова, Е.А. Еремина, базовый уровень)
§20. Обработка массивов.
Введение
Ключевые слова:
Современные компьютеры работают с огромными массивами данных. При этом размер программы не зависит от размера массива: можно написать очень короткую программу, которая обрабатывает миллиарды чисел.
Из курса 8 класса вы уже знаете, как найти сумму элементов массива и его максимальный (минимальный) элемент, определить количество элементов, удовлетворяющих условию. В этом параграфе мы изучим некоторые более сложные алгоритмы.
Вспомните и запишите в тетрадь, как:
• объявить целочисленный массив из N элементов;
• заполнить массив нулями;
• заполнить массив натуральными числами от 1 до N;
• заполнить массив случайными числами в диапазоне [50, 100];
• найти сумму значений всех элементов массива;
• найти сумму значений чётных элементов массива;
• найти количество отрицательных элементов массива;
• найти максимальный элемент массива.
Перестановка элементов массива
Во многих задачах нужно переставлять элементы массива, т. е. требуется менять местами значения двух ячеек памяти.
Представьте себе, что в кофейной чашке налит сок, а в стакане — кофе, и вы хотите, чтобы было наоборот. Что вы сделаете?
Вернёмся к программированию. Чтобы поменять местами значения двух переменных — а и b, нужно использовать третью переменную того же типа:
Перестановка двух элементов массива, например А [i] и А [к], выполняется так же:
Теперь рассмотрим несколько задач, в которых требуется переставить элементы массива в другом порядке.
Задача 1. Массив А содержит чётное количество элементов N. Нужно поменять местами пары соседних элементов: первый со вторым, третий — с четвёртым и т.д. (рис. 4.1).
Рис. 4.1
С каким элементом нужно поменять местами элемент А [i]? Зависит ли ваш ответ от свойств числа i?
Сергей написал такой алгоритм для решения задачи 1:
нц для i от 1 до N
поменять местами A[i] и A[i+1]
кц
Выполните его вручную для массива <1, 2, 3, 4>(N = 4). Объясните результат. Найдите ошибки в этом алгоритме.
Обратите внимание, что на последнем шаге цикла мы будем менять местами элемент А [ N ] с несуществующим элементом A [N+1 ]. Это вызовет ошибку, которая называется выход за границы массива. Но даже если изменить наибольшее значение переменной цикла на N-1, программа всё равно будет работать неправильно, т. е. приведёт к неверному решению задачи 1. Получится, что первый элемент просто «переедет» на место последнего.
Для того чтобы исправить программу, нужно изменять переменную i с шагом 2:
Решение на языке Паскаль получилось немного более сложным, потому что в этом языке можно изменять переменную цикла только с шагом 1 или -1, а нам нужен шаг 2. В этой ситуации можно, например, использовать цикл с условием (цикл while).
Предложите другое решение этой задачи, записав нужные операторы в теле цикла.
Реверс массива
Задача 2. Требуется выполнить реверс массива, т. е. переставить элементы массива в обратном порядке, так чтобы первый элемент стал последним, а последний — первым (рис. 4.2).
Рис. 4.2
С каким элементом нужно поменять местами элемент А [1] ? Элемент А [2]? Элемент А [i]?
Если индекс первого элемента в паре увеличивается на 1, а индекс второго элемента уменьшается на 1, что можно сказать о сумме индексов этих элементов?
В этой задаче сумма индексов элементов, участвующих в обмене, для всех пар равна N+1, поэтому элемент с номером i должен меняться местами с (N+l-i)-M элементом.
Выполните вручную следующий алгоритм для массива <1, 2, 3, 4>(N = 4). Объясните результат. Найдите ошибки в этом алгоритме (почему он не решает задачу 2?).
нц для i от 1 до N
поменять местами A[i] и А[N+1-i]
кц
Для того чтобы не выполнять реверс дважды, нужно остановить цикл на середине массива:
нц для i от 1 до div(N, 2)
поменять местами А[i] и A[N+l-i]
кц
Запишите в тетради операторы, которые нужно добавить в тело цикла. Для обмена используйте вспомогательную переменную с.
нц для i от 1 до div(N, 2) for i:=l to N div 2 do begin
• • • • • •
КЦ end;
Запишите в тетради другое решение задачи реверса массива, которое использует цикл с условием (пока, while).
Линейный поиск в массиве
Очень часто требуется найти в массиве заданное значение или определить, что его там нет. Для этого нужно просмотреть все элементы массива с первого до последнего. Как только будет найден элемент, равный заданному значению X, надо завершить цикл и вывести результат. Такой поиск называется линейным.
Сколько операций сравнения придётся выполнить, если в массиве N элементов? В каком случае количество сравнений будет наименьшим? Наибольшим?
Катя торопилась и написала такой алгоритм линейного поиска:
i:=1
нц пока A[i]<>Х i:=i+l
кц
вывод ‘А [‘, i,’] = ‘,X
Проверьте: правильно ли сработает алгоритм, если искать в массиве <1, 2, 3>число 2? Число 4?
Этот алгоритм хорошо работает, если нужный элемент в массиве есть, однако приведёт к ошибке, если такого элемента нет, — получится зацикливание и выход за границы массива. Чтобы этого не произошло, в условие нужно добавить ещё одно ограничение: i
В сложном условии i X первым должно проверяться именно отношение i N, проверка условия А [i] <> X приводит к выходу за границы массива, и программа может завершиться аварийно.
Возможен ещё один поход к решению этой задачи: используя цикл с переменной, перебрать все элементы массива и досрочно завершить цикл, если найдено требуемое значение:
Для выхода из цикла используется оператор выход (в Паскале — break), номер найденного элемента сохраняется в переменной nХ. Если её значение осталось равным нулю (не изменилось в ходе выполнения цикла), то в массиве нет элемента, равного X.
Сортировка массивов
Сортировка — это расстановка элементов списка (массива) в заданном порядке.
Возникает естественный вопрос: зачем сортировать данные? На него легко ответить, вспомнив, например, работу со словарями: сортировка слов по алфавиту облегчает поиск нужной информации.
Для чисел обычно используют сортировку по возрастанию (каждый следующий элемент больше предыдущего) или убыванию (следующий элемент меньше предыдущего). Если в массиве есть одинаковые элементы, их можно расставить по неубыванию (каждый следующий элемент не меньше предыдущего) или невозрастанию.
Математики и программисты изобрели множество способов сортировки. В целом их можно разделить на две группы: 1) простые, но медленно работающие (на больших массивах), и 2) сложные, но быстрые.
Мы изучим один из простых методов, который называется методом выбора. Для примера будем рассматривать сортировку по возрастанию (неубыванию).
Предположим, что мы нашли минимальный элемент массива. Где он должен размещаться в отсортированном массиве?
Запишите в тетради фрагмент программы для поиска номера минимального элемента массива.
Для того чтобы поставить на место минимальный элемент, мы просто поменяем его местами с первым элементом массива.
Запишите в тетради фрагмент программы, который меняет местами элементы А[1] и A[nMin]. Используйте вспомогательную переменную с.
После того как мы установили на место первый (минимальный) элемент, находим минимальный из оставшихся и ставим его на второе место и т. д. Полный алгоритм записывается в виде вложенного цикла:
На первом шаге внешнего цикла значение i равно 1, и мы ставим на первое место минимальный элемент. На следующем шаге i = 2, мы ищем минимальный элемент среди всех, кроме первого, и т. д.
Обратите внимание, что внешний цикл выполняется N-1 раз (а не N). Этого достаточно, потому что если N-1 элементов стоят на своих местах, то последний тоже стоит на своём месте (другого свободного места для него нет).
Решение на языке Паскаль выглядит так:
Что получится, если внешний цикл (по переменной i) выполнить только 1 раз? Только 3 раза?
Выводы
• Поменять местами значения двух элементов массива можно с помощью вспомогательной переменной.
• Выход за границы массива — это обращение к элементу массива с несуществующим индексом.
• Линейный поиск — это перебор всех элементов массива до тех пор, пока не будет найден нужный элемент или не закончится массив.
• Сортировка — это расстановка элементов списка (массива) в заданном порядке. Для чисел обычно используют сортировку по возрастанию (неубыванию) или убыванию (невозрастанию). Данные сортируют для того, чтобы ускорить последующий поиск.
Нарисуйте в тетради интеллект-карту этого параграфа.
Вопросы и задания
1. Что такое выход за границы массива? Что опаснее — чтение или запись данных за границами массива?
2. На какой идее основан метод сортировки выбором?
3. Объясните, зачем нужен вложенный цикл в алгоритме сортировки.
4. Как нужно изменить программу сортировки, чтобы элементы массива были отсортированы по убыванию?
5. Выполните по указанию учителя задания в рабочей тетради.
Подготовьте сообщение
а) «Сортировка методом пузырька»
б) «Сортировка методом вставки»
Источник