Презентация по программированию Автор: учитель информатики МОУ Плесской СОШ Юдин А.Б. 2012 год
Cлайд 2
Массив – пронумерованная совокупность ячеек памяти, названная одним именем 1 2 3 4 5 6 7 А A [ 4 ] := 11; Имя массива Индекс (порядковый номер) элемента массива Значение элемента массива Определение 1
Cлайд 3
Описание массива 2 Var имя:ARRAY[1..N] OF тип; Объявление массива в разделе описания переменных: Например: Var A:Array[1..10] of Integer; Var Tem:Array[1..100] of Real; Имя массива Количество элементов Тип элементов
Cлайд 4
Type t=array[1..10] of integer; Var a : t; Const m=10; Var a : array [1.. m] of integer; Количество элементов можно описать в разделе констант Иногда массив объявляют как пользовательский тип данных Описание массива 3
Cлайд 5
Сonst a:array[1..5] of integer = (3,-2,1,4,3); Массив констант Описание массива 4 Var N:Array ['A'..'Z'] of Integer; Var R:Array [-20..20] of Real; В зависимости от задачи индексы элементов могут начинаться не только с единицы или быть символьного типа
Cлайд 6
1. Заполнение массива с клавиатуры For i:=1 to N do begin Write(' a [ ' , i , ' ] = ' ); ReadLn ( a [ i ] ); End; Заполнение массива 5
Cлайд 7
2. Заполнение массива случайными числами. m[i]:=RANDOM (А) случайное число из интервала [0; А) m[i] :=RANDOM(B-A)+A; случайное число из интервала [A ; B) m[i] :=RANDOM(B-A+1)+A; случайное число из интервала [A ; B] Заполнение массива 6 Например: Случайное число из интервала [-5 ; 8). А = - 5, В = 8, подставим в формулу m[i] :=RANDOM(B-A)+A; m[i] :=RANDOM(8-(-5))+(-5); такую запись нужно упростить m[i] :=RANDOM(13)-5; For i:=1 to N do begin a[i]:=Random(B-A)+A; WriteLn(a[i]:10:5); End;
Cлайд 8
3. Заполнение массива при помощи прогрессии. Заполнить массив числами 3,5,7,9,11 и т.д. На первом месте стоит 3 На втором 3+2 = 5 На третьем 5+2 = 7 и т.д. То есть ai = ai - 1 + 2 Это арифметическая прогрессия. Заполнение массива 7 a[1]:=3; Writeln(a[1]); For i:=2 to N do begin a[i]:=a[i-1] + 2; Writeln(a[i]:5); End;
Cлайд 9
а) в столбик: For i:=1 to N do Writeln(a[i]:4:2); б) в строку For i:=1 to N do Write(a[i]:4:2); 2.23 3.19 1.44 4.93 5.58 2.23 3.19 1.44 4.93 5.58 Вывод массива 8
Cлайд 10
Вывод массива в две строки 9 Задача 1. Заполнить массив из 10 элементов случайными числами из интервала от -10 до 10, вывести на экран, а затем увеличить каждый элемент массива на 1 и повторно вывес ти на экран. var A:array [1..10] of integer; i:integer; Begin Clrscr; for i:=1 to 10 do begin a[i]:= random(21)-10; write(a[i]:5); end; writeln; for i:=1 to 10 do begin a[i]:=a[i]+1; write(a[i]:5); end; end. Оператор вывода без LN, вывод осуществляется в строку Пустой оператор вывода с LN, когда первая строка закончена, переход на вторую Оператор вывода без LN, вывод осуществляется в строку
Cлайд 11
Вывод массива в две строки 10 1 Пустой Writeln между циклами обычно в блок-схеме не изображают. Разрыв блок-схемы, если она целиком на лист не убирается
Cлайд 12
Заполнение массива 11 Задача 2. Составить программу заполняющую массив из 10 элементов, числовой последовательностью: 1,4,9,16… (где A i = i 2 ) Program n2; Uses Crt; var a:array[1..10] of integer; i:integer; begin clrscr; for i:=1 to 10 do begin a[i]:=i*i; write(a[i]:5); end; end. Значение элемента массива зависит только от порядкового номера
Cлайд 13
Заполнение массива 12 Задача 3. Составить программу заполняющую массив из 10 элементов, числовой последовательностью: 2, 3, 5, 9, 17 и т.д. Uses Crt; var a:array[1..10] of integer; i:integer; begin clrscr; a[1]:=2; write(a[1]:5); for i:=2 to 10 do begin a[i]:=2*a[i-1]-1; write(a[i]:5); end; end. Значение элемента массива зависит от предшествующего элемента
Cлайд 14
Изменение элементов массива удовлетворяющих условию 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 ] = К – элемент массива равный числу К Изменения: a [ i ] :=5 – заменить i-ый элемент на число 5 a [ i ] := - a [ i ] – заменить i-ый элемент на противоположный по знаку a [ i ] := a [ i ] * 2 – удвоить каждый элемент массива a [ i ] := a [ i - 1]+3 –заменить i-ый элемент предшествующим плюс 3 Обработка массива 13
Cлайд 15
Блок-схема обработки массива Блок-схема обработки и вывода в одном цикле Обработка массива 14 Цикл обработки и вывода элементов массива на экран For i:=1 to N do begin If (условие) then a[i]:=значение: Writeln(a[i]:5); end;
Cлайд 16
Нахождение суммы элементов массива удовлетворяющих условию: s:=0; For i:=1 to N do If (условие) then s:=s+ a[i]; WriteLn ('Сумма = ', s:10:5); Нахождение суммы и произведения элементов массива 15 Предполагаем, что сумма равна нулю Если элемент подходит по условию, добавляем его к сумме Нахождение произведения элементов массива удовлетворяющих условию: p:=1; For i:=1 to N do If (условие) then p:=p* a[i]; WriteLn('Произведение = ', p:10:5); Если элемент подходит по условию, добавляем его к произведению Предполагаем, что произведение равно единице
Cлайд 17
Подсчет количества элементов удовлетворяющих условию: k:=0; For i:=1 to N do If (условие) then k:=k+1; WriteLn('Кол-во=',k:10); Предполагаем, что таких элементов нет Если такой элемент есть, то К увеличиваем на 1. Подсчет количества элементов удовлетворяющих условию 16
Cлайд 18
Задача 4. Дан массив из 15 целых чисел заполненный случайными числами из интервала [0; 20]. Выведите этот массив в строку и найдите количество четных элементов массива, которые меньше среднего арифметического его элементов. ClrScr; s:=0; For i:=1 to 15 do begin a[i]:=Random(21); write (a[i]:10); S:=S+a[i]; end; Предполагаем, что сумма равна нулю Организуем цикл из 15 повторений Нахождение суммы элементов массива 17 Определяем число случайным образом Выводим его на экран Добавляем к сумме
Cлайд 19
Writeln; s:=s/15; Writeln('Среднее арифметическое = ',s:10:5); k:=0; For i:=1 to 15 do if (a[i] Mod 2 = 0) and (a[i]
Cлайд 20
Нахождение максимального элемента в массиве и его номера: 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:10:5); WriteLn(‘Номер=’,k:5); Предполагаем, что наибольший элемент стоит на первом месте Если находится больший элемент Он становится максимальным Когда массив закончился, выводим наибольший элемент и его номер Максимальный и минимальный элемент массива 19
Cлайд 21
max:= 1; for i:=2 to N do if a[i] > a[max] then max:=i; writeln('Максимальный элемент ',а[max]); writeln('Его номер ', Max); Иногда в задаче достаточно определить индекс наибольшего элемента Максимальный и минимальный элемент массива 20 Предполагаем, что наибольший элемент стоит на первом месте Если i-ый элемент больше стоящего на месте max то, запоминаем его индекс в переменной max
Cлайд 22
Сортировка элементов массива по возрастанию For i:=1 to N-1 do For j:=i to N do if (a[i]>a[j]) then begin p:=a[i]; a[i]:=a[j]; a[j]:=p; end; Сортировка массива 21 Перебираем элементы от первого до предпоследнего Перебираем от i-ого элемента до конца Если в оставшейся строке находится элемент меньше чем i-ый … То меняем их местами Сортировка массива: 4; -2; 6; -5 по возрастанию с изменениями происходящими в массиве
Cлайд 23
Сортировка массива 22 i, 1, N-1 j, i, N ai>aj p=ai ai=aj aj=p Да Нет Общая идея алгоритма: Берем i-ый элемент Последовательно сравниваем его со всеми элементами с права Если находится элемент меньший чем i-ый, то они меняются местами Так на i-ом месте окажется самый маленький элемент i увеличиваем на единицу и повторяем процесс…
Cлайд 24
Сортировка массива 23 Упорядочить по возрастанию: 4 -2 6 -5
Cлайд 25
Вставка элемента с номером p в последовательность For i:=N downto p do a[i+1]:=a[i]; a[p]:=значение; N:=N+1; За каждый оборот цикла смещаем элементы на один номер в право. Вставка и удаление элементов массива 24 Перебираем элементы от последнего до места на которое нужно вставить, На место с индексом Р ставим нужное значение и увеличиваем на 1 количество элементов 9 14 11 12 7 100 N p 9
Cлайд 26
Удаление элемента с номером p из массива: for i:=p to (N-1) do a[i]:=a[i+1]; N:=N-1; Вставка и удаление элементов массива 25 Перебираем элементы от места которое удаляем до предпоследнего элемента Уменьшаем на 1 количество элементов За каждый оборот цикла смещаем элементы на один номер в лево. 14 11 12 7 p 9 N 100
Cлайд 27
Вставка элементов удовлетворяющих условию в другой массив. Пусть нам дан массив с именем А, а переместить элементы нужно в массив В j:=0; For i:=1 to N do if (а[i]…) then begin j:=j+1; b[j]:=a[i]; end; K:=j; Порядковый номер элемента в массиве В Если элемент из А удовлетворяет условию То, увеличиваем количество элементов в В, и под этим индексом помещаем элемент из А Количество элементов в массиве В будет равно последнему порядковому номеру перенесенного элемента Выбор элементов массива в другой массив 26
Cлайд 28
Задача 5. Дан массив из 10 целых, положительных не повторяющихся чисел. Проверить образуют ли его элементы арифметическую прогрессию. Если образуют, то вывести разность прогрессии. // заполнить массив r:= a[2]-a[1]; flag:=true; For i:=2 to 9 do if (a[i+1]-a[i]r) then flag:=false; If flag then Begin Writeln('Арифметическая прогрессия'); Writeln('Разность = ',r:8); End else Writeln('Не арифметическая прогрессия'); Проверка массива 27 Находим разность между первым и вторым элементом Предполагаем, что массив – арифметическая прогрессия Организуем цикл от второго до предпоследнего элемента Если находится пара элементов, у которых другая разность, то это не арифметическая прогрессия Если значение истинно То выводим разность и соответствующее сообщение Иначе – выводим соответствующее сообщение
Cлайд 29
Начало Проверка массива 28 r:= a2-a1; flag:=true i, 2, 9 ai+1-ai ≠ r flag:=false flag=true 1 Вывод: Прогрессия Вывод: Не прогрессия Конец Заполнение массива и вывод его на экран 1 Нет Нет Да Да Цикл в котором проверяется разность между соседними элементами Условие проверяющее изменилась ли переменная Flag
Cлайд 30
Задача 6. Дан массив из 10 случайных чисел из интервала от -10 до 10. Найти номер первого отрицательного элемента (Он обязательно существует) Поиск элемента 29 // заполнить массив i:=1; while (a[i]>=0) do i:=i+1; write('Первое отрицательное ',a[i]:4); Пока элемент массива положителен или ноль берем следующий элемент
Cлайд 31
Заполнение массива 30 Задача 7. Заполнить массив из 10 элементов случайными числами из интервала [0; 10), так, чтобы числа не повторялись. For i:=1 to 10 do begin repeat flag:=false; a[i]:=random(10); for j:=1 to i-1 do if a[i]=a[j] then flag:=true; until flag=false; write(a[i]:5); end; Цикл отвечающий за количество чисел в массиве Цикл возвращающий процесс назад если такое число уже было Цикл в котором проверяется не встречалось ли такое число
Cлайд 32
Заполнение массива 31 i,1,10 flag=false a i = случайное[0;10) j, 1, i-1 ai=a j flag=true flag=false Вывод a i Да Нет Да Нет Цикл возвращающий процесс назад если такое число уже было Цикл отвечающий за количество чисел в массиве Цикл в котором проверяется не встречалось ли такое число