- •Индексы массива
- •Представление массива в памяти
- •Пользовательский тип – массив
- •Одномерные и n - мерные массивы
- •Двумерные массивы
- •Основные алгоритмы обработки одномерных массивов
- •Ввод/вывод массива
- •Поиск максимального/минимального элемента массива
- •Вставка новых элементов в массив
- •Удаление нескольких элементов массива
- •Обработка нескольких массивов
- •Проверка соседних элементов массива
- •Сортировка массива и работа с отсортированным массивом
- •Задачи совсем простые
- •Задачи простые
- •Задачи средние
- •Задачи посложнее
Поиск максимального/минимального элемента массива
Задача 6: Найти значение максимального элемента массива.
Алгоритм содержит три пункта:
1. Максимальным элементом считаем первый элемент: max=A[1].
2. Начиная со второго элемента, сравниваем имеющийся максимальный элемент max с очередным элементом массива A[i].
3. Если очередной элемент массива больше имеющегося максимального элемента, то это и есть новый максимальный элемент max=A[i].
Фрагмент программы:
Var {дополнительные переменные}
max:integer; {значение максимального элемента массива}
…
Begin
...
{1} max:=A[1];
{2} for i:=2 to n do
{3} if A[i]>max then max:=A[i];
…
Задача 7: Найти min и max значения элементов массива.
Фрагмент программы:
Var {дополнительные переменные}
max,min:integer;{значение максимального и минимального
элементов массива}
…
Begin
...
max:=A[1];
min:=A[1];
for i:=2 to n do
if A[i]>max then max:=A[i]
else if A[i]<min then min:=A[i];
…
Подсчет количества элементов, удовлетворяющих заданному условию
Задача 8: Подсчитать, сколько раз в массиве встречается элемент, равный 10.
Задача решается по следующему алгоритму:
1. Количество нужных элементов k=0.
2. Проходим по всем элементам массива,
3. И если очередной элемент массива равен 10,
4. Тогда увеличиваем k (количество элементов равных 10) на 1.
Фрагмент программы:
Var {дополнительные переменные}
k:integer; {количество элементов, равных 10}
…
Begin
...
{1} k:=0;
{2} for i:=1 to n do
{3} if A[i]=10
{4} then k:=k+1;
…
Удаление элемента из массива
Задача 9: Удалить из массива 1-ый элемент. Удаление элемента заключается в:
1. сдвиге элементов, стоящих правее удаляемого влево;
2. уменьшении количества элементов массива n на количество
удаляемых элементов.
Сдвиг элементов выполняется так:
1. Начиная с удаляемого элемента, копируем содержимое элемента,
стоящего правее в текущий элемент: A[i]:=A[i+1].
2. Переходим к следующему элементу вправо: i:=i+1.
3. Заканчиваем сдвиг, когда i=n-1, так как i+1 при i=n-1 равен n..
Фрагмент программы:
… {
1
-
сдвигаем элементы на одну позицию вправо}
{вначале i:=1, потому что надо удалить 1-ый элемент}
for i:=1 to n-1 do
A[i]:=A[i+1];
{2 - уменьшаем количество элементов в массиве}
n:=n-1;
…
Задача 10: Удалить из массива максимальный элемент массива.
Для этого надо:
1. Найти индекс максимального элемента.
2. Удалить элемент с найденным индексом.
Фрагмент программы:
Var {дополнительные переменные}
imax:IndexEl; {индекс максимального элемента}
…
Begin
...
{1 - ищем индекс максимального элемента массива}
imax:=1; {вначале imax указывает на первый элемент}
{в цикле начиная со 2-го элемента}
for i:=2 to n do
{сравниваем i-ый элемент с максимальным на текущий
момент времени, и если i-ый элемент больше максимального, то максимальным становится i-ый элемент}
if A[i]>A[imax] then imax:=i;
{2 - удаляем элемент массива с индексом imax}
for i:=imax to n-1 do
A[i]:=A[i+1];
dec(n); {уменьшаем n на 1}
Замечание: в ТР имеются процедуры увеличения и уменьшения переменной целого типа. Inc - увеличение значения переменной. Вид вызова для целого
X Inc(x); x:=x+1; Inc(x,n); x:=x+n;
где x - переменная целого типа;
n - целочисленное выражение.
В первом случае переменной x присваивается следующее значение (например, x была равна 10, тогда после выполнения inc(x) x равна 11). Таким образом, можно сказать, что запись inc(x) эквивалентна записи x:=x+1. Можно также сказать, что запись inc(x,n) эквивалентна записи
x:=x+n.
Dec – уменьшение значения переменной.
Вид вызова Для целого X
Dec(x); x:=x-1;
Dec(x,n); x:=x-n;