Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемИван Клокачев
1 Одномерные массивы
2 Определения Массив – группа элементов одного типа, объединенных под общим именем. Индекс – что-то (чаще всего номер), что позволяет отличать элементы массива один от другого и обращаться к ним.
3 Обычную книгу можно считать своего рода массивом. Почему? Ответ: книга состоит из множества однотипных элементов – страниц, у каждой страницы есть номер (индекс), все страницы объединены под одним названием (название книги)
4 Дом также можно считать массивом. Почему? Ответ: дому соответствует один почтовый адрес (город, улица, номер). Элементами дома можно считать квартиры, у каждой из которых есть номер (индекс).
5 Шахматную доску можно считать массивом. Почему? Доска состоит из клеток, каждая клетка обозначается буквой и цифрой (двойной индекс).
6 Футбольную команду можно считать «массивом». Почему? Ответ: команда состоит из нескольких людей, у каждого из них есть номер (индекс).
7 Описание массивов Массивы описываются в разделе описания переменных. Общий вид описания: : array [.. ] of ; Примеры: A : array [1..10] of real; Создается массив из действительных чисел (real), с нумерацией от 1 до 10 (всего 10 элементов).
8 Примеры M : array [-5..5] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются? Z : array [-8..-1] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются? Mass : array [5..15] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются?
9 Использование элемента массива Для использования элемента указывается имя массива и в квадратных скобках индекс этого элемента. Примеры: Read(A[1]); A[3]:=(2 * x + 6) mod 4; A[4]:=(A[1]+A[2]) div A[3]; Допустимые операции определяются типом элемента (элемент массива ничем не отличается от обычной переменной, кроме особенного написания имени).
10 Использование массивов Пример. Опишите алгоритм доставки свежего номера газеты во все квартиры дома, если квартиры нумеруются от 1 до 100.
11 начало Начнем с первой квартиры N=1 Доставим газету в квартиру N Перейдем к следующей квартире (увеличим N на 1) Такая квартира есть? (N<=100) да конец
12 Ввод массива Пусть массив описан так: A : array [1..10] of real; Тогда для ввода массива можно использовать цикл: For i:=1 to 10 do read( A[i] ); Вопрос: почему не repeat или while? Вопрос: как будет выглядеть вывод всех элементов массива? Вывод первой половины массива? Вопрос: как изменится ввод массива, если описание будет таким: A : array [-8..8] of integer;
13 Задача. Дано 5 целых чисел. Опишите алгоритм (программу) нахождения наибольшего среди них.
14 Пример программы без использования массивов program Maximum; var a,b,c,d,e : integer; begin read(a,b,c,d,e); if (a>=b) and (a>=c) and (a>=d) and (a>=e) then write(a); if (b>=a) and (b>=c) and (b>=d) and (b>=e) then write(b); if (c>=a) and (c>=b) and (c>=d) and (c>=e) then write(a); if (d>=a) and (d>=b) and (d>=c) and (d>=e) then write(a); if (e>=a) and (e>=b) and (e>=c) and (e>=d) then write(a); end. Вопрос: как изменится программа, если чисел станет 10? Вопрос: как изменится программа, если чисел станет 1000?
15 Пример программы с использованием массива program Maximum; var A :array [1..5] of integer; i, max : integer; begin for i:=1 to 5 do read( A[i] ); max:= A[1]; for i:=2 to 5 do if A[i] > max then max:= A[i]; write(max); end. Вопрос: как изменится программа, если чисел станет 10? Вопрос: как изменится программа, если чисел станет 1000? Вопрос: как изменится программа, если числа будут действительными?
16 Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных одним именем, причем каждый элемент имеет свой уникальный номер, и номера элементов идут подряд.
17 Введем 30 целых чисел от 25 до 54 и объединим их общим именем А. Имя А – общее имя для всех элементов. Элементы массива – целые числа, их 30. Опишем в разделе типов свой тип – одномерный массив, состоящий из 30 целых чисел. А ……
18 Type myarray = Array [1..30] Of Integer; Здесь myarray – это имя нового типа; Array – служебное слово (в переводе с английского означает «массив», «набор»); [1..30] – в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива; в этом примере первый элемент имеет номер 1, а последний – номер 30; Of – служебное слово (в переводе с английского означает «из»); Integer – тип всех элементов массива.
19 Program Example_16; Const n=30; {n – количество элементов в массиве} Type Myarray=Array[1..n] Of Integer; Var A: Myarray; 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.
20 Способы заполнения массивов Первый способ заполнения одномерного массива – это заполнение с клавиатуры.
21 Второй способ заполнения одномерного массива – это заполнение с помощью генератора случайных чисел. Этот способ удобен, когда в массиве много элементов, а их точные значения не слишком важны.
22 Программа Program Example_17; Const n=30; dd=51; {dd – используется в генераторе случайных чисел} Type Myarray=Array[1..n] Of Integer; Var A: Myarray; i: Integer; Begin Randomize; Writeln (Формирование значений элементов массива A); For i:=1 To n Do A[i]:=-25+Random (dd); Writeln (вывод); For i:=1 To n Do Write (A[i]:3); Readln End.
23 Работа с элементами массива Нахождение суммы элементов. Пример 3. Найти сумму элементов массива, кратных заданному числу.
24 Program Example_18; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; k, s, i: Integer; Begin Randomize; Writeln (Формирование значений элементов массива); For i:=1 To n Do A[i]:=-25+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.
25 Нахождение номеров элементов, обладающих заданным свойством Пример 4. Найти номера четных элементов. Решение: Необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то вывести его номер.
26 Program Example_19; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; k, s, i: Integer; Begin Randomize; Writeln (Формирование значений элементов массива A); For i:=1 To n Do A[i]:=-25+Random (dd); For i:=1 To n Do Write (A[i]:3); Writeln; For i:=1 To n Do If A[i] mod 2=0 Then Write (i =, i); Readln End.
27 Есть ли в массиве элементы с данным свойством, или найти первый (последний) элемент, отвечающий заданным условиям Пример 5. Есть ли отрицательный элемент в массиве?
28 Решение: A …5 i 12345…n Начнем просматривать массив с первого элемента (i=1). Пока не просмотрен последний (i =0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр в одном их двух случаев: первый – просмотрели все элементы и не нашли отрицательного, тогда i>n, второй – нашли нужный, при этом i<=n. Опишем переменную с, значение которой истина (True), если в массиве есть отрицательный элемент, и ложь (False), если его нет. A …3 i 1234…n
29 Program Example_20; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; i: Integer; c: Boolean; Begin Randomize; Writeln (Формирование значений элементов массива A); For i:=1 To n Do A[i]:=-25+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); c:=(i<=n); Writeln (c =, c); Readln End.
30 Пример 6. Найти номер последнего отрицательного элемента массива. Решение: Последний отрицательный – это первый отрицательный элемент, который встретится при просмотре массива с конца. Если очередной элемент не является отрицательным, то нужно уменьшить значение текущего индекса, пока он не станет меньше номера первого элемента или не будет найден отрицательный элемент. Договоримся, что если в массиве нет отрицательного элемента, значение результата будет равно 0. A …8 i12345…n
31 Program Example_21; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; c, i: Integer; Begin Randomize; Writeln (Формирование значений элементов массива ); For i:=1 To n Do A[i]:=-25+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); c:= i; Writeln (номер искомого элемента =, c); Readln End.
32 Нахождение количества элементов, обладающих заданным свойством Пример 7. Найти количество положительных и отрицательных элементов в данном массиве. Решение: Суть основного изменения программы заключается во введении двух переменных (счетчиков – k1, k2) для хранения значений количества положительных и отрицательных элементов в массиве соответственно.
33 Найдите самостоятельно местонахождение в программе следующих строк программного кода: k1, k2: Integer; k1:=0; k2:=0; If A[i]>0 Then Inc(k1) Else If A[i]<0 Then Inc(k2); Writeln (k1=, k1:4, k2=, k2:4);
34 Program Example_22; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; k1, k2, i: Integer; Begin Randomize; Writeln (Формирование значений элементов массива A); For i:=1 To n Do A[i]:=-25+Random (dd); For i:=1 To n Do Write (A[i]:3); Writeln; k1:=0; k2:=0; For i:=1 To n Do If A[i] > 0 Then Inc(k1) Else If A[i] < 0 Then Inc(k2); Writeln (k1=, k1:4, k2=, k2:4); Readln End.
35 Program Example_22_m; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; pol, otr, i: Integer; Procedure Init (Var m: myarray); Var i: Integer; Begin For i:=1 To n Do m[i]:=-25+Random (dd) End; Проектирование программы с использованием процедур
36 Procedure Print (m: myarray) Var i: Integer; Begin For i:=1 To n Do Write (m[i]:4); Writeln; End; Procedure Quantity (m: myarray; Var k1, k2: Integer); Var i: Integer; Begin k1:=0; k2:=0; For i:=1 To n Do If m[i] > 0 Then Inc(k1) Else If m[i] < 0 Then Inc(k2); End;
37 Begin Randomize; Init (A); {обращение к процедуре заполнения массива} Print (A); {обращение к процедуре вывода массива на экран} Quantity (A, pol, otr); Writeln (pol =, pol:4, otr =, otr:4); Readln End.
38 Program Example_22_m; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; pol, otr, i: Integer; Procedure Init (Var m: myarray); Var i: Integer; Begin For i:=1 To n Do m[i]:=-25+Random (dd) End; Procedure Print (m: myarray) Var i: Integer; Begin For i:=1 To n Do Write (m[i]:4); Writeln; End; Procedure Quantity (m: myarray; Var k1, k2: Integer); Var i: Integer; Begin k1:=0; k2:=0; For i:=1 To n Do If m[i] > 0 Then Inc(k1) Else If m[i] < 0 Then Inc(k2); End; Begin Randomize; Init (A); {обращение к процедуре заполнения массива} Print (A); {обращение к процедуре вывода массива на экран} Quantity (A, pol, otr); Writeln (pol =, pol:4, otr =, otr:4); Readln End.
39 Третий способ заполнения массива – чтение элементов массива из файла. Пусть в файле PP.DAT на диске А записано несколько строк, а в каждой из них по 30 целых чисел. Тогда вся программа может быть такой:
40 Program Example_23; Const n=30; dd=51; Type Myarray=Array[1..n] Of Integer; Var A: Myarray; F: Text; Procedure Init2 (Var m: myarray); Var i: Integer; Begin For i:=1 To n Do Read (f, m[i]) {Чтение из файла очередного числа} End; Procedure Print (m: myarray) Var i: Integer; Begin For i:=1 To n Do Write (m[i]:4); Writeln; End;
41 Begin {Связываем файловую переменную с файлом на диске} Assign (F, A:\PP.DAT); Reset (F); {Открываем файл для чтения} While Not EOf (F) Do {Пока не достигнут конец файла} Begin {Считываем очередную строку} Init2 (A); {Обращение к процедуре заполнения массива} Print (A); {Обращение к процедуре вывода} Readln (F) {Переходим к следующей строке файла} End; Readln End.
43 Задача 1. Определить пару соседних элементов с суммой, равной заданному числу. Задача 2. Определить, сколько элементов массива превосходят по модулю заданное число D. Задача 3. Есть ли две пары соседних элементов с одинаковыми знаками? Задача 4. Есть ли в данном массиве два соседних положительных элемента. Найти номера элементов, образующих первую пару.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.