Массивы
ЗАПОЛНЕНИЕ МАССИВА заранее известными значениями
Заполнение массива с клавиатуры
Заполнение массива случайными числами
1.62M
Category: programmingprogramming

Массивы. Таблица умножения

1. Массивы

2.

В практической деятельности человека часто
используются таблицы и списки
Например:
Список среднесуточной температуры месяца
1
2
3
4
5
6
7
100
120
140
160
120
140
150
Список учеников в журнале

30
31
120
180
Таблица умножения
1.Иванов
1
2
3
4
5
6
7
8
9
10
2.Петров
1
1
2
3
4
5
6
7
8
9
10
3.Сидоров
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
4.Кошкин
5.Мышкин
• Элементы списков (строки и столбцы) всегда нумеруются
• В языках программирования подобные типы данных
описываются с помощью массивов

3.

Массив – это набор однородных данных (чисел, символов,
слов), имеющий имя, последовательную нумерацию его
элементов и расположенных в памяти рядом.. (это набор
однотипных данных, к которым можно обратиться с помощью
единственного имени)
Массив
элемент
А:
56 10
1
2
6
3
12 22 76 10
4
5
6
7
Индекс
Каждое значение в массиве называется элементом
Номер элемента в списке называется индексом
Особенности:
• все элементы имеют один тип
• весь массив имеет одно имя
• все элементы расположены в памяти рядом

4.

Обращение к элементу массива
К элементу массива можно обращаться с помощью индекса.
путем указания имени массива и индекса этого элемента в [ ]
A [ 4 ] := 12;
Имя массива
Индекс (порядковый
номер) элемента массива
Значение
элемента массива
Элементы массивов используются в выражениях также,
как и обычные переменные:
F [3] := F [2] *2;
Name [15] := ‘ Иванов ‘;
Sum:=Sum + Temperature [10];

5.

Этапы работы с массивами
1. Объявление массива в разделе описания переменных
2. Заполнение массива
3. Преобразование массива (действия с элементами
массива)
4. Вывод массива или отдельных данных

6.

Объявление массива в разделе
описания переменных
Var имя: ARRAY[1..N] OF тип;
Имя массива
Количество элементов
Тип элементов
Например:
Var A: Array[1..10] of Integer;
Var Tem: Array[1..100] of Real;
Const m=10;
Var a : array [1.. m] of integer;
Количество элементов можно
описать в разделе констант
Var R:Array [-20..20] of Real;
Другой диапазон индексов
Var N:Array ['A'..'Z'] of Integer;
Индексы символьного типа
Сonst a:array[1..5] of Integer = (3,-2,1,4,3);
Массив констант

7.

Вывод массива
i , 1, N
а) в столбик:
For i:=1 to N do Writeln(a[i]);
Вывод a i
б) в строку
For i:=1 to N do Write(a[i]);

8.

Способы ввода
данных в массив
1. С заранее известными элементами
2. С клавиатуры
3. С помощью генератора случайных чисел
4. С помощью вычисления элементов

9. ЗАПОЛНЕНИЕ МАССИВА заранее известными значениями

program days;
var
day:array[1..7] of string[11];
i:integer;
begin
day[1]:='Понедельник';
day[2]:='Вторник';
day[3]:='Среда';
day[4]:='Четверг';
day[5]:='Пятница';
day[6]:='Суббота';
day[7]:='Воскресенье';
for i:=1 to 7 do writeln(i,'
end.
',day[i]);
Объявление массива
Заполнение массива
Вывод массива

10.

Заполнение массива с клавиатуры
i , 1, N
Ввод a i
For i:=1 to N do begin
Write(' a [ ' , i , ' ] = ' );
ReadLn ( a [ i ] );
End;

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

Program M2;
Const N=7;
var
Объявление массива
A:array[1..N] of Integer;
i: Integer;
Заполнение массива
Begin
For i := 1 to N dо {цикл по элементам массива}
begin
Write('A [ ', i , ' ] = ');
ReadLn(A[i]) {ввод элементов массива}
end;
{вывод массива на экран }
For i := 1 to N do Write(A[i]);
End.
Вывод массива на экран

12.

аполнение массива случайными числа
i , 1, N
a i = случайное [0 ; А)
Вывод a i
For i:=1 to N do
begin
a[i]:=Random(A);
WriteLn(a[i]);
End;
m[i]:=RANDOM (А) случайное число из интервала [0; А)
m[i] :=RANDOM(B-A)+A; случайное число из интервала [A ; B)
m[i] :=RANDOM(B-A+1)+A; случайное число из интервала [A ; B]

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

Program M3;
Const N=7;
var
A:array[1..N] of Integer;
I: Integer;
Объявление массива
Begin
For i := 1 to N dо A[i]:=Random(15);
For i := 1 to N do Write(A[i]);
End.
Заполнение
массива
Вывод
массива на
экран

14.

олнение массива при помощи вычисле
a[1]:=3;
Writeln(a[1]);
For i:=2 to N do
begin
a[i]:=a[i-1] + 2;
Writeln(a[i]:5);
End;
a1 = 3
Вывод a 1
i , 2, N
ai = ai-1 + 2
Вывод a i

15.

Задача. Заполнить массив из 10 элементов случайными числами из
Начало
интервала от -10 до 10, вывести на экран, а затем
увеличить
каждый элемент массива на 1 и повторно вывести на экран.
Program vivod;
i , 1, 10
var A:array [1..10] of integer;
a i = случайное [-10 ; 10]
i:integer;
Begin
Вывод a i
for i:=1 to 10 do
begin
a[i]:= random(21)-10;
write(a[i]:5); {Оператор вывода без LN, вывод
осуществляется в строку}
i , 1, 10
end;
{Пустой оператор вывода с LN, когда первая
writeln; строка закончена, переход на вторую}
ai= a i + 1
for i:=1 to 10 do
begin
Вывод a i
a[i]:=a[i]+1;
write(a[i] :5);
end;
Конец
end.

16.

Составить программу заполняющую массив из 10 элементов,
числовой последовательностью: 1,4,9,16… (где A i = i 2 )
Program n2;
var a:array[1..10] of integer;
i:integer;
Begin
for i:=1 to 10 do
Begin
a[i]:=i*i;
write(a[i]:5);
end;
end.
Значение элемента
массива зависит
только от порядкового
номера

17.

Задание
1. Заполните массив элементами арифметической
прогрессии. Ее первый элемент и разность нужно
ввести с клавиатуры.
2. Заполните массив степенями числа 2 (от 21 до 2N)

18.

Обработка
массива
1. Обработка элементов согласно условию
2. Нахождение суммы, произведения, количества
компонентов, удовлетворяющих условию
3. Максимальный, минимальный элементы.

19.

Изменение элементов массива
удовлетворяющих условию
For i:=1 to N do
If (условие) then a[i]:=значение:
Условия:
a [ i ] > 0 – положительный элемент массива
a [ i ] Mod 2 = 0 – четный элемент массива
a [ i ] = int(a [ i ]) – целый элемент массива
a [ i ] = i – элемент массива равен своему порядковому номеру
i Mod 2 = 0 – четные порядковые номера
a [ i ] = К – элемент массива равный числу К
(x >= 10) and (x < 100) - двухзначное число
Изменения:
a [ i ] :=5 – заменить i-ый элемент на число 5
a [ i ] := - a [ i ] – заменить i-ый элемент на противоположный по
знаку
a [ i ] := a [ i ] * 2 – удвоить каждый элемент массива

20.

Задача
Определить, содержит ли массив A[1..20] случайных чисел число
Х, введенное с клавиатуры.
Program Poisk;
Var i, x, c: integer;
A : array [1..20] of integer;
Begin
Randomize;
Write ('Введите X ');
readln (x);
c:=0;
For i:=1 to 20 do
begin
a[i]:=random(50);
writeln(A[i]);
if a[i]=x then c:=1;
end;
if c=1 then writeln (‘Массив содержит число’, x)
else writeln (‘Массив не содержит число’, x);
end.

21.

Задание
1. Заполните массив А (10) случайными числами в
диапазоне 0..1000 и выведите на экран все
двухзначные числа массива
2. Заполните массив случайными числами в
диапазоне 20..100 и выведите отдельно числа с
четными и нечетными значениями
3. Сформировать массив простых множителей
заданного числа

22.

Вычисление суммы элементов
массива
S:=0
For i:=1 to N do s:=s+a[i]
Суммирование элементов массива
осуществляется за счет поочередного
добавления слагаемых
Sum:=0
i:=1, 5
Sum:=sum+m[i]
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[3]
S=0+a[1] +a[2] +a[3]+…+a[10]

23.

Вычисление суммы элементов
массива
Написать программу, которая сначала должна
обеспечить ввод 5 чисел в одномерный массив,
затем вычислить их сумму и вывести ее на экран.
Program Sum_mas;
Var i: integer;
Sum : real;
M : array [1..5] of Real;
Begin
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);
end.
Начало
i:=1, 5
Ввести m[i]
Sum:=0
i:=1, 5
Sum:=sum+m[i]
Вывести Sum
Конец

24.

Вычисление среднего
арифметического значения
элементов массива
Program Sr_arif;
Const N=10
Var i: integer;
S: real;
m : array [1..N] of Integer;
Begin
For i:=1 to N do m[i]:=random(100);
S:=0;
For i:=1 to N do S:=s+m[i];
S:=S/N
Writeln ('Srednee=',S);
end.

25.

Нахождение суммы
элементов массива
удовлетворяющих условию:
Предполагаем, что сумма равна нулю
s:=0;
For i:=1 to N do If (условие) then s:=s+ a[i];
WriteLn ('Сумма = ', s);
Если элемент подходит по условию,
добавляем его к сумме
Нахождение произведения
элементов массива
удовлетворяющих условию:
Предполагаем, что произведение равно единице
p:=1;
For i:=1 to N do If (условие) then p:=p* a[i];
WriteLn('Произведение = ', p);
Если элемент подходит по условию,
добавляем его к произведению

26.

Вычисление суммы
элементов массива
Заполните массив М(10) случайными числами
в диапазоне 1..100 и вычислите сумму
элементов, значения которых кратны 3
Program Sum_mas2;
Var i: integer;
Sum : real;
m : array [1..10] of Real;
Begin
For i:=1 to 10 do
Begin
Random (100)
writeln (m[i]);
end;
sum:=0;
For i:=1 to 10 do
if (m[i] mod 3) = 0 then Sum:=sum+m[i];
Writeln ('Sum=',sum);
end.
Начало
i:=1, 10
Ввести m[i]
Sum:=0
i:=1, 10
да
(m[i] mod 3) = 0
нет
Вывести Sum
Конец
Sum:=sum+m[i]

27.

Задание
1. Заполните массив случайными числами в
диапазоне 20..100 и вычислите отдельно сумму
элементов с четными и нечетными значениями
2. Заполните массив случайными числами в
диапазоне -20..20 и вычислите сумму элементов
с отрицательными значениями

28.

Подсчет количества элементов
удовлетворяющих условию:
Предполагаем, что таких элементов нет
k:=0;
For i:=1 to N do If (условие) then k:=k+1;
WriteLn('Кол-во=',k);
Если такой элемент есть, то
К увеличиваем на 1
k := 0
i , 1, N
условие
нет
Вывод k
да
k := k + 1

29.

Определить количество четных
элементов массива
program lab;
var
i, k: integer;
A: array[1..10] of integer;
begin
randomize;
for i := 1 to 10 do
A[i] := random(50);
for i := 1 to 10 do
write(A[i]:4);
writeln;
k := 0;
for i := 1 to 10 do
if A[i] mod 2 = 0 then k:k+1;
writeln('Четных = ', k);
end.
Начало
i:=1, 10
Ввести А[i]
k:=0
i:=1, 10
да
A[i] mod 2 = 0
нет
Вывести k
Конец
k:=k+1

30.

Дан массив М(10),
заполненный
случайными числами в
диапазоне -50..50 и
подсчитать среднее
значение элементов,
которые располагаются в
интервале от -15 до 20
Program Sr_arif;
Const N=10
Var i, m: integer;
S: real;
a : array [1..N] of Integer;
Begin
For i:=1 to N do
Begin
a[i]:=random (100)-50;
Writeln (a[i]);
end;
S:=0; m:=0;
For i:=1 to N do
Begin
If (a[i]>=-15) and(a[i]<=20 then
Begin
m:=m+1;
S:=S+a[i];
end;
end;
S:=S/m;
Writeln ('Surednee=',S);
end.

31.

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

32.

Задание
1. Заполните массив случайными числами в
диапазоне 0..100 и подсчитайте отдельно среднее
значение всех элементов, меньших 50, и среднее
значение всех элементов, которые больше или
равны 50
2. Написать программу, которая вычисляет среднее
арифметическое ненулевых элементов массива
М[1..100], элементы которого вычисляются по
формуле: М[i]=sin(i)*cos(i)

33.

Нахождение
максимального элемента в
массиве и его номера
{Предполагаем, что наибольший
элемент стоит на первом месте}
max:=a[1];
k:=1;
for i:=2 to N do
if (a[i]>max) then {Если находится больший элемент}
Begin
{Он становится максимальным}
max:=a[i];
k:=i;
end;
{выводим наибольший
WriteLn(‘Max=’,max:);
элемент и его номер}
WriteLn(‘Номер=’,k);

34.

Поиск максимального
program
MAX_N;
элемента
в массиве
const
N=10;
var
A:array[1..N] of integer;
J,Max:integer;
begin
for J:=1 to N do
begin
A[J]:=random(100);
writeln(A[J]);
end;
Max:= A[1];
for J:=2 to N do
begin
if A[J]>Max then
Max:=A[J];
end;
writeln('Максимальный элемент =',Max);
end.

35.

Иногда в задаче достаточно определить индекс
наибольшего элемента
max:= 1; {Предполагаем, что наибольший элемент стоит на первом месте}
for i:=2 to N do if a[i] > a[max] then max:=i;
{Если i-ый элемент больше стоящего на месте maxто, запоминаем его
индекс в переменной max}
writeln('Максимальный элемент ',а[max]);
writeln('Его номер ', Max);

36.

Поиск индексов
элементов
минимального и
максимального
элементов массива
program listing_3_6;
const N=10;
var
A:array[1..N] of integer;
J,Jmax,Jmin,Max,Min:integer;
begin
for J:=1 to N do
A[J]:=random(100);
Max:= A[1];
Min:= A[1];
Jmax:=1;
Jmin:=1;
for J:=2 to N do
begin
if A[J]>Max then
begin
Max:=A[J];
Jmax:=J;
end;
if A[J]<Min then
begin
Min:=A[J];
Jmin:=J;
end;
end;
writeln('Индекс максимального элемента равен', Jmax);
writeln('Индекс минимального элемента равен', Jmin);
end.

37.

Нахождение индексов элементов массива кратных 4
program listing_3_15;
const
N=30;
var
A:array[1..N] of integer;
J:integer;
begin
for J:=1 to N do
A[J]:=random(100);
for J:=1 to N do
begin
if (A[J] Mod 4) = 0 then
writeln(J);
end;
end.
Начало
i:=1, 30
Ввод А[i]
i:=1, 10
да
A[j] mod 4 = 0
нет
Конец
Вывести j

38.

Заполнить массив значениями,
вычисляемыми по формуле:
a[i]:=sin i *i2
Вывести элементы этого
массива на экран компьютера и
найти максимальное значение
среди них.
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);
readln; end.

39.

Разбор задачи C2 (демо ЕГЭ 2011)
C2 Работа с массивом: нахождение среднего арифметического
элементов массива, которые удовлетворяют некоторым условиям
(четность\нечетность).
Дан целочисленный массив из 30 элементов.
Элементы массива могут принимать значения от
0 до 1000. Опишите на русском языке или на
одном из языков программирования алгоритм,
который позволяет подсчитать и вывести
среднее арифметическое элементов массива,
имеющих нечетное значение. Гарантируется, что
в исходном массиве хотя бы один элемент
имеет нечетное значение.
Исходные данные объявлены так, как показано
ниже. Запрещается использовать переменные,
не описанные ниже, но разрешается не
использовать часть из них.
Паскаль
const
N=30;
var
a: array [1..N] of
integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do
readln(a[i]);

end.

40.

Решение:
const
N=30;
var
a: array [1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(a[i]);
x:=0;
y:=0;
for i:=1 to N do begin
if (a[i] mod 2=1) then
begin
x:=x+a[i];
y:=y+1;
end;
end;
s:=x/y;
writeln(s);
end.
Объявляем массив A из 30 элементов.
Объявляем целочисленные переменные I,
X, Y.
Объявляем вещественную переменную S.
В цикле от 1 до 30 вводим элементы
массива A с 1-го по 30-й.
Записываем в переменные X и Y
начальное значение, равное нулю. В
цикле от первого элемента до тридцатого
находим остаток от деления элемента
исходного массива на два.
Если этот остаток равен единице, то
увеличиваем счетчик суммы X на значение
текущего элемента массива, а счетчик
количества Y на 1.
Переходим к следующему элементу.
После цикла производим деление
счетчика суммы X на счетчик количества Y
и записываем результат в переменную S.
Выводим значение переменной S.

41.

Разбор задачи C2 (демо ЕГЭ 2012)
C2 Работа с массивом: нахождение минимального значения среди
элементов массива, которые удовлетворяют некоторым условиям
(четность\нечетность, кратность).
Дан целочисленный массив из 20
элементов. Элементы массива могут
принимать целые значения от 0
до 1000. Опишите на русском языке или
на одном из языков программирования
алгоритм, позволяющий найти и вывести
минимальное значение среди элементов
массива,
которые
имеют
чётное
значение и не делятся на три.
Гарантируется, что в исходном массиве
есть хотя бы один элемент, значение
которого чётно и не
кратно трем.
Исходные данные объявлены так, как
показано
ниже.
Запрещается
использовать
переменные,
не
описанные ниже, но использовать все
описанные переменные не обязательно.
Паскаль
const
N=20;
var
a: array [1..N] of
integer;
i, j, min: integer;
begin
for i:=1 to N do
readln(a[i]);

end.

42.

Решение:
const
N=20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do
readln(a[i]);
min:=1000;
for i:=1 to N do
begin
if (a[i] mod 2=0) and (a[i] mod 3<>0)
and (a[i]<min) then
min:=a[i];
end;
writeln(min);
end.
Объявляем массив A из 20 элементов.
Объявляем целочисленные
переменные I, J, MIN.
В цикле от 1 до 20 вводим элементы
массива A с 1-го по 20-й.
Записываем в переменную MIN
начальное значение, равное 1000. В
цикле от первого
элемента до двадцатого находим
остаток от деления элемента исходного
массива на два
и на три. Если остаток от деления на
два равен нулю и остаток от деления
на три не равен
нулю, то сравниваем значение
текущего элемента массива со
значением переменной MIN.
Если текущий элемент массива меньше
MIN, то записываем в MIN значение
этого элемента
массива. Переходим к следующему
элементу.После завершения цикла
выводим значение
переменной MIN.

43.

Разбор задачи C2 (демо ЕГЭ 2013)
C2 Работа с массивом: нахождение произведения элементов массива,
которые удовлетворяют некоторым условиям (четность\нечетность,
кратность).
Дан
целочисленный
массив
из
30
элементов. Элементы массива могут
принимать целые значения от 0 до 100.
Опишите на русском языке или на одном из
языков
программирования
алгоритм,
позволяющий
найти
и
вывести
произведение элементов массива, которые
имеют нечётное значение и делятся на 3.
Гарантируется, что в исходном массиве
есть хотя бы один элемент, значение
которого нечётно и кратно 3
Исходные данные объявлены так, как
показано ниже. Запрещается использовать
переменные, не описанные ниже, но
разрешается не использовать часть из них.
Исходные данные всегда подобраны так,
что результат произведения не выходит за
пределы объявленных типов данных.
Паскаль
const
N=30;
var
a: array [1..N] of
longint;
i, j, p: longint;
begin
for i := 1 to N do
readln(a[i]);

end.

44.

Решение:
const
N=30;
var
a: array [1..N] of longint;
i, j, p: longint;
begin
for i := 1 to N do
readln(a[i]);
p := 1;
for i := 1 to N do
if (a[i] mod 2<>0) and (a[i] mod3=0)
then
p := p * a[i];
writeln(p);
end.
Объявляем массив A из 30 элементов.
Объявляем целочисленные
переменные I, J, P.
В цикле от 1 до 30 вводим элементы
массива A с 1-го по 30-й.
Записываем в P (произведение
элементов массива) значение, равное
1. В цикле от 1-го до 30-го элемента
ищем числа, которые являются
нечетными (остаток от деления
элемента массива на 2 не равен 0) и
кратны 3-м (остаток от деления на 3
равен 0). Если в очередном проходе
цикла находим такое число, то тогда
считаем произведение данного
элемента массива и значения
переменной P. Результат сохраняем в
переменную P. Переходим к
следующему элементу массива.
Когда цикл завершается, выводится
значение переменной P

45.

Разбор задачи C2 (демо ЕГЭ 2014)
C2 Работа с массивом: нахождение максимального элемента массива,
которые удовлетворяют некоторым условиям (четность\нечетность,
кратность).
Дан
целочисленный
массив
из
20
элементов. Элементы массива могут
принимать целые значения от 0 до 10000
включительно. Опишите на естественном
языке
или
на
одном
из
языков
программирования алгоритм, позволяющий
найти и вывести максимальное значение
среди трёхзначных элементов массива, не
делящихся на 9.
Если в исходном массиве нет элемента,
значение которого является трёхзначным
числом и при этом не кратно 9, то выведите
сообщение «Не найдено».
Исходные данные объявлены так, как
показано ниже на примерах для некоторых
языков программирования и естественного
языка.
Запрещается
использовать
переменные, не описанные ниже, но
разрешается не использовать некоторые из
описанных переменных.
Паскаль
const
N = 20;
var
a: array [1..N] of
integer;
i, j, max: integer;
begin
for i := 1 to N do
readln(a[i]);
...
end.

46.

Решение:
const
N = 20;
var
a: array [1..N] of integer;
i, j, max: integer;
begin
for i := 1 to N do
readln(a[i]);
max := 99;
for i := 1 to N do
if (a[i]>=100) and (a[i]<=998)
and (a[i] mod 9<>0) and
(a[i]>max) then
max := a[i];
if max > 99 then writeln(max)
else writeln( Не найдено );
end.
Объявляем массив A из 20 элементов.
Объявляем целочисленные переменные I,
J, MAX.В цикле от 1 до 20 вводим элементы
массива A с 1-го по 20-й.
Записываем в переменную MAX начальное
значение, равное 99. В цикле от 1-ого
элемента до 20-ого находим остаток от
деления элемента исходного массива на 9.
Если значение данного остатка не равно 0 и
значение текущего элемента массива
больше 99 и меньше 1000,
то сравниваем значение текущего
элемента массива со значением
переменной MAX.
Если текущий элемент массива больше
MAX, то записываем в MAX значение этого
элемента массива. Переходим к
следующему элементу. После завершения
цикла проверяем значение переменной
MAX.
Если оно больше 99,то выводим его, иначе
выводим сообщение «Не найдено»

47.

Источники
https://kpolyakov.spb.ru/school/probook/slides.htm
http://infoegehelp.ru/index.php?option=com_content&view=article&id=84:201
1-12-20-19-29-50&catid=46:2011-12-18-16-51-00&Itemid=67
http://ege-go.ru/
English     Русский Rules