Презентация "Одномерные массивы" 10 класс

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