Презентация по информатике "Массивы"
Подписи к слайдам:
Массивы
Программирование на языке Паскаль<number>
- Массивы
- Основные этапы работы с массивами
- Способы заполнения одномерных массивов
- Вывод массива на экран
- Обработка массивов
- Максимальный элемент массива
- Обработка одномерных массивов
- Сортировка массивов
- Поиск в массиве
<number>
Тема 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 |
Элементы списков и номера строк и столбцов всегда нумеруются
<number>
Массивы
Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.
Особенности:
- все элементы имеют один тип
- весь массив имеет одно имя
- все элементы упорядочены
- все элементы расположены в памяти рядом
- список учеников в классе
- квартиры в доме
- школы в городе
- данные о температуре воздуха за год
Примеры:
Массив
это упорядоченный по номерам набор значений, объединенных общим типом и именем
Каждое значение в массиве называется элементом. Номер элемента в списке называется индексом.
Тип элемента может быть любым (символьные или числовые), принятым в языке ПАСКАЛЬ, кроме файлового типа.
Тип элемента называется базовым типом.
Элемент массива представляется как переменная с индексом или с индексами: A[5] S[k+1] B[3,5].
Виды массивов
Одномерный
(содержит одну строку или один столбец)
Двумерный (содержит N строк,
M столбцов)
10 |
12 |
8 |
10 |
9 |
8 |
8 |
Например, температура воздуха за неделю.
1 |
1 |
2 |
4 |
3 |
9 |
4 |
16 |
Например, значение функции y=x2
x y
Строки нумеруются сверху вниз, столбцы слева направо.
Многомерный
В качестве иллюстрации можете представить себе шкаф, имеющий множество нумерованных ящиков.
Шкаф – это массив.
Ящики – это индексы.
Содержимое ящиков – элементы массива.
Доступ к содержимому конкретного ящика (элемента массива) осуществляется после указания шкафа –имени массива – и номера ящика – индекса массива.
1
2
3
4
5
Шкаф
Одномерный массив
<number>
Массивы
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. Объявление массива
Объявление массивы (I способ)Для того, чтобы использовать массив в программе, его нужно описать в разделе описаний:
Var имя_массива : array [тип индексов] of тип_элементов;
Имя массива выбираем по основным правилам имен идентификаторов.
Тип индексов: [начальный_индекс . . конечный_индекс ]
Например: [1..5 ] [10..100 ] [-10..10 ]
Например:
Var
Name: array [1..30] of string;
Temperature : array [1..31] of real;
Объявление массивов
Зачем объявлять?
- определить имя массива
- определить тип массива
- определить число элементов
- выделить место в памяти
Массив целых чисел:
Размер через константу:
имя
начальный индекс
конечный индекс
тип
элементов
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;
- Нумеровать элемент массива можно не только целыми числами. Нумератором может быть любой порядковый тип данных (перечисляемый, интервальный, символьный, логический), а также произвольный тип, созданный на их основе.
Нумерация элемента массива
Объявление массивы (II способ) В языке Паскаль имеется другая форма описания, состоящая из 2-х этапов.- Сначала в разделе описания типов TYPE указывается тип массива.
- Затем в разделе переменных VAR перечисляются массивы, относящиеся к указанному типу. Форма объявления массива имеет вид: TYPE имя типа = ARRAY[t1] OF t2; VAR имя массива: имя типа; где t1 – тип индекса; t2 – базовый тип элементов массива. Например:
TYPE MAS = ARRAY[1..10] OF REAL;
VAR R:MAS;
<number>
Что неправильно?
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; qp;
- с помощью CONST;
- ввод значений элементов с клавиатуры;
10 |
12 |
8 |
10 |
9 |
8 |
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; qp;
Пример 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 одинаковых элементов.
Итоги урока:
На этом уроке мы узнали:
- Массив – это структура данных, представляющая собой совокупность элементов одного типа.
- Массив должен быть объявлен в разделе объявления переменных.
- Доступ к элементу массива осуществляется путем указания имени массива и индекса (номера) элемента.
- Для ввода, вывода и обработки массивов удобно применять команды цикла.
- Существуют несколько способов ввода элементов массива в память.
В оглавление
Программирование на языке Паскаль<number>
Тема 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]<x2) |
Условия обработки элементов массива:
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.
Начало
i:=1, 5
Ввести m[i]
Sum:=0
i:=1, 5
Sum:=sum+m[i]
Вывести Sum
Конец
Замена элементовЗадача
Заменить в массиве четные элементы на квадраты этих значений.
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 чисел, заданных случайным образом.
Подсчет заданных элементов в массивенет
k := 0, 9
X[k]:=случ(9)
начало
вывод X[k]
R:=0
k := 0, 9
X[k] = k
R:=R+1
вывод R
конец
да
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; 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 целых чисел и выводит количество ненулевых элементов. Перед вводом каждого элемента должна появляться подсказка с номером.
Рекомендуемый вид экрана при работе программы:
После ввода каждого числа нажмите <ENTER>
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.
Программирование на языке Паскаль<number>
Максимальный элемент массива<number>
Максимальный элемент
Задача: найти в массиве максимальный элемент.
Алгоритм:
Псевдокод:
{ считаем, что первый элемент – максимальный }
for i:=2 to N do
if a[i] > { максимального } then
{ запомнить новый максимальный элемент a[i] }
Почему цикл от i=2?
?
<number>
Максимальный элемент
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]
<number>
Программа
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
Вывести элементы этого массива на экран компьютера и найти максимальное значение среди них.
<number>
Задания
«4»: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива.
Пример:
Введите пять чисел:
4 15 3 10 14
среднее арифметическое 9.200
«5»: Ввести c клавиатуры массив из 5 элементов, найти минимальный из них.
Пример:
Введите пять чисел:
4 15 3 10 14
минимальный элемент 3
При изменении N остальная программа не должна изменяться!
!
<number>
Задания
«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.
<number>
Реверс массива
Задача: переставить элементы массива в обратном порядке.
Алгоритм:
поменять местами 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
<number>
Как переставить элементы?
2
3
1
Задача: поменять местами содержимое двух чашек.
Задача: поменять местами содержимое двух ячеек памяти.
4
6
?
4
6
4
x
y
c
c := x;
x := y;
y := c;
x := y;
y := x;
3
2
1
Можно ли обойтись без c?
?
<number>
Программа
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;
<number>
Циклический сдвиг
Задача: сдвинуть элементы массива влево на 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?
<number>
Программа
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. |
<number>
Задания
«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
<number>
Задания
«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; 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.