Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемАрина Буяльская
1 Массивы
2 Массивы Ввод и вывод массива Максимальный элемент массива Обработка массивов Сортировка массивов Поиск в массиве МассивыВвод и вывод массива Максимальный элемент массива Обработка массивов 2
3 Определения Массив – группа элементов одного типа, объединенных под общим именем.
4 Обычную книгу можно считать своего рода массивом. Почему? Ответ: книга состоит из множества однотипных элементов – страниц, у каждой страницы есть номер (индекс), все страницы объединены под одним названием (название книги)
5 Дом также можно считать массивом. Почему? Ответ: дому соответствует один почтовый адрес (город, улица, номер). Элементами дома можно считать квартиры, у каждой из которых есть номер (индекс).
6 Шахматную доску можно считать массивом. Почему? Доска состоит из клеток, каждая клетка обозначается буквой и цифрой (двойной индекс).
7 Футбольную команду можно считать «массивом». Почему? Ответ: команда состоит из нескольких людей, у каждого из них есть номер (индекс).
8 8 Массивы Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Особенности: все элементы имеют один тип весь массив имеет одно имя все элементы расположены в памяти рядом Примеры: список учеников в классе квартиры в доме школы в городе данные о температуре воздуха за год
9 9 Массивы A массив 3 15 НОМЕР элемента массива (ИНДЕКС) НОМЕР элемента массива (ИНДЕКС) A[1] A[2] A[3] A[4] A[5] ЗНАЧЕНИЕ элемента массива A[2] НОМЕР (ИНДЕКС) элемента массива: 2 ЗНАЧЕНИЕ элемента массива: 10
10 Определения Индекс – что-то (чаще всего номер), что позволяет отличать элементы массива один от другого и обращаться к ним.
11 11 Объявление массивов Зачем объявлять? определить имя массива определить тип массива определить число элементов выделить место в памяти Массив целых чисел: Размер через константу: имя начальный индекс конечный индекс тип элементов тип элементов var A: array[1.. ] of integer; const N=5; N var A : array[ ] of integer ;
12 Описание массивов Массивы описываются в разделе описания переменных (VAR). Общий вид описания: : array [.. ] of ; имя начальный индекс конечный индекс тип элементов тип элементов var A : array[ ] of integer ;
13 Примеры A : array [1..10] of real; Создается массив из действительных чисел (real), с нумерацией от 1 до 10 (всего 10 элементов). M : array [-5..5] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются? Z : array [-8..-1] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются? Mass : array [5..15] of integer; Сколько элементов в этом массиве? Какого они типа? Как они нумеруются?
14 14 Объявление массивов Массивы других типов: Другой диапазон индексов: Индексы других типов: var X, Y: array [1..10] of real; C: array [1..20] of char; var X, Y: array [1..10] of real; C: array [1..20] of char; var Q: array [0..9] of real; C: array [-5..13] of char; var Q: array [0..9] of real; C: array [-5..13] of char; var A: array ['A'..'Z'] of real; B: array [False..True] of integer;... A['C'] := *A['B']; B[False] := B[False] + 1; var A: array ['A'..'Z'] of real; B: array [False..True] of integer;... A['C'] := *A['B']; B[False] := B[False] + 1;
15 15 Что неправильно? var a: array[10..1] of integer;... A[5] := 4.5; var a: array[10..1] of integer;... A[5] := 4.5; [1..10] var a: array ['z'..'a'] of integer;... A['B'] := 15; var a: array ['z'..'a'] of integer;... A['B'] := 15; A['b'] ['a'..'z'] var a: array [0..9] of integer;... A[10] := 'X'; var a: array [0..9] of integer;... A[10] := 'X';
16 16 Массивы Объявление: Ввод с клавиатуры: Поэлементные операции: Вывод на экран: const N = 5; var a: array[1..N] of integer; i: integer; const N = 5; var a: array[1..N] of integer; i: integer; for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; a[1] = a[2] = a[3] = a[4] = a[5] = Почему write ? ? for i:=1 to N do a[i]:=a[i]*2; writeln('Массив A:'); for i:=1 to N do write(a[i]:4); writeln('Массив A:'); for i:=1 to N do write(a[i]:4); Массив A:
17 17 Массивы Объявление: Размер массива: Ввод с клавиатуры: Вывод на экран: var a: array[1..25] of integer; i,n: integer; var a: array[1..25] of integer; i,n: integer; for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; a[1] = a[2] = a[3] = a[4] = a[5] = Write(Введите размер массива); Read(n) Write(Введите размер массива); Read(n) writeln('Массив A:'); for i:=1 to N do write(a[i]:4); writeln('Массив A:'); for i:=1 to N do write(a[i]:4); Массив A:
18 Ввод массива Пусть массив описан так: A : array [1..10] of real; Тогда для ввода массива можно использовать цикл: For i:=1 to 10 do read( A[i] ); Вопрос: почему не repeat или while? Вопрос: как будет выглядеть вывод всех элементов массива? Вывод первой половины массива? Вопрос: как изменится ввод массива, если описание будет таким: A : array [-8..8] of integer;
19 ОБРАБОТКА МАССИВА
20 Использование элемента массива Для использования элемента указывается имя массива и в квадратных скобках индекс этого элемента. Примеры: Read(A[1]); A[3]:=(2 * x + 6) mod 4; A[4]:=(A[1]+A[2]) div A[3]; Допустимые операции определяются типом элемента (элемент массива ничем не отличается от обычной переменной, кроме особенного написания имени).
21 Использование массивов Пример. Опишите алгоритм доставки свежего номера газеты во все квартиры дома, если квартиры нумеруются от 1 до 100.
22 начало Начнем с первой квартиры N=1 Доставим газету в квартиру N Перейдем к следующей квартире (увеличим N на 1) Такая квартира есть? (N<=100) да конец
23 Задача. Дано 5 целых чисел. Опишите алгоритм (программу) нахождения наибольшего среди них.
24 Пример программы без использования массивов 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?
25 Пример программы с использованием массива 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? Вопрос: как изменится программа, если числа будут действительными?
26 Вопросы Что такое массив? Что такое индекс? Как использовать элементы массива в выражениях? В каких случаях использование массива может давать преимущество?
27 Максимальный элемент массива
28 28 Максимальный элемент Задача: найти в массиве максимальный элемент. Алгоритм: Псевдокод: { считаем, что первый элемент – максимальный } for i:=2 to N do if a[i] > { максимального } then { запомнить новый максимальный элемент a[i] } { считаем, что первый элемент – максимальный } for i:=2 to N do if a[i] > { максимального } then { запомнить новый максимальный элемент a[i] } Почему цикл от i=2 ? ?
29 29 Максимальный элемент max := a[1]; { считаем, что первый – максимальный } iMax := 1; for i:=2 to N do { проверяем все остальные } if a[i] > max then { нашли новый максимальный } begin max := a[i]; { запомнить a[i] } iMax := i; { запомнить i } end; max := a[1]; { считаем, что первый – максимальный } iMax := 1; for i:=2 to N do { проверяем все остальные } if a[i] > max then { нашли новый максимальный } begin max := a[i]; { запомнить a[i] } iMax := i; { запомнить i } end; Дополнение: как найти номер максимального элемента? Как упростить? ? По номеру элемента iMax всегда можно найти его значение a[iMax]. Поэтому везде меняем max на a[iMax] и убираем переменную max. a[iMax]
30 30 Программа program qq; const N = 5; var a: array [1..N] of integer; i, iMax: integer; begin writeln('Исходный массив:'); for i:=1 to N do begin a[i] := random(100) + 50; write(a[i]:4); end; iMax := 1; { считаем, что первый – максимальный } for i:=2 to N do { проверяем все остальные } if a[i] > a[iMax] then { новый максимальный } iMax := i; { запомнить i } writeln; {перейти на новую строку} writeln('Максимальный элемент a[', iMax, ']=', a[iMax]); end. program qq; const N = 5; var a: array [1..N] of integer; i, iMax: integer; begin writeln('Исходный массив:'); for i:=1 to N do begin a[i] := random(100) + 50; write(a[i]:4); end; iMax := 1; { считаем, что первый – максимальный } for i:=2 to N do { проверяем все остальные } if a[i] > a[iMax] then { новый максимальный } iMax := i; { запомнить i } writeln; {перейти на новую строку} writeln('Максимальный элемент a[', iMax, ']=', a[iMax]); end. for i:=1 to N do begin a[i] := random(100) + 50; write(a[i]:4); end; for i:=1 to N do begin a[i] := random(100) + 50; write(a[i]:4); end; iMax := 1; { считаем, что первый – максимальный } for i:=2 to N do { проверяем все остальные } if a[i] > a[iMax] then { новый максимальный } iMax := i; { запомнить i } iMax := 1; { считаем, что первый – максимальный } for i:=2 to N do { проверяем все остальные } if a[i] > a[iMax] then { новый максимальный } iMax := i; { запомнить i } случайные числа в интервале [50,150) поиск максимального
31 31 Обработка массивов
32 32 Реверс массива Задача: переставить элементы массива в обратном порядке. Алгоритм: поменять местами A[1] и A[N], A[2] и A[N-1], … Псевдокод: 35…97 79…53 12…N-1N 12… N for i:=1 to N do { поменять местами A[i] и A[N+1-i] } for i:=1 to N do { поменять местами A[i] и A[N+1-i] } сумма индексов N+1 Что неверно? ? N div 2 do
33 33 Как переставить элементы? Задача: поменять местами содержимое двух чашек. Задача: поменять местами содержимое двух ячеек памяти ? ? x y c c := x; x := y; y := c; c := x; x := y; y := c; x := y; y := x; x := y; y := x; Можно ли обойтись без c ? ?
34 34 Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end. program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end. for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end; for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end;
35 35 Циклический сдвиг Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего. Алгоритм: A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N]; Цикл: 3581… …N-1N 581…973 for i:=1 to N-1 do A[i]:=A[i+1]; for i:=1 to N-1 do A[i]:=A[i+1]; Что неверно? ? почему не N ?
36 36 Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end. program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end. c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c; c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c;
38 38 Задания «4»: Заполнить массив из 10 элементов случайными числами в интервале [ ] и найти в нем максимальный и минимальный элементы и их номера. Пример: Исходный массив: максимальный a[4]=10 минимальный a[8]=-10 «5»: Заполнить массив из 10 элементов случайными числами в интервале [ ] и найти в нем два максимальных элемента и их номера. Пример: Исходный массив: максимальные a[4]=10, a[7]=8
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.