Массивы.ppt
- Количество слайдов: 32
Презентация по программированию Автор: учитель информатики МОУ Плесской СОШ Юдин А. Б. 2012 год
Определение 1 Массив – пронумерованная совокупность ячеек памяти, названная одним именем 1 2 3 4 5 6 7 44 22 10 Индекс14 30 19 11 Имя массива (порядковый номер) элемента массива А 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;
Описание массива 4 С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; В зависимости от задачи индексы элементов могут начинаться не только с единицы или быть символьного типа
Заполнение массива 1. Заполнение массива с клавиатуры For i: =1 to N do begin Write(' a [ ' , i , ' ] = ' ); Read. Ln ( a [ i ] ); End; i , 1, N Ввод a i 5
Заполнение массива 6 2. Заполнение массива случайными числами. For i: =1 to N do begin Например: m[i]: =RANDOM (А) Случайное число из интервала [ 5 ; 8). a[i]: =Random(B A)+A; случайное число из интервала [0; А) А = 5, В = 8, m[i] : =RANDOM(B A)+A; Write. Ln(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. Заполнение массива при помощи прогрессии. Заполнить a[1]: =3; массив числами 3, 5, 7, 9, 11 и т. д. На первом месте стоит 3 Writeln(a[1]); На втором 3+2 = 5 a 1 = 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
Вывод массива в две строки 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 a i = a i + 1 1 Разрыв блок-схемы, если она целиком на лист не убирается Вывод a i Конец
Заполнение массива 11 Составить программу заполняющую массив из Program n 2; 10 элементов, числовой последовательностью: Uses Crt; 1, 4, 9, 16… var a: array[1. . 10] of integer; (где A i = i 2 ) Значение элемента массива 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]: =значение: Изменения: Условия: a [ i ] : =5 – заменить i ый элемент на число 5 a [ i ] > 0 – положительный элемент массива a [ i ] : = a [ i ] – заменить i ый элемент на a [ i ] Mod 2 = 0 – четный элемент массива противоположный по знаку a [ i ] = int(a [ i ]) – целый элемент массива a [ i ] : = a [ i ] * 2 – удвоить каждый элемент a [ i ] = i – элемент массива равен своему массива порядковому номеру a [ i ] : = a [ i 1]+3 –заменить i ый элемент i Mod 2 = 0 – четные порядковые номера предшествующим плюс 3 a [ i ] = К – элемент массива равный числу К
Обработка массива 14 Блок-схема обработки массива Блок-схемаобработки и вывода Цикл обработки и вывода элементов массива в одном цикле на экран For i: =1 to N do begin 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]; Если элемент подходит Write. Ln ('Сумма = ', s: 10: 5); по условию, добавляем Нахождение. Предполагаем, что произведению произведения элементов массива его к удовлетворяющихэлемент подходит Если условию: произведение равно по единице условию, добавляем p: =1; его к сумме For i: =1 to N do If (условие) then p: =p* a[i]; Write. Ln('Произведение = ', p: 10: 5);
Подсчет количества элементов удовлетворяющих условию Подсчет количества элементов Предполагаем, что удовлетворяющих условию: таких элементов нет k: =0; For i: =1 to N do If (условие) then k: =k+1; Write. Ln('Кол во=', k: 10); Если такой элемент есть, то К увеличиваем на 1. k : = 0 i , 1, N условие нет Вывод k да k : = k + 1 16
Нахождение суммы элементов массива 17 Дан массив из 15 целых чисел заполненный случайными числами из интервала [0; 20]. Выведите этот массив в строку и найдите количество четных элементов массива, которые меньше среднего арифметического его элементов. Задача 4. Организуем цикл из Clr. Scr; Предполагаем, что Определяем число сумма равна нулю 15 повторений случайным образом s: =0; For i: =1 to 15 do begin a[i]: =Random(21); Добавляем write (a[i]: 10); к сумме Выводим его на S: =S+a[i]; экран end;
Нахождение суммы элементов массива Находим среднее. Выводим его на экран арифметическое 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]
Максимальный и минимальный элемент массива 19 Нахождение максимального элемента в массиве и его номера: Предполагаем, что Если находится наибольший элемент стоит на первом месте max: =a[1]; k: =1; for i: =2 to N do if (a[i]>max) then begin Когда массив max: =a[i]; закончился, выводим наибольший элемент Он становится k: =i; максимальным и его номер end; Write. Ln(‘Max=’, max: 10: 5); Write. Ln(‘Номер=’, 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 a i j ai>aj 1 1 2 2 2 3 3 4 4 -2 -2 4 4 4 6 6 1 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 -5 4 -5 -2 6 -5 6 -2 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 7 7 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: = a 2 a 1; flag: =true Вывод: Прогрессия Вывод: Не прогрессия i, 2, 9 Нет Конец ai+1 ai ≠ r Да flag: =false 1 Цикл в котором проверяется разность между соседними элементами
Поиск элемента 29 Задача 6. Дан массив из 10 случайных чисел из интервала от 10 до 10. Найти номер первого отрицательного элемента (Он обязательно существует) Пока элемент массива положителен или ноль берем следующий элемент // заполнить массив i: =1; while (a[i]>=0) do i: =i+1; write('Первое отрицательное ', a[i]: 4);
Заполнение массива 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;
Заполнение массива 31 i, 1, 10 flag=false a i = случайное[0; 10) j, 1, i 1 ai=a j Да Цикл отвечающий за количество Цикл в чисел возвращающий массиве процесс назад если такое число уже flag=true было Нет flag=false Да Вывод a i Цикл в котором проверяется не встречалось ли такое число


