Презентация "Массивы"
презентация к уроку по информатике и икт (10 класс)
Презентация по программированию на Pascal на тему "Одномерные массивы и матрицы"
Скачать:
Вложение | Размер |
---|---|
Массивы | 1.33 МБ |
Предварительный просмотр:
Подписи к слайдам:
Индекс – величина, характеризующая положение элемента, относительно начала массива. ОДНОМЕРНЫЕ МАССИВЫ Конечная, упорядоченная по номерам совокупность значений, объединенных общим типом и именем – называется массивом. Например, массив Х из 30 элементов (целые числа) № Х 25 87 43 … … 29 17 30 33 Элементы массива
Массивы 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] =10 НОМЕР (ИНДЕКС) элемента массива : 2 ЗНАЧЕНИЕ элемента массива : 10
Описание массива на Паскале Массив целых чисел: имя начальный индекс конечный индекс тип элементов var A: array[1.. ] of integer ; const N=5; N var A : array[ 1 .. 5 ] of integer ; Размер через константу:
Массивы Program massiv_Opr_elem; Const N= 5 ; Var i:integer; M:array[1..N] of integer; Begin For i:=1 to N do begin { Вводим элементы массива } Readln(M[i]); end; For i:=1 to N do begin { Печатаем элементы массива } Write( ‘M[‘ ,I, ‘]=‘ ,M[i]); { в одной строке } End; End. Определяется массив из 5 элементов (целые числа). Значения элементов массива вводятся с клавиатуры . Вывод элементов массива на экран. Типовые задачи:
Массивы Program massiv_Opr_elem; Const N=10; Var k,s:integer; sr:real; M:array[1..N] of integer; begin Randomize; { активизируем датчик случайных чисел } For k:=1 to N do begin { Определяем элементы массива } M[k]:=random(101) – 50; { случ. числа от -50 до 50 } Writeln( M[k]); { Печатаем элементы массива в столбец } End; S:=0; For k:=1 to N do begin { Находим сумму } s:=s + M[k]; End; Sr:=s/n; { и среднее значение } Writeln( ‘ Сумма= ‘,s, ‘ Среднее значение = ’,sr:6:2); end. Заполнение элементов массива случайными числами и определение среднего арифметического.
Нахождение количества элементов Дан массив А, состоящий из 10 элементов, значения которого вводятся с клавиатуры. Подсчитать сколько элементов массива имеют значения меньшие некоторой величины t. Program zadacha; Var A: array [1..10]of real; i,k: integer; t: real; begin k:=0; write (‘ введите значение переменной t’); read (t); for i:=1 to 10 do begin writeln (‘ введите значение ’ ,i, ’ элемента массива ’); readln (a[i]); If a[i] Составить программу вычисления среднего арифметического модулей отрицательных элементов массива А(15). Элементы массива вводятся с клавиатуры {1,5; 0; -2; 8; -5,3; -7,1; 0; -4; 10; -2,3; -8; 1,5; -1; -2,5; 5} Program mod; Const N=15; Var i, k: integer; sr, s: real; A: array [1..N] of real; Begin S:=0; k:=0; For i:=1 to N do begin Writeln (‘ введите значение ’ ,i, ‘ элемента массива ’ ) ; Readln (a[i]); If a[i]<0 then begin k:=k+1; s:=s+abs(a[i]); end; end; Sr:=s/k; Write (‘ значение sr=’ , sr:6:2); end. Практикум по решению задач 1 вариант. Массив А (20) заполнен датчиком случайных чисел. Найти количество элементов, имеющих отрицательное значение. 2 вариант. Дан массив В(20) целых чисел, заполненный датчиком случайных чисел. Выяснить верно ли, что сумма элементов массива есть четное число. Домашняя работа 1 задача : Массив заполнен случайными величинами в диапазоне от -30 до 29 и состоит из N элементов. Подсчитать сколько в нём отрицательных, положительных и нулевых элементов. 2 задача: Задана последовательность из N целых натуральных чисел случайной величиной. Вычислить среднее арифметическое только тех элементов массива, порядковые номера которых совпадают со значением этого элемента. Организация ввода и вывода данных с использованием файлов Для массивов большого размера удобно производить ввод значений из текстового файла , заранее подготовив такой файл с исходными данными. Особенностью текстовых файлов является то, что они являются файлами последовательного доступа: нельзя прочитать какой-либо элемент текстового файла, не прочитав все предшествующие элементы. Аналогично нельзя записывать информацию в текстовый файл произвольным образом, писать в него можно только последовательно. Работа с файлами выполняется следующими процедурами: Assign – устанавливает связь между именем файла в программе (файловой переменной ) и физическим именем файла, принятым в ОС. Reset - открывает существующий файл для чтения. Rewrite – создает и открывает новый файл для записи на внешнем устройстве Close - закрывает открытый файл. Для определения конца файла используется стандартная встроенная функция EOF , которая принимает значение True, если достигнут конец файла, и значение False в противном случае. Program Vvod; var i: integer; a: array [1..10] of integer; f_in: text; Begin assign (f_in, 'C:\Users\PascalABC.NET\input.txt'); reset (f_in); i:=1; While not Eof (f_in) do begin read (f_in, a[i]); Write(a[i],' '); i:=i+1; End ; close (f_in); end . Program Vvod_ Vivod ; var i: integer; a: array [1..10] of integer; f_in, f_out: text; Begin assign (f_in, 'C:\Users\PascalABC.NET\input.txt'); reset (f_in); assign(f_out, 'C:\Users\PascalABC.NET\output.txt'); Rewrite ( f_out ); i:=1; While not Eof (f_in) do begin read (f_in, a[i]); write ( f_out , a [i], ‘ ‘ ); i:=i+1; End ; close (f_in); close ( f_out ); end . Вывод в файл Часто содержимое текстового файла представляет собой символьную последовательность, разделенную на строки. Каждая строка заканчивается специальным признаком EOLN (end of line) – конец строки. Задача : Создать текстовый файл из целых чисел. Файл должен содержать несколько строк. Вывести на экран удвоенные числа из файла, сохраняя вид записи по строкам. Например, для исходного файла, содержащего числа 4 5 0 1 на экране должно появиться: 8 10 0 2. program task; var f: text; s: integer; begin assing (f, ‘c:\test.txt’); reset (f); while not Eof (f) do begin while not Eoln (f) do begin read (f, s); write (2*s, ‘ ‘); end; writeln; end; close (f); end. Пример. В текстовом файле f.txt через пробел записаны целые натуральные числа. Переписать в файл f1.txt из файла f.txt все числа, за исключением максимальных (предполагается, что их может быть несколько). Program T_1; var f, f1: Text; a, max: longint; flag: Boolean; begin Assign(f, 'f.txt'); Reset(f); max:=0; while not Eof (f) do begin Read (f, a); if a>max then max := a; end; Assign(f1,'f1.txt'); Rewrite(f1); Reset(f); while not Eof (f) do begin Read(f, a); if a<>max then WriteLn (f1, a); end; Close(f); Close(f1); end. Файлы f и f1 находятся в тоже папке, что и программа. Практикум решения задач Дан текстовый файл input.txt , содержащий N целы x чисел. Найдите среднее арифметическое данных чисел, запишите ответ в выходной файл output.txt . Program poisc; const n = 15; var x : array [1..n] of integer; k , i, p: integer; B egin writeln('Введите число p>0 , которое будем искать в массиве'); readln(p); Randomize; k:=0; for i := 1 to n do begin x [i] :=random (50) ; if x [i] = p then k := k + 1; end; if k = 0 then writeln ('В массиве нет такого числа!') else writeln ('Число ’ ,p, ‘ в массиве присутствует ’ , k, ‘ раз ’) end. Подсчёт числа вхождений Р >0 в массив. Решение задач по обработке массивов Задание: Составить программу вычисления произведения положительных элементов массива В(20) в диапазоне от 0 до 10, стоящих на нечетных местах. Массив вводится с помощью датчика случайных чисел. Самостоятельная работа Задача. Найти сумму тех элементов массива X(10) , которые одновременно имеют четные и отрицательные значения. Значения массива вводятся с клавиатуры {0; - 1; -3; 4; -8; 0; 6 ; - 2; -1; -9}. Дополнительная задача. Заполните случайными числами два массива А(20) и В(20) в диапазоне от 0 до 10. Найдите только те элементы этих массивов, значения которых совпадают. Например, если А [2]= B[2]=4 , то на экран надо вывести: номер: 2 значение: 4 Если таких совпадений нет, то вывести на экран сообщение об этом. Вставка элементов в заданный массив Задача . Дан массив, состоящий из 20 элементов. Произвести вставку числа 10 в позицию m данного массива. Позиция m должна соответствовать диапазону 1 <=m<=n Program ZZZ; Const n=20; Var i, m: integer; A: array [1..n+1] of integer; Begin For i:=1 to n do readln (a[i]); Writeln (‘ введите номер индекса элемента вставки ’); Read (m); For i:=n+1 downto m+1 do a[i]:=a[i-1]; a[m]:=10; For i:=1 to n+1 do writeln (a[i]); end. Задача: Найти число элементов массива, которые больше своих «соседей», т.е. предшествующего и последующего элементов. Практика : Дан массив, состоящий из 1 0 элементов. Произвести вставку числа 0 в позицию 5 данного массива. Элементы массива определены датчиком случайных чисел от -19 до 20. Типовые задачи Нахождение экстремумов . Дан массив А(30), заполненный датчиком случайных чисел. Найти наибольшие и наименьшее значение массива. Program max_min; Var i,min,max: integer; A: array [1..30] of integer; Begin Randomize; For i:=1 to 30 do begin a[i]:=random(100); writeln (‘ значение ’,I,’ элемента = ‘,a[i]); end; Min:=a[1]; Max:=a[1]; For i:=2 to 30 do begin if a[i] … Max:=M[1]; Inmax:=1; For k:=1 to N do { Находим максимальное и его индекс } If M[k] > Max then begin Max:= M[k]; Inmax:=k; end; Writeln( ‘ Максимальное = M[‘, inmax, ‘]=‘,Max); … Фрагмент программы нахождения max элемента и его индекса Практикум 1. Дан массив B(40) , заполненный датчиком случайных чисел. Определить: а) максимальный элемент и его индекс; б) минимальный элемент и его индекс; в) на сколько максимальный элемент больше минимального; ЗАДАЧА. Массив задан датчиком случайных чисел на интервале [-37, 66]. Найти наименьший нечетный элемент. Размер произвольный. Задача 1: В одномерном массиве, состоящим из n вещественных элементов, найти количество элементов, стоящих после максимального по модулю элемента. Program Z1; const n=20; Var i, k, inmax: integer; X: array [1..n] of real; Max: real; Begin For i:=1 to n do begin x[i]:=random(100) -50; writeln (‘ значение ’,i,’ элемента = ‘,x[i]); end; Max:=x[1]; Inmax:=1; For i:=2 to N do If abs(x[i]) > Max then begin Max:= x[i]; Inmax:=i; end; K:=0; For i:=inmax +1 to n do k:=k+1; write (‘k=‘ ,k); End. Задача 2: Дан массив, состоящий из N целых чисел, заполненный датчиком случайных величин. Найти произведение элементов массива, расположенных после первого отрицательного элемента. Поменять местами значения элементов. Дан массив А(40), заполненный датчиком случайных чисел. Поменять местами 1-й элемент с последним элементом, 2-й элемент с предпоследним и т.д. Program obmen; Var i,p: integer; a: array [1..40] of integer; Begin Randomize; For i:=1 to 40 do begin a[i]:=random (100) -50 ; writeln (‘ значение ’,I,’ элемент массива= ‘,a[i]) ; end; For i:=1 to 20 do begin p:=a[i]; a[i]:=a[40-i+1]; a[40-i+1]:=p; end; For i:=1 to 40 do Writeln ( ‘a(‘ ,i, ’)=‘ , a[i]); End. 1 вариант. Дан массив X(20) , заполненный датчиком случайных чисел. Поменять местами минимальное значение и первый элемент массива. Дан массив А(15), заданный случайными числами в диапазоне от -10 до 10. Определите количество чётных и нечетных элементов массива. 2 вариант. Дан массив X(20) , заполненный датчиком случайных чисел. Поменять местами максимальное значение и последний элемент массива. Дан массив В(15), заполненный датчиком случайных чисел в диапазоне от -10 до 10. Найдите сумму всех четных элементов массива, имеющих нечетные номера или дать сообщение, что таких элементов нет. Формирование нового массива из элементов старого массива Дан массив X(20) , заполненный датчиком случайных чисел в диапазоне от -50 до 49 включительно. Сформировать новый массив Y из десяти первых положительных элементов массива X . Program zadacha; Label 1,2; Var X: array [1..20] of integer; Y: array [1..10] of integer; i,k: integer; Begin randomize; for i:=1 to 20 do begin x[i]:= random(100) -50; Writeln (‘ значение ’, I ,’ элемента массива= ‘ , x[i]); End; k:=o; For i:=1 to 20 do if x[i]>0 then begin k:=k+1; y[k]:=x[i]; if k=10 then goto 1 end; If k<10 then begin writeln (‘ элементов нет ’); goto 2; end; 1: writeln (‘ Элементы массива Y’); for k:=1 to 10 do writeln (y[k]); 2: end. program v10; const n=10; const m=15; var a: array [1..n] of integer; b: array [1..m] of integer; c: array [1..m] of integer; i,j,k,n1: integer; begin randomize; Write (‘ первый массив ’); for i:=1 to n do begin a[i]:=random(25); writeln (a[i]); end; write (‘ второй массив ’); for j:=1 to m do begin b[j]:=random(25); writeln (‘ значение ', j, ‘ элемента =' , b[j]); end; k:= 0 ; for i:=1 to n do begin for j:=1 to m do begin if a[i]=b[j] then begin k:=k+1; c[k]:=b[j]; end; end; end; writeln ('k=',k); n1:=k; write (‘ сформированный массив '); for k:=1 to n1 do writeln ('c[',k,']=',c[k]); end. Задача: Даны два одномерных массива разной размерности, заполненные датчиком случайных чисел. Сформировать массив, состоящий из элементов, принадлежащих и тому и другому массивам. Практикум решения задач Даны два массива одинаковой размерности. Получить третий массив такой же размерности, каждый элемент которого равен сумме соответствующих элементов данных массивов. Даны два одномерных массива одинаковой размерности. Получить третий массив той же размерности, каждый элемент которого равен наибольшему из соответствующих элементов данного массива. Метод «пузырька» Суть метода, в том, что последовательно сравнивают пары соседних элементов массива. Если первый элемент пары окажется больше второго, то они меняются местами и на второе место (как пузырёк) «всплывает» больший из двух элементов… Сравнение с перестановкой повторяются, пока не будет достигнут конец массива. В результате, начиная с конца массив упорядочен по возрастанию. Сортировка массива program sort_pyz; const n = 10; var a: array[1..n] of integer; i, j, p: integer; begin randomize; write (' Исходный массив: '); for i := 1 to n do begin a[i] := random( 31 ) -15 ; writeln (a[i]); end; for i := 1 to n-1 do begin { сортировка массива } for j := 1 to n - i do if a[j] > a[j+1] then begin p := a[j]; a[j] := a[j+1]; a[j+1] := p end; end; write (' Отсортированный массив: '); for i := 1 to n do writeln (a[i]); end. ДВУМЕРНЫЕ МАССИВЫ Положение элементов описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы. а 11 а 12 а 13 а 21 а 22 а 23 А = Матрица А размерностью 2*3 (две строки, три столбца) Номер элемента определяется пересечением строки и столбца. а 12 – элемент, стоящий в первой строке и во втором столбце . Объявление двумерного массива ОДИН ИЗ НЕСКОЛЬКИХ СПОСОБОВ Const n = 2; m = 3; Var A: array[1..n,1..m] of < тип элементов > ; Формирование двумерного массива осуществляется всеми возможными способами: ввод с клавиатуры, через генератор случайных чисел, помощью файла или др. Главная диагональ квадратной матрицы проходит из левого верхнего угла в правый нижний. А [3,3]= Побочная диагональ квадратной матрицы проходит из правого верхнего угла в левый нижний. А [3,3]= Соотношение индексов в квадратной матрице i- номер строки, j -номер столбца i=j Элементы матрицы находятся на главной диагонали i Ввод-вывод значений элементов матрицы с клавиатуры Program zadacha; Var A: array [1..10, 1..10] of real; I, j: integer; Begin For i:=1 to 10 do For j:=1 to 10 do begin readln (a[I,j] ) ; Writeln ( ’a(‘ ,I, ‘,’ ,j, ‘)=‘ , a[I,j]); end; end. Ввод двумерного массива А с помощью генератора случайных чисел Program dv_mas; Const n = 10 ; m = 15 ; { размерностью 10*15 } Var i, j: integer; a: array[1..n,1..m] of integer ; Begin Randomize ; { активизируем датчик случайных чисел } For i:=1 to n do { Определяем элементы массива } For j:=1 to m do begin A[i,j]:=random(51) – 25; { случ. числа от - 2 5 до 2 5 } Write( ‘a(‘ ,i, ’,’ ,j, ‘)=‘, A[i,j]:5); { Печатаем элементы массива } End ; End. Типовые задачи Суммирование значений элементов матрицы и нахождение количества. Дана матрица А(10,15), заполненная датчиком случайных чисел в диапазоне от 0 до 30. Найти сумму значений всех элементов данной матрицы и количество нулевых элементов. Program sum; Var A: array [1..10,1..15] of integer; I, j, s,k: integer; Begin S:=0; K:=o; Randomize; For i:=1 to 10 do For j:=1 to 15 do begin a[I,j]:=random(31); s:=s+a[I,j] ; If a[I,j]:=0 then k:=k+1; end; Writeln (‘ сумма значений= ‘ ,s); Writeln (‘ количество нулевых= ‘ ,k); end. Практикум по решению задач Дана матрица А(10, 20), заполненная датчиком случайных чисел в диапазоне от -10 до 19 включительно. Подсчитать количество положительных значений и сумму отрицательных значений элементов матрицы. Домашнее задание Заполнить двумерный массив с клавиатуры, найти произведение элементов по главной и сумму по побочной диагонали. Нахождение экстремумов Дана квадратная матрица В(10,10), заполненная случайными числами в диапазоне от -15 до 25 включительно. Выдать на печать максимальное значение элементов данной матрицы. Program max; Var B: array [1..10, 1..10] of integer; i, j, max: integer; Begin Randomize; for i:=1 to 10 do for j:=1 to 10 do begin b[i,j]:=random(41)-15; end; Max:= b[1,1]; for i:=1 to 10 do for j:=1 to 10 do begin if b[i,j]> max then max:=b[i,j]; end; Writeln (‘max=‘ , max); end. Нахождение наибольших элементов каждой строки массива : Program Stroki; const n=3; m=4; var a:array [1..n,1..m] of real; max: array [1..n] of real; i, j: integer; Begin { ВВОД МАССИВА с клавиатуры } ……………………………… for i:=1 to n do begin max[i]:=a[i,1]; for j:=2 to m do begin if max[i] ’); for i:=1 to n do writeln(‘max[‘ , i , ‘]’, max[i]); end. Практическая работа по вариантам: Написать программы: Нахождения наименьших элементов в строках матрицы; Нахождения наименьших элементов в столбцах матрицы. Перестановка строк массива: Program Stroki 2 ; const n=5; m=4; var a:array [1..n,1..m] of integer; i, j,r,b,c: integer; Begin { ВВОД МАССИВА }; ……………………………… Writeln (‘ Введите номера меняемых местами строк ’); Readln (r, b); for j:=1 to m do begin c:=a[r, j]; a[r, j]:=a[b, j]; a[b, j]:=c; end; Writeln (‘ Новый массив => ’); for i:=1 to n do for j:=1 to m do begin write(a[i, j],’ ‘); writeln; end; end. for i:=1 to n-1 do for j:=1 to n-i do begin x:=a[i,j]; a[i,j]:=a[n-j+1,n-i+1]; a[n-j+1,n-i+1]:=x end; Writeln (' Обмен элементов симметрично побочной диагонали'); for i:=1 to n do begin for j:=1 to n do write(a[i, j]); Составьте программу, меняющую местами значения элементов массива А(N,N) симметрично относительно побочной диагонали. Фрагмент программы: for i:=1 to n do for j:=1 to n do if i=j then begin tmp:=a[i,j]; a[i,j]:=a[i,n-i+1]; a[i,n-i+1]:=tmp; end; Поменять значения элементов побочной и главной диагонали Фрагмент программы Практикум решения задач Задача: Дана матрица А [3,6] , заполненная датчиком случайных чисел. В числовой матрице поменять местами два столбца, т. е. все элементы одного столбца поставить на соответствующие им позиции другого, а его элементы второго переместить в первый. const N = 3; M = 6; var a: array[1..N,1..M] of integer; i, j, a, b, buff: integer ; begin randomize; for i:=1 to N do begin for j:=1 to M do begin a[i,j] := random(4); write(a[i,j]:3); end; writeln; end; write(' Какие столбцы поменять местами: '); readln(a,b); for i:=1 to N do begin buff := a[i,a]; a[i,a] := a[i,b]; a[i,b] := buff; end; for i:=1 to N do begin for j:=1 to M do write(a[i,j]:3); writeln; end; end. Задача . Дана матрица. Сформировать одномерный массив, каждый элемент которого равен сумме отрицательных элементов соответствующей строки заданной целочисленной матрицы. Const n=10; m=10; Var S: array[1..n] of integer ; A: array[1..n,1..m] of integer ; i,j: integer; Begin Randomize; For i:=1 to n do For j:=1 to m do begin a[I,j]:= random (100) -50 End; For i:=1 to n do begin S [ i ]:=0; { задание начальных значений элементов массива суммы } For j:=1 to m do if A[ i,j ] < 0 then S[ i ]:= S[ i ] + A[ i,j]; End; Writeln (‘ Массив из суммы отрицательных элементов ’) ; For i:=1 to n do { Печатаем элементы массива S} Write( S[ i ]:5); end. Практикум Дана матрица, состоящая из 10 строк и 5 столбцов и заполненная случайными числами в диапазоне от -30 до 29. Сформировать одномерный массив из произведений положительных значений элементов каждого столбца матрицы. Упорядочить каждую строку матрицы по возрастанию. Массив размером Мх N, элементы которого задаются датчиком случайных чисел на интервале [-17;26]. program porydok; Const n=5; m= 6 ; Var a: array [1..n,1..m] of integer; i, j, t,k : integer; Begin Randomize; For i:=1 to n do begin For j:=1 to m do begin a[i,j]:=random(44)-17; write(a[i,j],' '); end ; Writeln; end; for i := 1 to n do begin for j := 1 to m do for k := 1 to m-j do if (a[i, k] > a[i, k+1]) then begin t:= a[i,k]; a[i,k]:= a[i,k+1]; a[i,k+1]:= t; end ; end ; writeln (' упорядоченная матрица'); For i:=1 to n do begin For j:=1 to m do write(a[i,j],' '); Writeln; end; End . Практика Упорядочить каждый столбец матрицы по убыванию. Массив размером Мх N, элементы которого задаются датчиком случайных чисел на интервале [-10;24].