Понятие и обработка массива

  • pptx
  • 25.06.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала массивы).pptx

2

Программирование на языке Паскаль

Массивы
Основные этапы работы с массивами
Способы заполнения одномерных массивов
Вывод массива на экран
Обработка массивов
Максимальный элемент массива
Обработка одномерных массивов
Сортировка массивов
Поиск в массиве

3

Программирование на языке Паскаль

Тема 1. Массивы

Типы данных

В практической деятельности человека часто используются таблицы и списки.
Например:
Список учеников в журнале;
Список среднесуточной температуры месяца;
Таблица умножения.

Иванов
Петров
Сидоров
Кошкин
Мышкин

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

Строки нумеруются сверху вниз, столбцы слева направо.

Многомерный

В качестве иллюстрации можете представить себе шкаф, имеющий множество нумерованных ящиков.

Шкаф – это массив.

Ящики – это индексы.

Содержимое ящиков – элементы массива.

Доступ к содержимому конкретного ящика (элемента массива) осуществляется после указания шкафа –имени массива – и номера ящика – индекса массива.

Одномерный массив

10

Массивы

5

10

15

20

25

1

2

3

4

5

A

массив

3

15

НОМЕР элемента массива
(ИНДЕКС)

A[1]

A[2]

A[3]

A[4]

A[5]

ЗНАЧЕНИЕ элемента массива

A[2]

НОМЕР (ИНДЕКС) элемента массива: 2

ЗНАЧЕНИЕ элемента массива: 10

Характеристики массива

Имя задается правилами задания имен идентификаторов.
Индекс (порядковый номер элемента массива)местоположение элемента в массиве.
Размер - количество элементов массива.
Размерность - количество индексов массива.

Доступ к элементу

Обращение к любому элементу массива происходит по имени массива и его номеру.

1

2

3

4

T[4]:=4;

5

10

15

20

25

А[2]:=10;

1 2 3 4 5

А

Т

1
2
3
4

Обращение к конкретному элементу массива осуществляется путем указания имени массива и индекса этого элемента в [ ] :

Name[15], Temperature[10], Kino[5,6]

В качестве индексов массивов можно использовать переменные целого типа:

Элементы массивов используются в выражениях также, как и обычные переменные:

Name[15]:= ‘ Иванов ‘;
Sum:=Sum+Temperature[10];
Kino[5,6]:=‘Свободно ‘ ;

Name[i], Temperature[k], Kino[i,j]

Типы массива

Тип таблицы

Целый

Вещественный

Литерный

температура воздуха за месяц

вес учеников класса

список класса

Основные этапы работы с массивами

2. Заполнение массива данными

3. Обработка (преобразование) массива

4. Вывод массива или
отдельных данных на экран

1. Объявление массива

Для того, чтобы использовать массив в программе, его нужно описать в разделе описаний:
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;

21

Что неправильно?

var a: array[10..1] of integer;
...
A[5] := 4.5;

[1..10]

var a: array ['z'..'a'] of integer;
...
A['B'] := 15;

A[2]

[1..10]

var a: array [0..9] of integer;
...
A[10] := 'X';

Способы заполнения одномерных массивов

Команда присваивания:
непосредственное присваивание значений элементам A[1]:=7; A[2]:=77; A[3]:=33; и т. д.;
часто требуется обнуление ячеек массива;
с помощью формул;
генерация (randomize) и присваивание значений с помощью функции A[I]:=random(q-p+1)+p; qp;
с помощью CONST;
ввод значений элементов с клавиатуры;

Заполнение массива с помощью команды присваивания

10

12

8

10

9

8

Этот способ применяется в том случае, когда информация в таблице не меняется.

Аксенов

Бобров

Веснин

Гончаров

Давыдов

TEMP: array [1..7] of integer;

SP: array [1..5] of string;

BEGIN TEMP[1]:=10; TEMP[2]:=12; TEMP[3]:=8; TEMP[4]:=10; TEMP[5]:=9; TEMP[6]:=8; TEMP[7]:=8;

BEGIN SP[1]:=‘Аксенов’; SP[2]:=‘Бобров’; SP[3]:=‘Веснин’; SP[4]:=‘Гончаров’; SP[5]:=‘Давыдов’;

Заполнение массивов с помощью команды присваивания

For i:=1 to 6 do begin
a[i]:=i*i;
write(a[i]:4);
end;

For i:=1 to 6 do
begin
a[i]:=0;
write(a[i]:4);
end;

Задание с помощью формул:


Заполнение нулями:

1 4 9 16 25 36

0 0 0 0 0 0

Заполнение массива вводом с клавиатуры

Наиболее распространенный способ заполнения массива. Используется, когда для разных таблиц необходимо произвести одни операции обработки.

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

Заполнение массивов постоянными значениями

Можно задавать постоянный массив в разделе описания констант

const x: array [1..10] of integer=(4,6,3,5,2,1,7,8,9,13);
const y: array [1..8] of char=('a','b','c','d','e','f','g','h');

Заполнение массивов случайными числами

Задание с помощью генератора случайных чисел

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 do a[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; qp;

Пример 1: необходим интервал [-50 .. 50]. Длина интервала 101, смещение начала интервала -50. random(101)-50 Пример 2: необходим интервал [20 .. 30]. Длина интервала - 11, смещение начала интервала 20. random(11)+20

Вывод массива на экран

writeln('Массив A:');
for i:=1 to N do write(a[i]:4);

Массив A:
10 24 68 112 26

writeln('Массив A:');
for i:=1 to N do writeln(a[i]:4);

Массив A:
10
24
68
112
26

Вывод элементов массива построчно (в столбик)

Вывод элементов массива в строку

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 одинаковых элементов.

Итоги урока:

На этом уроке мы узнали:
Массив – это структура данных, представляющая собой совокупность элементов одного типа.
Массив должен быть объявлен в разделе объявления переменных.
Доступ к элементу массива осуществляется путем указания имени массива и индекса (номера) элемента.
Для ввода, вывода и обработки массивов удобно применять команды цикла.
Существуют несколько способов ввода элементов массива в память.

В оглавление

36

Программирование на языке Паскаль

Тема 2. Обработка одномерных массивов

Вопросы:

Что такое массив? Каковы его характеристики?
Перечислить способы описания массива?
Перечислить способы заполнения массива?
Каковы отличие вывода в строку и в столбец?

Основная классификация обработки элементов массива:

задачи заполнения

задачи подсчета

задачи анализа

задачи поиска

задачи перестановки

сортировка массива

Вставка и удаление элементов массива

Примеры типовые задачи:

вычисление суммы и произведения элементов массива (для числовых массивов);
вычисление среднего арифметического, геометрического элементов массива;
замена элементов массива по условию;
подсчет заданных элементов в массиве;
нахождение в массиве заданного элемента;
поиск в массиве максимального (минимального) элемента;
определение индекса максимального (минимального) значения;
сортировка элементов массива;
перестановка элементов массива по заданному правилу;
удаление и вставка элемента.

Поиск элементов массива

If условие поиска then { для поиска элементов} write(a[i]);
{ для поиска номера элементов} k:=i; или write(i:4);

четные

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 Sum_mas;
uses Crt;
Var i: integer;
Sum : real;
M : array [1..5] of Real;
begin
Clrscr;
For i:=1 to 5 do
begin
write ('m[',i,']=');
readln(m[i]);
end;
sum:=0;
For i:=1 to 5 do
Sum:=sum+m[i];
Writeln ('Sum=',sum:6:2);
readln;
end.

Замена элементов

Задача
Заменить в массиве четные элементы на квадраты этих значений.

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 град.

Задание для практической работы:

Задача 2
Написать программу, которая определяет, сколько раз в массиве случайных чисел A[1..100] встречается число Х, введенное с клавиатуры.

Задания для практической работы:

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], введенного с клавиатуры неубывающую последовательность.

Домашнее задание

Обработка одномерных массивов

(продолжение)

Вопросы:

Перечислить основные типы задач на обработку массива.
Написать формулу нахождения суммы элементов массива (произведения).
Написать формулу подсчета количества элементов по условию.
Каковы условия поиска элементов?

Значения элементов двух массивов А и В размером 1 х 100 задаются с помощью следующего фрагмента программы:
for i:=1 tо 100 do
A[i] := 50 – i;
for i:=1 tо 100 do
B[i] := A[i] + 49;
Сколько элементов массива В будут иметь отрицательные значения?
1) 1 2) 10 3) 50 4) 100

СУММА ДВУХ ОДИНАКОВЫХ ПО РАЗМЕРУ МАССИВОВ

Заполнить и вывести на экран два одинаковых по размеру массива: А и 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.

ОБЪЕДИНЕНИЕ ДВУХ МАССИВОВ С ЧЕРЕДОВАНИЕМ ЭЛЕМЕНТОВ

ЗАДАЧА
Объединить два массива A и B,содержащих по N элементов в один массив С, который будет содержать 2*N элементов, т.е. получить массив C=(а1,b1,a2,b2,..,an,bn).

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.

62

Программирование на языке Паскаль

Максимальный элемент массива

63

Максимальный элемент

Задача: найти в массиве максимальный элемент.
Алгоритм:

Псевдокод:

{ считаем, что первый элемент – максимальный }
for i:=2 to N do
if a[i] > { максимального } then
{ запомнить новый максимальный элемент a[i] }

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

72

Как переставить элементы?

2

3

1

Задача: поменять местами содержимое двух чашек.

Задача: поменять местами содержимое двух ячеек памяти.

4

6

?

4

6

4

x

y

c

c := x;
x := y;
y := c;

x := y;
y := x;

3

2

1

73

Программа

program qq;
const N = 10;
var A: array[1..N] of integer;
i, c: integer;
begin
{ заполнить массив }
{ вывести исходный массив }



{ вывести полученный массив }
end.

for i:=1 to N div 2 do begin
c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c;
end;

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?

75

Программа

program qq;
const N = 10;
var A: array[1..N] of integer;
i, c: integer;
begin
{ заполнить массив }
{ вывести исходный массив }



{ вывести полученный массив }
end.

c := A[1];
for i:=1 to N-1 do A[i]:=A[i+1];
A[N] := c;

УДАЛЕНИЕ И ВСТАВКА ЭЛЕМЕНТОВ

Удаление

Вставка

const=10;
var X:array[0..n] of integer;
k : byte;
m: integer;
begin
for k:=0 to n do
begin
X[k]:=random(100)-50;
write(X[k]:4);
end;
Write(‘укажите № удаляемого элемента’);
Readln(m);
for k:=m to n-1 do X[k]=X[k+1];
for k:=1 to n-1 do write(X[k]:4);
end.

const n=9;
var X:array[0..n+1] of integer;
k : byte;
m,p: integer;
begin
for k:=0 to n do
begin
X[k]:=random(100)-50;
write(X[k]:4);
end;
Write(‘укажите № вставляемого элемента’); Readln(m);
for k:=n downto m do X[k+1]=X[k];
Write(‘укажите значение элемента’);
Readln(p);
X[m]:=p;
for k:=1 to n+1 do
write(X[k]:4);
end.

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.