Массив.Повторение

advertisement
1
Массивы
Массивы
Массив – это область памяти компьютера, имеющая
уникальное имя и содержащая данные одного
типа.
Особенности:
• все элементы имеют один тип
• весь массив имеет одно имя
• все элементы расположены в памяти рядом
Примеры:
• список учеников в классе
• квартиры в доме
• школы в городе
• данные о температуре воздуха за год
2
* Имя (имя переменной)
* Размер (количество элементов)
* Индекс (номер элемента)
* Тип элемента (все элементы одного типа)
*
4
Массивы
A
массив
1
НОМЕР
элемента массива
(ИНДЕКС)
2
5
10
A[1]
A[2]
33
15
15
4
5
20
25
A[3]
A[4]
ЗНАЧЕНИЕ
A[5]
элемента массива
НОМЕР (ИНДЕКС)
элемента массива: 2
A[2]
ЗНАЧЕНИЕ
элемента массива: 10
5
Объявление массивов
Зачем объявлять?
• определить имя массива
• определить тип массива
• определить число элементов
• выделить место в памяти
Массив целых чисел:
имя
начальный
индекс
конечный
индекс
тип
элементов
var A : array[ 1 .. 5 ] of integer ;
Размер через константу:
const N=5;
var A: array[1.. N ] of integer;
Объявление массивов
Массивы других типов:
var X, Y: array [1..10] of real;
C: array [1..20] of char;
6
7
Массивы
Объявление:
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;
a[1] =
a[2] =
a[3] =
a[4] =
a[5] =
5
12
34
56
13
?
Почему
write?
Поэлементные операции:
for i:=1 to N do a[i]:=a[i]*2;
Вывод на экран:
writeln('Массив A:');
for i:=1 to N do
write(a[i]:4);
Массив A:
10 24 68 112
26
8
Максимальный элемент
массива
Максимальный элемент
Дополнение: как найти номер максимального
элемента?
max := a[1]; { считаем, что первый – максимальный }
pMax := 1;
for i:=2 to N do
{ проверяем все остальные }
if a[i] > a[pMax]
max
then { нашли новый максимальный }
begin
max := a[i];
{ запомнить a[i] }
pMax := i;
{ запомнить i }
end;
?
Как упростить?
По номеру элемента pMax всегда можно найти его
значение a[pMax]. Поэтому везде меняем max на a[pMax]
и убираем переменную max.
9
Программа
program max_mas;
const N = 5;
var a: array [1..N] of integer;
i, pMax: integer;
begin
случайные числа в
writeln('Исходный массив:');
интервале [50,150)
for
for i:=1
i:=1 to
to NN do
do begin
begin
a[i]:=:=random(100)
random(100)+ +50;
50;
a[i]
поиск
write(a[i]:4);
write(a[i]:4);
максимального
end;
end;
pMax
pMax :=
:= 1;
1; {{ считаем,
считаем, что
что первый
первый –– максимальный
максимальный }}
for
{{ проверяем
for i:=2
i:=2 to
to NN do
do
проверяем все
все остальные
остальные }}
if
if a[i]
a[i] >> a[iMax]
a[pMax] then
then {{ новый
новый максимальный
максимальный }}
iMax := i;pMax := i; { запомнить
i }
{ запомнить
i }
writeln; {перейти на новую строку}
writeln('Максимальный элемент a[', pMax, ']=', a[pMax]);
end.
10
* Алгоритм
«Поиск
максимума/минимума
и его места
в последовательности»
(массиве)
Задача:
Данные о росте учащихся в классе
вводятся в соответствии со
списком в журнале. Определить
рост самого высокого ученика и его
номер в журнале.
*Программа:
program max_1;
const r =100;
var a:array[1..r] of integer; i, imax, n: byte;
begin
writeln ('klass='); readln(n); {кол-во учащихся}
imax:=1; {номер 1-го ученика в журнале}
for i:=2 to n do
if a[i]>a[imax] then imax:=i; {номер в журнале
самого высокого}
write(‘макс. рост =', a[imax],
‘ у ученика N=‘, imax);
end.
*Алгоритм
«Поиск количества
максимумов/минимумов
в последовательности»
Задача:
Дана последовательность из
n натуральных чисел. Сколько
самых маленьких чисел в
последовательности?
program kol_min;
const r =100;
var a:array[1..r] of integer; i, imin, n, k: byte;
begin
writeln ('n='); readln(n); {количество чисел
в последовательности <100}
imin:=1;
k:=1;
{начальное значение количества
минимумов}
for i:=2 to n do
if a[i]<a[imin] then
begin
imin:=i; {место нового минимума}
k:=1;
{и его количество}
end
else
if a[i]=a[imin] then inc(k); {подсчет
количества минимумов}
writeln('min=',a[imin],' k=',k);
end.
*Алгоритм
«Поиск 2-х
максимумов/минимумов
в последовательности»
Задача:
Дана последовательность из
n натуральных чисел. Найдите два
самых маленьких числа в этой
последовательности?
program min_2;
const n=10;
var a:array[1..n] of integer; i, imin1, imin2: byte;
Begin
Imin1:=1; imin2:=1;
for i:=2 to n do
if a[i]<a[imin1] then
begin
imin2:=imin1; {новый второй минимум}
imin1:=i;
{новый первый минимум}
end
else if a[i]<a[imin2] then imin2:=i; {новый 2-ой
минимум}
writeln('min1=',a[imin1],' min2=',a[imin2]);
end.
*Проверка
Начальное
Ввод элементов
a[2]
значение
8
Min1
5
Min2
5
5
5
-5
-5
5
0
-5
0
-10
-10
-5
Download