Загрузил loralora2009

Массивы

реклама
Презентация по программированию
Автор: учитель информатики
МОУ Плесской СОШ
Юдин А.Б.
2012 год
Определение
1
Массив – пронумерованная совокупность ячеек
памяти, названная одним именем
1
2
3
4
5
6
7
44 22 10 Индекс
11 14 30 19
Имя массива
(порядковый
номер) элемента
массива
А
A [ 4 ] := 11;
Значение
элемента
массива
Описание массива
2
Объявление массива в разделе описания
переменных:
Var имя:ARRAY[1..N] OF тип;
Например:
Имя массива
Количество Тип элементов
элементов
Var A:Array[1..10] of Integer;
Var Tem:Array[1..100] of Real;
Описание массива
3
Количество элементов можно
описать в разделе констант
Const
m=10;
Var a : array [1.. m] of integer;
Иногда массив объявляют
как пользовательский тип
данных
Type t=array[1..10] of integer;
Var a : t;
Описание массива
Сonst a:array[1..5] of integer =
(3,-2,1,4,3);
Массив констант
Var R:Array [-20..20] of Real;
Var N:Array ['A'..'Z'] of Integer;
В зависимости от задачи индексы
элементов могут начинаться не только с
единицы или быть символьного типа
4
Заполнение массива
1. Заполнение массива с клавиатуры
For i:=1 to N do begin
Write(' a [ ' , i , ' ] = ' );
ReadLn ( a [ i ] );
End;
i , 1, N
Ввод a i
5
Заполнение массива
6
2. Заполнение массива случайными числами.
For
i:=1 to
N do begin (А)
Например:
m[i]:=RANDOM
Случайное
число
8).
a[i]:=Random(B-A)+A;
случайное
числоизизинтервала
интервала[-5
[0;; А)
А = - 5, m[i]
В
=
8,
:=RANDOM(B-A)+A;
WriteLn(a[i]:10:5);
подставим
вчисло
формулу
случайное
из
интервала
[A
;
B)
End;
m[i] :=RANDOM(B-A)+A;
m[i] :=RANDOM(B-A+1)+A;
i , 1, N
m[i]
:=RANDOM(8-(-5))+(-5);
случайное
число из интервала [A ; B]
a i = случайное [A ; B)
такую запись нужно упростить
m[i] :=RANDOM(13)-5;
Вывод a i
Заполнение массива
7
3. Заполнение массива при помощи прогрессии.
Заполнить массив числами 3,5,7,9,11 и т.д.
a[1]:=3;
На первом месте стоит 3
Writeln(a[1]);
На втором 3+2 = 5
a1 = 3
For
i:=2
to
N
do
begin
На третьем 5+2 = 7 и т.д.
Вывод a
a[i]:=a[i-1] + 2;
То есть ai = ai - 1 + 2
Writeln(a[i]:5);
Это арифметическая прогрессия.i , 2, N
End;
1
ai = ai-1 + 2
Вывод a i
Вывод массива
8
а) в столбик:
For i:=1 to N do Writeln(a[i]:4:2);
б) в строку
For i:=1 to N do Write(a[i]:4:2);
i , 1, N
2.23
Вывод a i
2.23
3.19
1.44
4.93
5.58
3.19 1.44 4.93 5.58
Вывод массива в две строки
9
var
A:array
[1..10]массив
of integer;
Задача
1. Заполнить
из 10 элементов случайными
Оператор
выводана экран, а
i:integer;
числами
из интервала от -10
до 10, вывести
без LN, вывод
затем
элемент
массива на 1 и
Begin увеличить каждый осуществляется
в
Пустой
оператор
повторно
вывести на экран.
Clrscr;
строку
вывода с LN, когда
for
i:=1 to
10 do begin
первая
строка
закончена, переходa[i]:= random(21)-10;
на вторую
write(a[i]:5);
Оператор вывода
end;
без LN, вывод
writeln;
осуществляется в
for i:=1 to 10 do begin
строку
a[i]:=a[i]+1;
write(a[i]:5);
end;
end.
Вывод массива в две строки
Начало
i , 1, 10
10
Пустой Writeln между
циклами обычно в блоксхеме не изображают.
1
a i = случайное [-10 ; 10]
Вывод a i
i , 1, 10
ai= a i + 1
1
Разрыв блок-схемы,
если она целиком на
лист не убирается
Вывод a i
Конец
Заполнение массива
11
Составить
Program
n2; программу заполняющую массив из
10 элементов, числовой последовательностью:
Uses
Crt;
1,4,9,16…
var
a:array[1..10]
of integer;
2)
(где A
=
i
i
Значение элемента массива
i:integer;
зависит только от
begin
порядкового номера
clrscr;
for i:=1 to 10 do begin
a[i]:=i*i;
write(a[i]:5);
end;
end.
Задача 2.
Заполнение массива
Задача
3. Составить программу заполняющую
Uses Crt;
массив
из 10 элементов,
числовой
var a:array[1..10]
of integer;
последовательностью:
2, 3, 5, 9, 17 и т.д.
i:integer;
begin
Значение элемента массива
clrscr;
зависит от предшествующего
элемента
a[1]:=2;
write(a[1]:5);
for i:=2 to 10 do begin
a[i]:=2*a[i-1]-1;
write(a[i]:5);
end;
end.
12
Обработка массива
13
Изменение элементов массива удовлетворяющих
условию
For i:=1 to N do If (условие) then a[i]:=значение:
Изменения:
Условия:
aa[ [i i] ]:=5
> 0––заменить
положительный
i-ый элемент
элемент
на массива
число 5
aa[ [i i] ]:=Mod
- a [2i =] –0 заменить
– четный i-ый
элемент
элемент
массива
на
противоположный
a [ i ] = int(a [ i ]) – целый
по знаку
элемент массива
aa[ [i i] ]:== ai –[ iэлемент
] * 2 – удвоить
массивакаждый
равен своему
элемент
массива
порядковому номеру
ai [Mod
i ] :=2a=[ 0i -–1]+3
четные
–заменить
порядковые
i-ый элемент
номера
предшествующим
a [ i ] = К – элемент
плюс
массива
3
равный числу К
Обработка массива
14
Блок-схема
обработки
и вывода
обработки
массива
Цикл Блок-схема
обработки
и вывода
элементов
массива
в одном
цикле
на экран
For i:=1 to N do i begin
, 1, N i , 1, N
If (условие) then a[i]:=значение:
да
нет
Writeln(a[i]:5);
условиеусловие
ai = значение
end;
да
нет
ai a=i значение
Вывод
Нахождение суммы и произведения элементов массива
15
Нахождение суммы элементов массива
удовлетворяющих условию:
Предполагаем, что
сумма равна нулю
s:=0;
For i:=1 to N do If (условие) then s:=s+ a[i];
Если элемент подходит
WriteLn ('Сумма = ', s:10:5);
по условию, добавляем
НахождениеПредполагаем,
произведения
элементов
массива
что
его
к произведению
удовлетворяющих
условию:
Если
элемент
подходит
произведение
равно
по условию, добавляем
единице
p:=1;
его к сумме
For i:=1 to N do If (условие) then p:=p* a[i];
WriteLn('Произведение = ', p:10:5);
Подсчет количества элементов удовлетворяющих условию
16
Подсчет количества
элементов
удовлетворяющих
Предполагаем,
что
условию:
таких элементов
нет
k:=0;
For i:=1 to N do If (условие) then k:=k+1;
WriteLn('Кол-во=',k:10);
Если такой элемент
есть, то К
увеличиваем на 1.
k := 0
i , 1, N
условие
нет
Вывод k
да
k := k + 1
Нахождение суммы элементов массива
Дан массив из 15 целых чисел заполненный
случайными числами из интервала [0; 20]. Выведите
этот массив в строку и найдите количество четных
элементов массива, которые меньше среднего
арифметического его элементов.
Задача 4.
что
Организуем
цикл из
ClrScr; Предполагаем,
Определяем
число
сумма равна нулю
15 повторений
случайным образом
s:=0;
For i:=1 to 15 do begin
a[i]:=Random(21);
Добавляем
write (a[i]:10);
к сумме
Выводим его на
S:=S+a[i];
экран
end;
17
Нахождение суммы элементов массива
Находим среднееВыводим его на
экран
арифметическое
Writeln;
s:=s/15; Предполагаем, что
таких элементов
нет цикл из
Организуем
Writeln('Среднее арифметическое
= ',s:10:5);
15 повторений
18
k:=0;
For i:=1 to 15 do
if (a[i] Mod 2 = 0) and (a[i]<s) then k:=k+1;
Writeln('Четных чисел меньших среднего
арифметического ', k:8); Если элемент четный и
меньше среднего
Выводим К на экран арифметического,
увеличиваем К на единицу
Максимальный и минимальный элемент массива
19
Нахождение максимального элемента в массиве
и его номера:
Предполагаем,
Если что
находится
наибольший
элемент
больший
элемент
стоит на первом месте
max:=a[1];
k:=1;
for i:=2 to N do if (a[i]>max) then begin
Когда массив
max:=a[i];
закончился, выводим
наибольший элемент Он становится
k:=i;
максимальным
и его номер
end;
WriteLn(‘Max=’,max:10:5);
WriteLn(‘Номер=’,k:5);
Максимальный и минимальный элемент массива
20
Иногда в задаче достаточно определить индекс
наибольшего
элемента
Предполагаем,
что
наибольший элемент стоит
на первом месте
max:= 1;
for i:=2 to N do if a[i] > a[max] then max:=i;
writeln('Максимальный элемент ',а[max]);
Если i-ыйто,
элемент
больше
запоминаем
writeln('Его номер стоящего
', Max);на месте max его индекс в
переменной max
Сортировка массива
21
Сортировка элементов массива по возрастанию
Перебираем элементы
от первого до
предпоследнего
For i:=1 to N-1 do
For j:=i to N do
if (a[i]>a[j]) then begin
p:=a[i];
Перебираем от i-ого
элемента до конца
a[i]:=a[j];
массива:
Если в оставшейсяСортировкаa[j]:=p;
4; -2; 6; -5
строке находится
end;
по возрастанию с
элемент меньше чем
изменениями
i-ый …
То меняем их
происходящими в массиве
местами
Сортировка массива
22
i, 1, N-1
j, i, N
Нет
ai>aj
Да
p=ai
ai=aj
aj=p
Общая идея алгоритма:
1. Берем i-ый элемент
2. Последовательно
сравниваем его со всеми
элементами с права
3. Если находится элемент
меньший чем i-ый, то они
меняются местами
4. Так на i-ом месте
окажется самый
маленький элемент
5. i увеличиваем на единицу
и повторяем процесс…
Сортировка массива
23
Упорядочить по возрастанию: 4 -2 6 -5
i
ai
j
aj
ai>aj
1
1
1
1
2
2
2
3
3
4
4
-2
-2
4
4
4
6
6
1
2
3
4
2
3
4
3
4
4
-2
6
-5
4
6
-2
6
4
4>4 нет
4> -2 да
-2 > 6 нет
-2 > -5 да
4>4 нет
4>6 нет
4> -2 да
6>6 нет
6>4 да
Массив
4 -2
-2 4
-2 4
-5 4
-5 4
-5 4
-5 -2
-5 -2
-5 -2
6 -5
6 -5
6 -5
6 -2
6 -2
6 -2
6 4
6 4
4 6
Вставка и удаление элементов массива
24
Вставка элемента с номером p в последовательност
For i:=N downto p do a[i+1]:=a[i];
a[p]:=значение;
Перебираем элементы
от последнего
места
За каждыйдо
оборот
N:=N+1;
На место с индексом Р
100
нацикла
которое
нужно
смещаем
ставим нужное
значение
и
вставить,
элементы
на один
увеличиваем
1
номер в на
право.
количество элементов
9 12 11 14 7
p
N
Вставка и удаление элементов массива
25
Удаление элемента с номером p из массива:
for i:=p to (N-1) do a[i]:=a[i+1];
N:=N-1;
Перебираем элементы от За каждый оборот
Уменьшаем на 1
места которое удаляем до цикла смещаем
количество элементов
предпоследнего элемента элементы на один
номер в лево.
100
p
9 12 11 14 77
N
Выбор элементов массива в другой массив
Вставка элементов удовлетворяющих условию в другой
массив. Пусть нам дан массив с именем А, а переместить
То, В
увеличиваем
элементы нужно в массив
количество
Порядковый номер
элемента в массиве В элементов в В, и под
Если элемент
из Аиндексом
этим
удовлетворяет
помещаем элемент
условию
из А
j:=0;
For i:=1 to N do
if (а[i]…) then begin
j:=j+1;
b[j]:=a[i];
Количествоend;
элементов в массиве В
будет равно последнему порядковому
K:=j;
номеру перенесенного элемента
26
Проверка массива
27
разность
Дан массивНаходим
из
10
целых,
положительных
не
Предполагаем,
что от
// заполнить массив между
первым и цикл
Организуем
повторяющихся чисел. Проверить
образуют ли его
массив
–
вторым
элементом
r:= a[2]-a[1];
второго до
элементы
арифметическую
прогрессию.
Если
арифметическая
предпоследнего
flag:=true;
прогрессия
образуют, то вывести разность
прогрессии.
элемента
Задача 5.
For i:=2 to 9 do if (a[i+1]-a[i]<>r) then flag:=false;
If flag then Begin
Если находится
Writeln('Арифметическая
прогрессия');
Иначе
–
выводим
пара
элементов,
у
Если значение
Writeln('Разность
= ',r:8);
соответствующее
которых другая
истинно
сообщение
разность, то это не
End
Тоарифметическая
выводим разность
else
и соответствующее
прогрессия
сообщение
Writeln('Не арифметическая
прогрессия');
Проверка массива
28
Начало
Условие проверяющее
Заполнение
массива
изменилась
лии
вывод
его на экран
переменная
Flag
1
Да
flag=true
Нет
r:= a2-a1;
flag:=true
Вывод:
Прогрессия
Вывод:
Не прогрессия
i, 2, 9
Нет
Конец
ai+1-ai ≠ r
Да
flag:=false
1
Цикл в котором
проверяется разность
между соседними
элементами
Поиск элемента
29
Дан массив из 10 случайных чисел из
интервала от -10 до 10. Найти номер первого
отрицательного элемента (Он обязательно существует)
Задача 6.
Пока элемент массива
положителен или ноль
берем следующий
элемент
// заполнить массив
i:=1;
while (a[i]>=0) do i:=i+1;
write('Первое отрицательное ',a[i]:4);
Заполнение массива
30
Заполнить массив из 10 элементов случайными
числами из интервала [0; 10), так, чтобы числа не
повторялись.
Задача 7.
For i:=1 to 10 do
Цикл отвечающий
begin
за количество
чисел
Цикл возвращающий
в массиве
repeat
процесс
назад если
flag:=false;
такое число уже
было
a[i]:=random(10);
for j:=1 to i-1 do if a[i]=a[j] then flag:=true;
until flag=false;
write(a[i]:5); Цикл в котором проверяется не
встречалось ли такое число
end;
Заполнение массива
31
i,1,10
flag=false
a i = случайное[0;10)
j, 1, i-1
Да
ai=a j
flag=true
Цикл
отвечающий
за количество
Цикл
чисел в
возвращающий
массиве
процесс назад
если такое число
уже было
Нет
Нет
flag=false
Да
Вывод
ai
Цикл в котором проверяется
не встречалось ли такое
число
Скачать