Одномерные массивы 1. Описание. 2. Заполнение и вывод. 3. Работа с элементами массива. Разминка Проследите, как меняются числа в каждом ряду, и продолжите каждый их рядов, вписав еще 4 числа . •6,9,12,15,18… •16, 17, 18, 26, 27, 28, 36, 37, 38… •1, 1, 2, 3, 5, 8… •1, 8, 27, 64, 125… Упражнения, повторение Найти сумму пяти целых чисел. Program PR1; Uses Crt; Var a1, a2, a3, a4, a5, s: Integer; Begin ClrScr; Writeln (‘Введите пять целых чисел ‘); Readln (a1, a2, a3, a4, a5); s:= a1+a2+a3+a4+a5; Writeln (‘Их сумма равна ‘, s); Readln End. Упражнения Найти сумму трёхсот целых чисел. Очевидно, что решение задачи с помощью линейного алгоритма очень громоздко. Выход – найти решение с помощью циклического алгоритма и нового типа данных. Новый материал Понятие массива. Как описывается в программе? Как заполняются массивы? Понятие «массив» Массив – это составной объект, образованный из элементов (компонент) одного и того же типа(в том числе и структурированного). Такой тип данных применяется в программировании для обозначения объектов, аналогичных числовым последовательностям в математике. Одномерный массив Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер. Описание одномерного массива Описание массива производится согласно схеме: Var имя массива: array [n..m] of порядковый тип данных; Чего не хватает в описании? i:порядковый тип данных; Порядковый тип данных - областью его значений являются элементы, которые можно пронумеровать. Пример: Целый, логический, символьный. Размерность массива Размерность массива равна: максимальное значение индекса – минимальное значение индекса + 1. Восстановите условие задачи Program PR2; Const n=30; {n – количество элементов в массиве} Var A: Array[1..n] Of Integer; s, i: Integer; Begin Writeln (‘Введите ‘, n, ‘чисел ‘); For i:=1 To n Do Readln (A[i]); s:=0; For i:=1 To n Do s:=s+A[i]; Writeln (‘Их сумма равна ‘, s); Readln End. Способы заполнения массивов Первый способ заполнения массива – это заполнение с клавиатуры. Второй способ заполнение массива – это заполнение с помощью генератора случайных чисел. Этот способ удобен, когда в массиве много элементов, а их точные значения не слишком важны. Способы заполнения массивов Третий способ заполнения – с помощью ввода данных из файла. Этот способ требует знания правил файлового ввода/вывода в Турбо Паскале, что будет рассмотрено позже. Заполнение массива случайными числами из диапазона Program PR3; Const n=30; dd=30; Var A: Array[1..n] Of Integer; i: Integer; Begin Randomize; Writeln (‘Формирование значений элементов массива A’); For i:=1 To n Do A[i]:=-30+Random (dd); Writeln (‘вывод’); For i:=1 To n Do Write (A[i]:3); Readln End. Обращение к элементам массива • По номеру: F[1] • В общем виде : F[i], i – номер элемента в массиве, чаще всего задается в цикле FOR…TO(DOWNTO)…DO: FOR i:=n TO m DO (n<=m) FOR i:=m DOWNTO n DO (m>=n) Типы задач для одномерных массивов •Поиск элемента с заданными свойствами или его номера. •Поиск суммы элементов или номеров элементов массива. •Поиск максимального или минимального элемента массива. •Перестановка элементов массива. •Удаление элементов массива. •Вставка элементов массива. •Сортировка массива. Практическая работа №1 Во всех вариантах предусматривается, что массив заполняется случайным образом. В нем могут быть как отрицательные, так и положительные числа целые числа. Размерность массива не более 15. Работа с элементами массива (разбор одной из задач практической работы) Найти сумму элементов массива, кратных заданному числу. Program PR4; Const n=30; dd=30; Var A: Array[1..n] Of Integer; k, s, i: Integer; Begin Randomize; Writeln (‘Формирование значений массива’); For i:=1 To n Do A[i]:=-30+Random (dd); For i:=1 To n Do Write (A[i]:3); Writeln; Writeln (‘Введите число ‘); Readln (k); s:=0; For i:=1 To n Do If A[i] mod k=0 Then s:=s+A[i]; {если элемент кратен k, то прибавляем его к сумме} Writeln (‘Сумма = ‘, s); Readln End. Работа с элементами массива Один из типов задач : Есть ли в массиве элементы с данным свойством, или найти первый (последний) элемент, отвечающий заданным условиям. Задание: Определить номер отрицательного элемент (первого или последнего) в массиве. Решение (без использования цикла FOR): A i 10 3 0 1 2 3 1 7 … 5 A 2 1 4 5 … n i 1 2 12 -4 3 4 … 3 … n Начнем просматривать массив с первого элемента (i=1). Пока не просмотрен последний (i<=n) и не найден отрицательный (A[i]>=0), будем переходить к следующему (Inc(i)). Решение(продолжение): Таким образом, мы закончим просмотр в одном их двух случаев: первый – просмотрели все элементы и не нашли отрицательного, тогда i>n, второй – нашли нужный, при этом i<=n. Program PR5; Const n=30; dd=30; Var A: Array[1..n] Of Integer; i: Integer; Begin Randomize; Writeln (‘Формирование значений элементов массива A’); For i:=1 To n Do A[i]:=-30+Random (dd); For i:=1 To n Do Write (A[i]:3); Writeln; i:=1; While (i<=n) And (A[i]>=0) Do Inc (i); Writeln (‘номер искомого элемента= ’, i); Readln End. Составьте алгоритм A 3 -7 12 5 -3 … 8 i 1 2 3 4 5 … n Найти номер последнего отрицательного элемента массива. Program PR7; Const n=30; dd=30; Var A: Array[1..n] Of Integer; i: Integer; Begin Randomize; Writeln (‘Формирование элементов массива ’); For i:=1 To n Do A[i]:=-30+Random (dd); For i:=1 To n Do Write (A[i]:3); Writeln; i:=n; While (i>=1) And (A[i]>=0) Do Dec (i); Writeln (‘номер искомого элемента = ’, i); Readln End. Самостоятельная работа 1. Дан массив целых чисел. Найти элементы массива, принадлежащих промежутку от q до t, вводимых с клавиатуры. 2. Дан массив целых чисел. Найти номера элементов, которые кратны 3 и 5. 3. Дан массив целых чисел. Найти количество положительных элементов, которые не превосходят по модулю данное число r. 4. Найти целую часть среднего арифметического значения элементов целочисленного массива. Домашнее задание 1. Подсчитать среднее арифметическое четных элементов целочисленного массива. 2. Решить задачу №1 для элементов массива, стоящих на нечетных местах. 3. Подсчитать количество пар соседних элементов целочисленного массива, в которых предыдущий элемент больше последующего. Источники 1. festival.1september.ru/articles/517613/ 2. Задачи по программированию /С.М. Окулов и др./ - М., БИНОМ, 2006 3. Огнёва М.В., Кудрина Е.В Turbo Pascal: первые шаги. Примеры и упражнения – Саратов, «Научная книга», 2008