В практической деятельности человека часто используются таблицы и списки.
Например:
Список учеников в журнале;
Список среднесуточной температуры месяца;
Таблица умножения.
Иванов
Петров
Сидоров
Кошкин
Мышкин
100
120
120
130
140
140
120
150
160
140
...
180
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
Элементы списков и номера строк и столбцов всегда нумеруются
6
Массивы
Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.
Особенности:
все элементы имеют один тип
весь массив имеет одно имя
все элементы упорядочены
все элементы расположены в памяти рядом
Примеры:
список учеников в классе
квартиры в доме
школы в городе
данные о температуре воздуха за год
Массив
это упорядоченный по номерам набор значений, объединенных общим типом и именем
Каждое значение в массиве называется элементом.Номер элемента в списке называется индексом.
Тип элемента может быть любым (символьные или числовые), принятым в языке ПАСКАЛЬ, кроме файлового типа.
Тип элемента называется базовым типом.
Элемент массива представляется как переменная с индексом или с индексами: A[5] S[k+1] B[3,5].
Виды массивов
Одномерный
(содержит одну строку или один столбец)
Двумерный(содержит N строк,
M столбцов)
10 | 12 | 8 | 10 | 9 | 8 |
Например, температура воздуха за неделю.
1 | |
2 | 4 |
3 | 9 |
4 | 16 |
Например, значение функции y=x2
x y
Строки нумеруются сверху вниз, столбцы слева направо.
Многомерный
В качестве иллюстрации можете представить себе шкаф, имеющий множество нумерованных ящиков.
Шкаф – это массив.
Ящики – это индексы.
Содержимое ящиков – элементы массива.
Доступ к содержимому конкретного ящика (элемента массива) осуществляется после указания шкафа –имени массива – и номера ящика – индекса массива.
Одномерный массив
Характеристики массива
Имя задается правилами задания имен идентификаторов.
Индекс (порядковый номер элемента массива) – местоположение элемента в массиве.
Размер - количество элементов массива.
Размерность - количество индексов массива.
Обращение к конкретному элементу массива осуществляется путем указания имени массива и индекса этого элемента в [ ] :
Name[15], Temperature[10], Kino[5,6]
В качестве индексов массивов можно использовать переменные целого типа:
Элементы массивов используются в выражениях также, как и обычные переменные:
Name[15]:= ‘ Иванов ‘;
Sum:=Sum+Temperature[10];
Kino[5,6]:=‘Свободно ‘ ;
Name[i], Temperature[k], Kino[i,j]
Для того, чтобы использовать массив в программе, его нужно описать в разделе описаний:
Var имя_массива : array [тип индексов] of тип_элементов;
Имя массива выбираем по основным правилам имен идентификаторов.
Тип индексов: [начальный_индекс . . конечный_индекс ]
Например: [1..5 ] [10..100 ] [-10..10 ]
Например:
Var
Name: array [1..30] of string;
Temperature : array [1..31] of real;
Объявление массивы (I способ)
Объявление массивов
Зачем объявлять?
определить имя массива
определить тип массива
определить число элементов
выделить место в памяти
Массив целых чисел:
Размер через константу:
имя
начальный индекс
конечный индекс
тип
элементов
var A: array[1.. ] of integer;
const N=5;
N
var A : array[ 1 .. 5 ] of integer ;
Объявление массивов
Массивы других типов:
Другой диапазон индексов:
Индексы других типов:
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 A: array ['A'..'Z'] of real;
B: array [False..True] of integer;
...
A['C'] := 3.14259*A['B'];
B[False] := B[False] + 1;
Не обязательно начинается с 0 или с 1.
Необходимо, чтобы номер последнего элемента был больше, чем номер первого элемента:
var А: array [-5..4] of integer;
Нумеровать элемент массива можно не только целыми числами. Нумератором может быть любой порядковый тип данных (перечисляемый, интервальный, символьный, логический), а также произвольный тип, созданный на их основе.
Нумерация элемента массива
В языке Паскаль имеется другая форма описания, состоящая из 2-х этапов.
Сначала в разделе описания типов TYPE указывается тип массива.
Затем в разделе переменных VAR перечисляются массивы, относящиеся к указанному типу.
Форма объявления массива имеет вид:
TYPE имя типа = ARRAY[t1] OF t2;
VAR имя массива: имя типа;
где t1 – тип индекса; t2 – базовый тип элементов массива.
Например:
Объявление массивы (II способ)
TYPE MAS = ARRAY[1..10] OF REAL;
VAR R:MAS;
Способы заполнения одномерных массивов
Команда присваивания:
непосредственное присваивание значений элементам A[1]:=7; A[2]:=77; A[3]:=33; и т. д.;
часто требуется обнуление ячеек массива;
с помощью формул;
генерация (randomize) и присваивание значений с помощью функции A[I]:=random(q-p+1)+p; qp;
с помощью CONST;
ввод значений элементов с клавиатуры;
Заполнение массива с помощью команды присваивания
10 | 12 | 8 | 10 | 9 | 8 |
Этот способ применяется в том случае, когда информация в таблице не меняется.
Аксенов |
Бобров |
Веснин |
Гончаров |
Давыдов |
TEMP: array [1..7] of integer;
SP: array [1..5] of string;
BEGINTEMP[1]:=10;TEMP[2]:=12;TEMP[3]:=8;TEMP[4]:=10;TEMP[5]:=9;TEMP[6]:=8;TEMP[7]:=8;
BEGINSP[1]:=‘Аксенов’;SP[2]:=‘Бобров’;SP[3]:=‘Веснин’;SP[4]:=‘Гончаров’;SP[5]:=‘Давыдов’;
Заполнение массива вводом с клавиатуры
Наиболее распространенный способ заполнения массива. Используется, когда для разных таблиц необходимо произвести одни операции обработки.
for i:=1 to 7 do begin write(‘Введите ‘,i,’температуру ‘); readln(TEMP[i]);
end;
for i:=1 to 5 do begin write(‘Введите ‘,i,’ученика ‘); readln(SP[i]);
end;
for i:=1 to 5 do
begin
write('a[', i, ']=');
read (a[i]);
end;
a[1] =
a[2] =
a[3] =
a[4] =
a[5] =
5
12
34
56
13
Заполнение массивов случайными числами
Задание с помощью генератора случайных чисел
Randomize;
i:=1 to n do
begin
a[i]:=random(100);
write(a[i]:4);
end;
Алгоритм состоит из трех пунктов:
Перезапустить генератор случайных чисел.
Ввести количество элементов n (или сгенерировать случайное значение n).
Сгенерировать значения для всех элементов.
{1 - перезапускаем генератор случайных чисел}randomize;{2 - генерируем случайное значение n}n:=random(maxN);{3 - генерируем n элементов массива}for i:=1 to n doa[i]:=random(100); {каждый элемент примет значение из интервала 0..99}
for
Информация об используемых стандартных процедурах и функциях:
Randomize - инициализирует генератор случайных чисел случайным значением (случайное значение зависит от момента перезапуска, т.е. зависит от времени).
Язык Pascal имеют функцию – датчик случайных чисел:
Random(N) - возвращает случайное целое число, находящееся в интервале 0 .. (N-1)
Random, тип REAL присваивается случайное значение от 0 до 0.99999999.
Если N<=0, то Random всегда будет возвращать 0. Чтобы получить значения в интервале, отличном от [0..N-1], необходимо к значению, возвращаемому Random, прибавить смещение начала интервала.
Общий случай функции на [p;q]: random(q-p+1)+p; qp;
Пример 1: необходим интервал [-50 .. 50].Длина интервала 101, смещение начала интервала -50.random(101)-50Пример 2: необходим интервал [20 .. 30].Длина интервала - 11, смещение начала интервала 20.random(11)+20
Program Random_mas;
Var i: integer;
Ran : array [1..10] of integer;
Begin
Randomize;
For i:=1 to 10 do
begin
ran[i]:=random(101);
writeln(ran[i]);
end;
end.
Задача
Заполнить массив случайными числами из интервала [0;100] и вывести его на экран компьютера.
2
56
78
14
47
9
19
35
51
82
ВОПРОСЫ
Как изменить программу, чтобы выводились числа [-20;20]?
Как изменить программу, чтобы выводились числа типа REAL?
Как изменить программу, чтобы выводились элементы массива в строку?
ran[i]:=random(41)-20;
ran[i]:=random;
write(ran[i]:5);
План программы для работы с массивами
Program Task;
const n=….; (количество элементов массива)
var
<имя массива>: array [1..n] of <тип>;
i:integer;………….
BEGIN
writeln(‘Программу составили...');
{заполнение массива одним из способов}
for i:=1 to n do
begin
……
end;
{Печать массива одним из способов}
for i:=1 to n do
begin
…….
end;
Команды обработки массива
Вывод результата
END.
ПРАКТИЧЕСКАЯ РАБОТА «ЗАПОЛНЕНИЕ И ВЫВОД МАССИВОВ»
Заполнить и вывести на экран одномерный массив целых чисел.
{******* заполнение массива c случайными числами *******}
Заполнить и вывести на экран одномерный массив целых чисел.
{******* заполнение массива c клавиатуры *******}
Заполнить и вывести на экран одномерный массив символов.
{******* заполнение массива c в разделе CONST *******}
Домашнее задание
Заполнить массив нулями и вывести значения в строку.
Заполнить массив дробными и отрицательными значениями, используя случайные числа. Вывести элементы массива построчно.
Заполнить и вывести на экран одномерный массив, содержащий 200 одинаковых элементов.
Итоги урока:
На этом уроке мы узнали:
Массив – это структура данных, представляющая собой совокупность элементов одного типа.
Массив должен быть объявлен в разделе объявления переменных.
Доступ к элементу массива осуществляется путем указания имени массива и индекса (номера) элемента.
Для ввода, вывода и обработки массивов удобно применять команды цикла.
Существуют несколько способов ввода элементов массива в память.
В оглавление
Основная классификация обработки элементов массива:
задачи заполнения
задачи подсчета
задачи анализа
задачи поиска
задачи перестановки
сортировка массива
Вставка и удаление элементов массива
Примеры типовые задачи:
вычисление суммы и произведения элементов массива (для числовых массивов);
вычисление среднего арифметического, геометрического элементов массива;
замена элементов массива по условию;
подсчет заданных элементов в массиве;
нахождение в массиве заданного элемента;
поиск в массиве максимального (минимального) элемента;
определение индекса максимального (минимального) значения;
сортировка элементов массива;
перестановка элементов массива по заданному правилу;
удаление и вставка элемента.
четные | A[i] mod 2 = 0 |
нечетные | A[i] mod 2 <> 0 |
кратные | A[i] mod k = 0 |
некратные | A[i] mod k <> 0 |
на четных местах | i mod 2 = 0 |
на нечетных местах | i mod 2 <> 0 |
положительные | A[i] > 0 |
не отрицательные | A[i] >= 0 |
в интервале (х1,х2) | (A [i]>x1) and (A [i] |
Подсчет заданных элементов в массиве по условию
Условия обработки элементов массива:
Program Poisk_mas;
Var i, x: integer;
A : array [1..20] of integer;
c: string;
Begin
Randomize;
Write ('Zadayte chislo X ');
readln (x);
c:='v massive net chisla x';
For i:=1 to 20 do
begin
a[i]:=random(10);
writeln(A[i]);
if a[i]=x then c:='v massive est chislo x';
end;
writeln (c);
end.
Задача
Определить, содержит ли массив A[1..20] случайных чисел число Х, введенное с клавиатуры.
Нахождение в массиве заданного элемента
Задача
Напишите программу вывода на экран всех дней января, прогнозный размер осадков в которые не превысит значение 9. Размер осадков определить случайным образом.
program vyvod_nomer;
var
mas:array[1..31] of Integer;
i:integer;
Begin
{ блок ввода элементов массива }
For i:=1 to 31 do
begin
if mas[i]<=9 then
writeln(mas[i],’ осадков выпадет',i,' января');
end;
End.
Задача
Написать программу, которая сначала должна обеспечить ввод 5 чисел в одномерный массив, затем вычислить их сумму и вывести ее на экран.
Вычисление суммы и произведения элементов массива
Замена элементов
Задача
Заменить в массиве четные элементы на квадраты этих значений.
Program zamena;
var
mas:array[1..10] of Integer;
i:integer;
Begin
{ блок ввода элементов массива }
For i:=1 to 10 do
if mas[i] mod 2=0 then
mas[i]:=sqr(mas[i] );
{ блок вывода элементов получившегося массива }
End.
program sr_geo;
const n = 15; a = – 20; b = 10;
type mas = array [1..n] of integer;
var i: integer; m: mas; sr, p:real;
begin
randomize;
for i:=1 to n do
begin
m[i]:= random(b – a) + a;
write(m[i]:6);
end;
begin
p := 1;
for i:= 1 to n do p := p * m[i];
sg:= exp((1 / n)*ln(abs(p)));
writeln ('среднее геометрическое элементов массива = ', sg:6:2);
readln;
end.
Задача
Вычислить среднее геометрическое 15 чисел, заданных случайным образом.
Program kolichestvo;
var X:array[0..9] of byte;
k, R : byte;
begin
{ввод элементов массива}
{проверка на совпадение}
R:=0;
for k:=0 to 9 do
if X[k]=k then R:=R+1;
{вывод результата}
write('совпали со своими индексами ', R, ' элементов');
end.
Массив из 10 элементов с индексами от 0 до 9 заполняется случайным образом цифрами от 0 до 9. Определить, значения скольких элементов совпадут с индексами этих элементов.
Подсчет заданных элементов в массиве
Задача 1.
Написать программу, которая вычисляет среднюю за неделю температуру воздуха. Исходные данные должны вводиться во время работы программы.
Рекомендуемый вид экрана при работе программы:
Введите температуру воздуха за неделю.
1 день= 2
2 день= 0
3 день= -3
4 день= 1
5 день= 3
6 день= -2
7 день= 0
Средняя температура: 0.00 град.
Задание для практической работы:
program my;
var
i,s:integer;
mas:array[1..10] of integer;
begin
s:=0;
for i:=1 to 10 do
begin
mas[i]:=random(201)-100;
writeln(mas[i]);
s:=s+mas[i];
end;
writeln('summa=',s);
i:=1;
s:=0;
while mas[i]>0 do
begin
s:=s+mas[i];
end;
writeln('summa2=',s);
end.
Дополнительная задача:
Напишите программу подсчета суммы всех чисел и суммы положительных чисел до первого отрицательного или равного 0 в массиве из 10 элементов. Массив заполнить случайным образом.
Домашнее задание
Задача 1.
Написать программу, которая вводит с клавиатуры одномерный массив из 5 целых чисел и выводит количество ненулевых элементов. Перед вводом каждого элемента должна появляться подсказка с номером.
Рекомендуемый вид экрана при работе программы:
После ввода каждого числа нажмите
A[1]= 12
A[2]= 0
A[3]= -3
A[4]= 1
A[5]= 0
В массива 3 ненулевых элемента
Задача 2.
Написать программу, которая вычисляет среднее арифметическое ненулевых элементов массива М[1..100], элементы которого вычисляются по формуле:
М[i]=sin(i)*cos(i)
Задача 3.
Написать программу, которая проверяет, образуют ли элементы массива Х[1..10], введенного с клавиатуры неубывающую последовательность.
Домашнее задание
СУММА ДВУХ ОДИНАКОВЫХ ПО РАЗМЕРУ МАССИВОВ
Заполнить и вывести на экран два одинаковых по размеру массива: А и B.
Найти массив C, каждый элемент которого равен сумме соответствующих элементов массивов
А и В: C[i]=A[i]+B[i].
Задача
Program Summa_Mass;
Type mas= array[1..100] of integer;
var a, b, c: mas;
I, n: integer;
Begin
n:=20;
writeln('Ввoд массива А:);
{ заполнение исходного массива A }
writeln('Ввод массива В:);
{ заполнение исходного массива В }
{ вывод на экран массивов А и B }
{ формирование нового массива С }
for i:=1 to n do c[i]:=a[i]+b[i];
write(' C: ');
for i:=1 to n do write(' ',c[i]);
End.
Program Ob_Mass;
type massiv=array[1..20] of integer;
var a,b,c: massiv;
I, n: integer;
Begin
n:=10;
for i:=1 to n do
begin
write('Элемент [',i,']='); readln(a[i]);
end;
writeln;
for i:=1 to n do
begin
write('Элемент [',i,']='); readln(b[i]);
end;
write('Массив А: ');
for i:=1 to n do
begin
write(a[i]:5);
end;
writeln;
write('Массив B: ');
for i:=1 to n do
begin
write(b[i]:5);
end;
writeln;
for i:=1 to n do
begin
c[2*i-1]:=a[i];
c[2*i]:=b[i]
end;
write('Массив C: ');
for i:=1 to 2*n do
begin
write(c[i]:5);
end;
End.
ФОРМИРОВАНИЕ МАССИВА ИЗ ЭЛЕМЕНТОВ ДРУГОГО МАССИВА, УДОВЛЕТВОРЯЮЩИХ ЗАДАННОМУ УСЛОВИЮ
ЗАДАЧА
Требуется из данного массива А, состоящего из N элементов, выбрать элементы, удовлетворяющие заданному (пусть А(i)>T (с клавиатуры)), и сформировать из них массив B.
Исходный массив А: 4 6 8 2 23 1 9
Условие: A(i)>=8
Новый массив B: 8 23 9
Особенность решения: Индексы элементов массивов A и B не совпадают, так как не все элементы массива A включаются в массив B.
Program Massiv_po_Uslowiu;
{раздел описания}
Begin
{ заполнение исходного массива A }
writeln;
{ вывод исходного массива A }
{ формирование массива В по условию }
write('Введите параметр условия: ');
readln(t);
k:=0; {k- счетчик найденных элементов }
for i:=1 to n do
if a[i]>=t then
begin
k:=k+1;
b[k]:=a[i];
end;
{ вывод на экран нового массива B }
For i:=1 to k do write (b[i], ‘ ‘);
End.
64
Максимальный элемент
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]
65
Программа
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;
iMax := 1; { считаем, что первый – максимальный }
for i:=2 to N do { проверяем все остальные }
if a[i] > a[iMax] then { новый максимальный }
iMax := i; { запомнить i }
случайные числа в интервале [50,150)
поиск максимального
Program Max_mas;
Var i:integer;
max: real;
A : array [1..10] of real;
begin
For i:=1 to 10 do
begin
a[i]:=sin(i)*sqr(i);
writeln(A[i]:8:3);
end;
max:=A[1];
For i:=2 to 10 do
if a[i]> max then max:=a[i];
writeln;
writeln ('max=', max:8:3);
end.
Задача
Заполнить массив значениями, вычисляемыми по формуле:
a[i]:=sin i *i2
Вывести элементы этого массива на экран компьютера и найти максимальное значение среди них.
67
Задания
«4»: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива.
Пример:
Введите пять чисел:
4 15 3 10 14
среднее арифметическое 9.200
«5»: Ввести c клавиатуры массив из 5 элементов, найти минимальный из них.
Пример:
Введите пять чисел:
4 15 3 10 14
минимальный элемент 3
68
Задания
«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем максимальный и минимальный элементы и их номера.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0
максимальный a[4]=10
минимальный a[8]=-10
«5»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем два максимальных элемента и их номера.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0
максимальные a[4]=10, a[7]=8
Задача
Найти минимальную из сумм a1 + an; a2 + an-1; …, где a1,a2, … an – элементы массива.
program min_sum;
const n = 14;
type mas = array [1..n] of integer;
var i: integer; m: mas;
begin
randomize;
for i:=1 to n do
begin
m[i]:= random(100) - 30;
write(m[i]:6);
end;
min:=a[1] + a[n];
for i : = 2 to n div 2 do
if min > a[i] + a[n – i + 1] then min := a[i] + a[n – i + 1];
writeln ('минимальная сумма равна ', min)
end.
71
Реверс массива
Задача: переставить элементы массива в обратном порядке.
Алгоритм:
поменять местами A[1] и A[N], A[2] и A[N-1], …
Псевдокод:
3 | 5 | … | 9 | 7 |
7 | 9 | … | 5 | 3 |
1 | 2 | … | N-1 | N |
1 | 2 | … | N-1 | N |
for i:=1 to N do
{ поменять местами A[i] и A[N+1-i] }
сумма индексов N+1
N div 2
do
74
Циклический сдвиг
Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.
Алгоритм:
A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];
Цикл:
3 | 5 | 8 | 1 | … | 9 | 7 |
1 | 2 | 3 | 4 | … | N-1 | N |
5 | 8 | 1 | … | 9 | 7 | 3 |
for i:=1 to N-1 do
A[i]:=A[i+1];
почему не N?
УДАЛЕНИЕ И ВСТАВКА ЭЛЕМЕНТОВ
Удаление | Вставка |
const=10; | const n=9; |
77
Задания
«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить инверсию отдельно для 1-ой и 2-ой половин массива.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0
Результат:
-4 10 3 -5 4 0 1 -10 8 -6
«5»: Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить инверсию для каждой трети массива.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0 5 7
Результат:
10 3 -5 4 -10 8 -6 -4 7 5 0 1
78
Задания
«4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг ВПРАВО.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0
Результат:
0 4 -5 3 10 -4 -6 8 -10 1
«5»: Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента.
Пример:
Исходный массив:
4 -5 3 10 -4 -6 8 -10 1 0 5 7
Результат:
-4 -6 8 -10 1 0 5 7 4 -5 3 10
program perestanovka;
var
i,buf,maxi:integer;
mas:array[1..10] of integer;
begin
buf:=0;
for i:=1 to 10 do
begin
mas[i]:=random(21);
writeln(mas[i]);
end;
for i:=1 to 10 do
begin
if mas[i]>buf then
buf:=mas[i];
maxi:=i;
end;
mas[maxi]:=mas[1];
mas[1]:=buf;
for i:=1 to 10 do
writeln(mas[i]);
еnd.
Задача
Напишите программу, которая поменяет местами первый и наибольший элементы в массиве из 10 целых чисел.
Массив заполнить случайным образом.
Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме делителей, …). Алгоритмы:простые и понятные, но неэффективные для больших массивов; метод пузырька метод выборасложные, но эффективные; «быстрая сортировка» (Quick Sort) сортировка «кучей» (Heap Sort) сортировка слиянием пирамидальная сортировка
Метод пузырькаДля массивов – самый маленький («легкий» элемент перемещается вверх («всплывает»). Начиная снизу, сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами.За 1 проход по массиву один элемент (самый маленький) становится на свое местоДля сортировки массива из N элементов нужен N-1 проход (достаточно поставить на свои места N-1 элементов).
program sortirovka_puzyrek;
const N = 10;
var A: array[1..N] of integer;
i, j, c: integer;
begin
{ заполнить массив }
{ вывести исходный массив }
for i:=1 to N-1 do begin
for j:=N-1 downto i do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
end;
end;
{ вывести полученный массив }
end.
Метод пузырька с флажкомИдея – если при выполнении метода пузырька не было обменов, массив уже отсортирован и остальные проходы не нужны. Реализация: переменная-флаг, показывающая, был ли обмен; если она равна False, то выход.
i := 0;
Repeat
i := i + 1;
flag := False; { сбросить флаг }
for j:=N-1 downto i do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
flag := True; { поднять флаг }
end;
until not flag; { выход при flag=False }
Метод выбораИдея:найти минимальный элемент и поставить на первое место (поменять местами с A[1]):из оставшихся найти минимальный элемент и поставить на второе место (поменять местами с A[2]), и т.д.
program sortirovka_vebor;
const N = 10;
var A: array[1..N] of integer;
i, j, c, nMin: integer;
begin
{ заполнить массив }
{ вывести исходный массив }
for i := 1 to N-1 do begin
nMin = i ;
for j:= i+1 to N do
if A[j] < A[nMin] then nMin:=j;
if nMin <> i then begin
c:=A[i];
A[i]:=A[nMin];
A[nMin]:=c;
end;
{ вывести полученный массив }
End.
© ООО «Знанио»
С вами с 2009 года.