Слайд 1МБОУ СОШ с. Антоновка
Завитинский р-он
Амурская область
МАССИВЫ
Автор: Арефина Наталья Ильинична
Презентация (подготовка к
ЕГЭ)
Слайд 2Тема : Одномерные массивы. Работа с элементами
В математике, экономике, информатике часто
используются упорядоченные наборы данных, например последовательности чисел, таблицы, списки фамилий. Для обработки наборов данных одного типа вводится понятие массива.
Слайд 3Массив - совокупность конечного числа данных одного типа.
Массив обозначается одним
именем.
Всю совокупность действительных чисел 1.6, 14.9, -5.0, 8.5, 0.46 можно считать массивом и обозначить одним именем, например А.
Каждый элемент массива обозначается именем массива с индексом. Элементы массива упорядочены по значениям индекса.
В математике, как правило, индекс либо заключается в круглые скобки, либо указывается несколько ниже имени массива, например: А(1), А(2), А(3), А(4), А(5) или А1, А2, А3, А4, A5, или в общем виде {Ai} , где i =1, 2, 3, ..., n
Слайд 4В языке Qbasic индекс заключается в круглые скобки.
В Turbo Pascal
7.0 в квадратные.
Для рассмотренного примера элементами массива А являются:
На QBasic А(1)=1.6, А(2)=14.9, А(3)= -5.0, А(4)=8.5, А(5)=0.46.
На Turbo Pascal 7.0 А[1]:=1.6, А[2]:=14.9, А[3]:= -5.0, А[4]:=8.5, А[5]:=0.46.
Таким образом - индекс определяет положение элемента массива данных относительно его начала.
Если в программе используется массив, то он должен быть описан.
Слайд 5Форма описания имеет вид
DIM имя массива (n1 ТО n2)
AS тип элементов
Var имя массива: ARRAY [n1 .. n2 ] OF <тип элементов>;
DIM A(1 TO 1000) AS INTEGER Var a:array[1..1000] of integer;
Здесь n1, n2 — номер первого и последнего элементов массива соответственно.
В качестве типа элементов может использоваться любой тип данных, кроме файлового.
Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то допускается в описании объединять массивы в список, например
DIM A(50, B(50), C(50) AS SINGLE Var А, В, С: ARRAY [1..50] OF REAL;
Здесь объявлено списком три массива А, В, С действительных чисел, каждый из которых содержит по 50 элементов ( от 1 до 50):
Слайд 6Нельзя путать понятия «индекс» и «тип индекса».
Тип индекса - только
в разделе описания массива,
а индекс - в разделе операторов для обозначения
конкретных элементов массива. При этом индекс должен
быть того же типа, что и описание типа индекса.
В качестве индекса может быть выражение, частным случаем которого является константа или переменная. Элемент массива иначе называется переменной с индексом. В отличие от нее, переменная без индекса называется простой переменной.
Элементы массива могут стоять как в левой части оператора присваивания, так и в выражениях. Над элементами массива можно производить те же операции, которые допустимы для данных его базового типа. Если базовый тип есть INTEGER, то допустимы все операции над данными целого типа, включая и стандартные функции.
Слайд 7Присвоение значений элементам массива
может происходить с помощью:
1. оператора INPUT:
оператора Read (Readln);
uses crt;
DEFINT I,N Var i,n:integer;
DIM A(10000) AS INTEGER a:array[1..10000] of integer;
Begin
CLS clrscr;
Определяем число элементов в массиве
INPUT “N=”;N write('Введ.Размер. массива ');readln(n);
Слайд 8Ввод элементов массива
FOR I=1 TO N for i:=1 to n do
begin
INPUT
A(I) write('a[',i,'] '); readln(a[i]);
END end;
Выводим на экран полученный массив
FOR I=1 TO N for i:=1 to n do
begin
PRINT A(I);” “; write(a[i],' ');
NEXT end;
readkey;
END end.
Слайд 9Присвоение значений элементам массива может
происходить с помощью:
2. Оператора DATA:
описания элементов массива описания констант.
uses crt;
CONST N=5 Const n=5;
DATA 4,5,7,7,0 a:array[1..5] of integer= (4,5,7,7,0);
DEFINT I Var i:integer;
Begin
CLS clrscr;
Считываем и печатаем полученный массив
FOR I=1 TO N for i:=1 to n do begin
READ A(I):PRINT A(I);” “; write(a[i],' ');
NEXT end;
readkey;
END end.
Слайд 103. оператора присвоения
(для небольших массивов):
A(1)=10: A(2)=0:A(3)=2 а[1]:=10; a[2]:=0, … a[N]:=2;
После
того, как данные введены в массив, ими можно оперативно распоряжаться. Доступен любой элемент массива. Достаточно только указать его индекс.
Для получения случайных чисел воспользуемся следующей функцией
Функция RND [(x)] в QBasic
Функция RND [(x)] возвращает случайное число обычной точности в интервале от 0 до 1. Если аргумент опущен, возвращается следующее число из последовательности случайных чисел.
Для запуска генератора используйте RANDOMIZE TIMER.
Слайд 11Функция Random [(x)] в TPascal 7.0
Формирует случайное число от
0 до Х целого или вещественного типа (перед обращением к функции ее целесообразно инициализировать, использовав процедуру Rаndomize).
X – параметр, указывающий диапазон значений случайного числа. Оно изменяется в пределах 0 до Х. Результат в этом случае имеет тип Word (диапазон значений - 0…65535).
Если параметр Х не задан, результат будет типа Real в пределах 0.0 <=Х <1.0.
Для получения массива целых случайных чисел из диапазона от [A,B]
RND(B-A)+A random(B-A)+A
Слайд 12 Сформировать одномерный массив из N элементов, где элементы массива -
целые случайные числа в пределах от 1 до 45. Напечатать элементы массива в прямом и обратном порядке
Слайд 14В предыдущей задаче переставить элементы, стоящие на нечетных местах, с соответствующими
элементами на четных местах.
После создания массива вставим строки:
В полученном массиве меняем соседние элементы.
I=1 i:=1;
Пока I<=N-1
WHILE I<=N-1 while i<=n-1 do begin
Меняем значения соседних элементов.
R=A(I):A(I)=A(I+1):A(I+1)=R r:=a[i];a[i]:=a[i+1];a[i+1]:=r;
Увеличиваем индекс на два.
I=I+2 inc(i,2);
WEND end;
Распечатываем измененный массив.
FOR I=1 TO N for i:=1 to n do begin
PRINT A(I);” “; write(a[i],' ');
NEXT end;
readkey;
END end.
QB
TP
Слайд 15Найти максимальный (минимальный) элемента массива, а также его порядковый номер.
После создания
массива вставим строки:
За начальный максимум (минимум) берем первый элемент массива.
MIN=A(1):MAX=A(1) min:=a[1]; max:=a[1];
FOR I=1 TO N for i:=1 to n do begin
Если найдется элемент меньший MIN, то MIN будет равен этому элементу.
Одновременно запоминаем индекс промежуточного минимума.
IF A(I)<=MIN THEN If a[i]<=min then begin
MIN=A(I):IMIN=I Min:=a[i]; imin:=i; end;
Если найдется элемент больший MAX, то MAX будет равен этому элементу.
QB
TP
Слайд 16Найти максимальный (минимальный) элемента массива, а также его порядковый номер.
Одновременно запоминаем
индекс промежуточного максимума.
IF A(I)>=MAX THEN if a[i]>= max then
MAX=A(I):IMAX=I begin max:=a[i]; imax:=i; end;
NEXT end;
Печатаем минимальный элемент и его индекс
PRINT MIN; ” номер “; IMIN writeln(min,' номер ',imin);
Печатаем максимальный элемент и его индекс.
PRINT MAX; ” номер “; IMAX writeln(max,' номер ',imax);
readkey;
END end.
Слайд 171. В предыдущей задаче найдите минимальный элемент среди отрицательных чисел и
максимальный элемент среди неотрицательных.
В условии на нахождение промежуточного минимума добавим условие A(I)<0
IF A(I)<=MIN AND A(I)<0 THEN if (a[i]<=min) and (a[i]<0 then
MIN=A(I):IMIN=I begin min:=a[i]; imin:=i; end;
В условии на нахождение промежуточного максимума добавим условие A(I)>=0
IF A(I)>=MAX AND A(I)>=0 THEN if (a[i]>= max) and (a[i]>=0) then
MAX=A(I):IMAX=I begin max:=a[i]; imax:=i; end;
Слайд 18 В предыдущей задаче найдите максимальный элемент
среди отрицательных чисел и
минимальный элемент среди неотрицательных.
Достаточно ли изменить условие в строках?
IF A(I)<=MIN AND A(I) >=0 THEN if (a[i]<=min) and (a[i]>=0) then
MIN=A(I):IMIN=I begin min:=a[i];
imin:=i; end;
IF A(I)>=MAX AND A(I) < 0 THEN if (a[i]>= max) and (a[i]<0) then
MAX=A(I):IMAX=I begin
max:=a[i]; imax:=i;
end;
Ответ: нет, так как в этом случае мы неправильно задали начальный максимум и минимум. В случае, если первый элемент окажется положительным, то мы неправильно найдем максимум среди отрицательных элементов. Если первый элемент окажется отрицательным, то мы неправильно найдем минимум среди неотрицательных элементов.
Слайд 19Подсчитать количество четных элементов массива, заданного датчиком случайных чисел.
Prim19 program Prim19;
Uses crt;
DEFINT
I, K, N,R Var i,k,n,r:integer;
DIM A(I000) AS INTEGER a:array[1..10000] of integer;
Begin
CLS clrscr;
RANDOMIZE TIMER randomize;
INPUT “число элементов N=”;N write(' число элемен.n='); readln(n);
FOR I=1 TO N for i:=1 to n do begin
A(I)=RND*45-22 a[i]:=random(45)-22;
PRINT A(I);” “; write(a[i],' ');
Проверяем на четность и считаем количество четных элементов.
IF A(I) MOD 2 =0 THEN K=K+1 If a[i] mod 2=0 then inc(k,1);
NEXT End;
PRINT “K=”;K Write('к= ',k);
Readkey
END end.
QB
TP
Слайд 20Подсчитать количество отрицательных и н6еотрицательных элементов массива, заданного датчиком случайных чисел
Prim2 program
prim2;
uses crt;
DEF A(1000) AS INTEGER var a:array [1..1000] of integer;
DEFINT I,K-L,N i,k,n,l:integer;
begin
RANDOMIZE TIMER randomize;
CLS clrscr;
INPUT “ число элементов N=”;N write('число элементов n=');readln(n);
FOR I=1 TO N for i:=1 to n do begin
A(I)=RND*45-22 a[i]:=random(45)-22;
PRINT A(I);” “; write(a[i],' ');
Слайд 21Сравниваем с нулем и считаем неотрицательные и отрицательные элементы
IF A(I)>=0
THEN K=К+1 if a[i]>=0 then k:=K+1
ELSE L=L+1 else L:=l+1;
NEXT end;
PRINT writeln;
PRINT “неотриц. =”;K,” writeln('неотриц.= ',k,'
отриц. =”;L отриц. =',l);
readln;
END end.
QB
TP
Слайд 22Произвести удаление элемента из одномерного массива, заданного датчиком случайных чисел.
После заполнения
массива вводим номер удаляемого элемента.
INPUT” номер удаляемого элем. write(' номер удал. элем. k=
FOR I=1 TO N-1 for i:=1 to n-1 do begin
Смещаем элементы массива к началу, начиная с К-го.
IF I>=K THEN A(I)=A(I+1) f i>=k then a[i]:=a[i+1];
NEXT end;
Обнуляем последний элемент
A(N)=0 a[n]:=0;
Выводим на экран измененный массив
FOR I=1 TO N-1 for i:=1 to n -1 do begin
PRINT A(I);” “; write(a[i],' ');
NEXT end;
readln;
END end.
QB
TP
Слайд 23Произвести вставку элемента в одномерный массив, заданный датчиком случайных чисел.
После
заполнения массива вводим индекс и значение вставляемого элемента.
INPUT “ ИНДЕКС <=N “;K write(' индекс <=N'); readln(k)
INPUT” значение R =”;R write(' значение R = '); readln(r);
Смещаем элементы к концу массива, начиная с К+1
FOR I=N+1 TO 1 STEP-1 for i:=n+1 downto 1 do begin
Слайд 24IF I>K THEN A(I)=A(I-1) if i>k then a[i]:=a[i-1];
NEXT
end;
На какое место ставим введенный элемент?
A(K)=R a[k]:=r;
Выводим на экран измененный массив.
FOR I=1 TO N+1 for i:=1 to n +1 do begin
PRINT A(I);” “; write(a[i],' ');
NEXT end;
readln;
END end.
Домашнее задание
Что необходимо изменить в программе подсчета количества элементов, чтобы в К находилась сумма неотрицательных элементов, а в L произведение отрицательных элементов.
Слайд 25
Что необходимо изменить в программе подсчета количества элементов, чтобы в
К находилась сумма неотрицательных элементов, а в L произведение отрицательных элементов?
Для этого изменим строку, предварительно задав начальные значения К=0 и L=1.
IF A(I)>=0 THEN K=К+ A(I) if a[i]>=0 then k:= k + a[i]
ELSE L=L* A(I) else L:=l+ a[i];
Слайд 26Двумерные массивы
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.
Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу А размером 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:
A= a11 a12 a13
a21 a22 a23
Слайд 27Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас
номер уже состоит из двух чисел — номера строки, в которой находится элемент, и номера столбца.
Таким образом, номер элемента определяется пересечением строки и столбца.
Например, a12 — это элемент, стоящий в первой строке и во втором столбце.
Слайд 28Способы объявления двумерного массива
Способ 1
В Turbo Pascal 7.0 двумерный массив
можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведенной выше:
Const n =2; т=3;
Type. Mas1=Array[1..m] Of <тип элементов >; Mas2=Array[1..n] Of mas1;
Var v: mas1;
a: mas2;
В данном случае переменная v объявлена, как одномерный массив из трех элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, в каждую из которых включено по три элемента.
Слайд 29Способ 2
Описание массива А можно сократить, исключив определение типа mas1 в
определении типа mas2:
Const n=2; m=3;
Type massiv = Array[1..n] Оf Array[1..m] Of <тип элементов>;
Var a: massiv.
Слайд 30Способ 3
Еще более краткое описание массива А можно получить, указывая имя
массива и диапазоны изменения индексов для каждой размерности массива:
Const п=2; т=3;
Type massiv = Array[1..n,1..mJ Of ;
Var a: massiv.
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
Var a: Array[1..n,1..m] Of <тип элементов>.
Слайд 31На языке QBasic двумерные массивы определяются аналогично, как и одномерные.
Например:
DIM
имя массива (n1 ТО n2,n3 TO n4) AS тип элементов
DIM A(1 TO 100, 1 TO 100) AS INTEGER
DIM A( 100, 100) AS INTEGER
если n1 =1, то номер можно не указывать.
Допускается в описании объединять массивы в список, например:
DIM A(50,40), B$(15,50), C%(50,11)
Здесь объявлено списком три массива А, В, С действительные, строковые и целые.