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;
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;
Вывод массива в две строки 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, вывод осуществляется в строку
Заполнение массива 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
Нахождение суммы элементов массива удовлетворяющих условию:
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.
Подсчет количества элементов удовлетворяющих условию 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] 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 увеличиваем на единицу и повторяем процесс…
Вставка элемента с номером 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
Удаление элемента с номером 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
Да
Нет
Да
Нет
Цикл возвращающий процесс назад если такое число уже было
Цикл отвечающий за количество чисел в массиве
Цикл в котором проверяется не встречалось ли такое число
© ООО «Знанио»
С вами с 2009 года.