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