Массив
Массив - это поименованная совокупность однотипных элементов, упорядоченных по индексам, определяющим положение элемента в массиве.
Одномерный массив
Индекс элемента массива
Значение элемента массива
3
5
6
7
8
9
1
4
2
3
6
1
4
-2
0
-5
7
9
Решение разнообразных задач, связанных с обработкой массивов, базируется на решении таких типовых задач, как:
- суммирование элементов массива;
- поиск элемента с заданными свойствами;
- сортировка массива.
Описание массива
Общий вид описания массива:
var : array [ ..
] of ;
Тип элементов массива
Имя массива
var a : array [1..10] of integer;
Минимальное значение индекса
Значение 1-го элемента массива
Максимальное значение индекса
const b : array [1..5] of integer = (4, 2, 3, 5, 7);
Массив b с постоянными значениями описан в разделе описания констант.
Способы заполнения массива
1 способ . Ввод каждого значения с клавиатуры:
for i:=1 to 10 do read (a[i]);
2 способ . С помощью оператора присваивания (по формуле):
for i:=1 to 10 do a[i]:=i;
3 способ . С помощью оператора присваивания (случайными числами):
randomize ;
for i:=1 to 10 do a[i]:=random(100);
Вывод массива
1 способ. Элементы массива можно вывести в строку, разделив их пробелом:
for i:=1 to 10 do write (a[i], ' ');
45
21
56
43
83
56
69
34
28
15
a[1]=4
a[2]=1
a[3]=6
a[4]=3
a[5]=8
a[6]=5
a[7]=9
a[8]=4
a[9]=8
a[10]=7
2 способ . Вывод с комментариями:
for i:=1 to 10 do writeln ('a[', i, ']=', a[i]);
Заполнение массива A (10) случайными числами и вывод элементов массива
Объявление массива
program n _2 ; var i: integer;
a: array[1..10] of integer;
Заполнение массива
randomize;
b egin for i:=1 to 10 do a[i] :=random(100) ;
Вывод массива
for i:=1 to 10 do write (a[i] ,` `) ; end .
Вычисление суммы элементов массива
Суммирование элементов массива
осуществляется за счёт поочерёдного добавления слагаемых :
Определяется ячейка памяти (переменная s ),
в которой будет последовательно накапливаться
результат суммирования
Переменной s присваивается начальное значение 0
- число, не влияющее на результат сложения
Для каждого элемента массива из переменной s
считывается её текущее значение и складывается
со значением элемента массива;
полученный результат присваивается переменной s.
Вычисление суммы элементов массива
s := 0
s = 0
s := s + a [1]
s = 0 + a [1]
s := s + a [2]
s = 0 + a [1]+ a [2]
s := s + a [3]
s = 0 + a [1]+ a [2]+ a [3]
…
…
s := s + a [n]
s = 0+ a [1]+ a [2]+ a [3]+…+ a [n]
Основной фрагмент программы:
s:=0;
for i:=1 to n do s:=s+a[i];
Вычисление суммы элементов массива
program n _ 3 ;
var s, i: integer;
a: array[1..10] of integer;
b egin
s:=0;
randomize ;
for i:=1 to 10 do a[i] :=random(100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
for i:=1 to 10 do s:=s+a[i];
writeln ('s=', s)
end .
Вычисление суммы элементов массива
program n _ 3 _1;
var s, i: integer;
a: array[1..10] of integer;
b egin
s:=0;
randomize ;
for i:=1 to 10 do
begin
a[i] :=random(100) ;
write (a[i] ,` `) ;
s:=s+a[i]
end;
writeln ('s=', s)
end .
Второй способ оформления :
Используем операторные скобки и всё (ввод, вывод, обработку) делаем в одном цикле.
Типовые задачи поиска
Нахождение наибольшего (наименьшего)
элемента массива
Нахождение элемента массива, значение
которого равно заданному значению
Нахождение наибольшего элемента
в стопке карточек с записанными числами :
1) Взять верхнюю карточку, записать на доске
(запомнить) число как наибольшее.
2) Взять следующую карточку, сравнить числа. Если
на карточке число больше, то стереть старую запись и записать это число.
3) Повторить действия, описанные в пункте 2 для всех
оставшихся карточек.
При организации поиска наибольшего элемента массива правильнее искать его индекс.
!
Программа поиска наибольшего элемента в массиве
program n _4;
var i, imax : integer;
a: array[1..10] of integer;
b egin
randomize;
for i:=1 to 10 do a[i] :=random(100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
imax:=1 ;
for i:=2 to 10 do
if a[i]a[imax] then imax:=i;
write ( 'Наибольший элемент a[', imax, ']=', a[imax])
end .
Нахождение элемента массива с заданными свойствами
Результатом поиска элемента, значение которого равно заданному, может быть:
- n - индекс элемента массива такой, что a [ n ] = x , где х - заданное число;
- сообщение о том, что искомого элемента в массиве не обнаружено.
10
50
1
3
50
14
21
50
10
21
Здесь:
- трём равен 4-й элемент;
- десяти равны 1-й и 9-й элементы;
- нет элемента, равного 12.
Поиск элемента, равного 50
program n _ 5 ;
var n, i: integer;
a: array[1..10] of integer;
b egin
randomize;
for i:=1 to 10 do a[i] :=random(100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
n := 0;
for i:= 1 to 10 do
if a[i] =50 then n :=i;
if n=0 then write( 'Нет' ) else write (i)
end .
Будет найден последний из элементов, удовлетворяющих условию.
10
50
1
3
50
14
21
50
10
21
Поиск элемента, равного 50
program n _5_1;
var n, i: integer;
a: array[1..10] of integer;
b egin
randomize;
for i:=1 to 10 do a[i] :=random(100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
i := 0;
repeat
i:=i+1;
until (a[i]=50) or (i=10);
if a[i]=50 then write(i) else write('Нет')
end .
Будет найден первый из элементов, удовлетворяющих условию.
10
50
1
3
50
14
21
50
10
21
Подсчет количества элементов
Для подсчета вводится переменная, значение которой увеличивается на единицу каждый раз, когда найден нужный элемент.
program kolich ;
var k, i: integer;
a: array[1..10] of integer;
b egin
randomize;
for i:=1 to 10 do a[i] :=random(100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
k := 0;
for i:=1 to 10 do if a[i]50 then k:=k+1;
write ('k=', k)
end .
10
6 0
2 1
5 3
5 8
14
2 8
50
10
5 1
Сумма значений элементов, удовлетворяющих условию
program sum ;
var s, i: integer ;
a: array [1..10] of integer ;
b egin
randomize;
for i:=1 to 10 do a[i] := random (100) ;
for i:=1 to 10 do write (a[i] ,` `) ;
s := 0;
for i:=1 to 10 do
if (a[i] 1 0) and (a[i]then s := s + a[i];
write (‘ s =', s )
end .
10
50
1
3
50
14
21
50
10
21
Сортировка массива
Сортировка элементов массива по невозрастанию
выбором осуществляется следующим образом:
1. В массиве выбирается максимальный элемент
2. Максимальный и первый элемент меняются местами
(первый элемент считается отсортированным)
3. В неотсортированной части массива снова выбирается
максимальный элемент; он меняется местами с первым
неотсортированным элементом массива
Действия пункта 3 повторяются с неотсортированными
элементами массива, пока не останется один
неотсортированный элемент (минимальный)
Сортировка массива
Индекс
Значение
Шаги
1
2
1
0
2
1
3
3
9
4
2
4
5
4
6
5
3
6
7
7
6
8
5
Итог:
5
6
1
2
3
4
9
0
3
1
6
2
4
5
9
0
9
0
2
4
3
1
5
6
4
0
3
5
6
9
1
2
5
9
2
3
0
1
4
6
5
6
9
0
4
2
3
1
9
6
4
3
2
5
0
1
0
2
5
6
1
9
3
4
Сортировка массива
0
1
9
2
4
3
6
5
program rost;
var n, i, j, x, imax: integer ;
a: array [1..10] of integer ;
begin
for i:=1 to 10 do read (a[i]);
for i:=1 to 10 do write (a[i], ' ');
for i:=1 to 9 do
begin
imax:=i;
for j:=i+1 to 10 do if a[j]a[imax] then imax:=j;
x:=a[i];
a[i]:=a[imax];
a[imax]:=x
end ;
for i:=1 to 10 do write (a[i], ' ')
end .
9
6
5
4
3
2
1
0
Вопросы и задания
Запишите на языке Паскаль программу решения задачи.
В некотором населённом пункте n домов. Известно, сколько людей проживает в каждом из домов.
Исходные данные (количество жильцов) представить с помощью линейной таблицы а , содержащей n элементов: a [1] - количество жильцов дома 1, a [2] - количество жильцов дома 2, …, a [ n ] - количество жильцов дома N .
В общем случае а [ i ] — количество жильцов дома i , где i принимает все значения от 1 до n ( i =1, n ). Результат работы обозначить через s .
Считайте количество жильцов дома случайным числом из диапазона от 50 до 200 человек, а число домов n = 30.
Напишите программу, которая вычисляет среднюю за неделю температуру воздуха. Исходные данные вводятся с клавиатуры.
Запишите на языке Паскаль программу решения задачи.
Объявлен набор в школьную баскетбольную команду. Известен рост каждого из n учеников, желающих попасть в эту команду.
Подсчитайте количество претендентов, имеющих шанс попасть в команду, если рост игрока команды должен быть не менее 170 см.
Считайте рост претендента в команду случайным числом из диапазона от 150 до 200 см, а число претендентов n = 50.
Может ли массив одновременно содержать целые и
вещественные значения?
Для чего необходимо описание массива?
Что вы можете сказать о массиве, сформированном следующим образом?
а ) for i :=1 to 10 do a[ i ]:= random (101)-50;
б ) for i :=1 to 20 do a[ i ]:= i ;
в ) for i :=1 to 5 do a[ i ]:= 2* i -1;
В целочисленных массивах a и b содержатся длины катетов десяти прямоугольных треугольников:
a [ i ] - длина первого катета,
b [ i ]—длина второго катета i -го треугольника.
Найдите треугольник с наибольшей площадью. Выведите его номер, длины катетов и площадь. Предусмотрите случай, когда таких треугольников несколько.
В классе 20 учеников писали диктант по русскому языку. Напишите программу, подсчитывающую количество двоек, троек, четвёрок и пятёрок, полученных за диктант.
Дан массив из десяти целых чисел. Определите, сколько элементов этого массива имеют максимальное значение.
Занесите информацию о десяти европейских странах в массивы n (название страны), к (численность населения), s (площадь страны). Выведите названия стран в порядке возрастания плотности их населения.
Пример входных данных
Пример выходных данных
Введите температуру
Понедельник 12
Вторник 1 0
Среда 1 6
Четверг 1 8
Пятница 1 7
Суббота 1 6
Воскресенье 1 4
Средняя температура за неделю: 14,71