Название: методические указания к выполнению лабораторных работ по программированию для студентов направления 5528 «Информатика и вычислительная техника» и 5205 «Лингвистика»(Власенко О. Ф.,Беляева И. В. )

Жанр: Информационные системы и технологии

Просмотров: 3255


Основные алгоритмы обработки одномерных массивов

Общие замечанияАлгоритмы обработки массивов включают в себя, как правило, последовательную обработку каждого из элементов массива. Такая последовательная обработка называется сканированием массива, и для ее реализации удобнее всего использовать цикл for. Например, фрагмент программы, выполняющий подсчет суммы элементов массива имеет такой вид:…S:=0;   {Значение суммы S обнуляем}For i:=1 to N do {проходим по всем N элементам массива} S:=S+a[i];        {прибавляя к сумме S значение i-го элемента}…По сложившейся традиции, переменная, используемая в качестве счетчика цикла сканирования элементов массива, называется i. Если в программе требуется не одна, а две переменные-счетчики, то им дают имена i и j. Если же требуется более двух переменных- счетчиков, то первым двум дают имена i и j, а остальным, как правило, дают тоже однобуквенные имена (например k,l,z и т.д.). Все эти переменные должны иметь тип, совместимый с типом индекса элемента массива.Всего же при работе с одномерными массивами нужны:Константы:ConstmaxN = 20; {максимальное количество элементов в массиве}Типы:TypeIndexEl = 1 .. maxN; {тип индекса элемента}arrInt = array[IndexEl] of  integer; {тип массива целых чисел}Переменные:VarA:arrInt;   {обрабатываемый массив}n:integer;  {количество используемых элементов в массиве}i:IndexEl;  {счетчик, используемый для сканирования}Замечание:

1.  Знаком … будем обозначать, что некоторая часть исходного текста программы пропущена.2.  Если в алгоритме будут нужны еще какие-то переменные, тоони будут указаны дополнительно.Ввод/вывод массиваЗадача 1: Ввод массива с клавиатурыАлгоритм состоит из двух пунктов:1 . Ввод количества элементов.2 . Ввод элементов массива поодиночке в цикле.Фрагмент программы:…{1 - ввод количества элементов}repeat write('Введите n:'); readln(n);until (n>=1) and (n<=maxN);{2 - ввод элементов массива поодиночке}for i:=1 to n do begin write('a[',i,']'); readln(a[i]); end;…Задача 2: Заполнение массива случайными числами.Алгоритм состоит из трех пунктов:1 . Перезапустить генератор случайных чисел.2 . Ввести количество элементов n (или сгенерировать случайное значение n).3 . Сгенерировать значения для всех элементов.Фрагмент программы:…{1 - перезапускаем генератор  случайных чисел}randomize;{2 - генерируем случайное значение n}n:=random(maxN);

{3 - генерируем n элементов массива}for i:=1 to n doa[i]:=random(100); {каждый элемент примет значение из интервала 0..99}…Краткая информация об используемых стандартных процедурах и функциях:Randomize  - инициализирует генератор случайных чисел случайным значением (случайное значение зависит от момента перезапуска, т.е. зависит от времени).Random(Num)  - возвращает случайное целое число, находящееся в интервале 0 .. (Num-1)  (Например, если Num=100 (как в нашем примере), то Random возвращает числа в интервале от 0 до 99).Если Num<=0,  то  Random всегда  будет возвращать 0.Чтобы получить значения в интервале, отличном от [0..Num-1], необходимо к значению, возвращаемому Random, прибавить смещение начала интервала.Пример 1: необходим интервал [-50 .. 50].Длина интервала  101, смещение начала интервала –50.random(101)-50Пример 2:  необходим интервал [20  .. 30].Длина интервала - 11, смещение начала интервала 20.random(11)+20Пример 3:  необходим интервал [-1000 .. -500]Длина интервала 501, смещение начала интервала -1000random(501)-1000Задача 3: Вывод  массива.Алгоритм состоит из двух пунктов:1.  Вывод имени массива.2.      Вывод массива по элементам.Фрагмент программы:…{1 - вывод имени массива}writeln ('Массив А[',n,']');{2 - вывод элементов массива} for i:=1 to n do writeln('A[',i,']=',a[i]);…

Вычисление суммы и среднего арифметического элементов массиваЗадача 4: Подсчитать сумму элементов массива.Алгоритм содержит два пункта:1. Сумма S=0.2. Проход по всем элементам массива и прибавление их значений к сумме S.Приведем полный текст программы – решение этой задачи:{Пример обработки одномерного массива}{ Задание: Ввести массив. Подсчитать сумму элементов массива.} Program  SumExample;Const {определение констант}maxN = 20; {максимально возможное количество элементов в массиве}Type {определение типов}IndexEl = 1 .. maxN; {индексы массива лежат в интервале от 1 до maxN}arrInt = array[interval]  of integer; {массив целых чисел содержащий до maxN элементов}Vara:arrInt;            {массив}n:interval;   {размерность массива}i:IndexEl;      {переменная для сканирования массива} S:integer;         {сумма элементов массива}Begin{ ввод массива с клавиатуры }write(‘Введите n=’);read(n); {ввод количества элементов}for i:=1 to n doread(A[i]); {ввод самих элементов}{Подсчет суммы элементов массива}{1}  s:=0;{2} for i:=1 to n do s:=s+A[i];{Вывод полученного значения суммы}writeln(‘сумма элементов массива S=’, S);end. {конец программы}

Задача    5:      Вычислить     среднее           арифметическое        элементов массива.Алгоритм         содержит            три      пункта.           Первые           два      совпадают      с предыдущей задачей:1. Сумма s=0.2. Проход по всем элементам массива и прибавление их значений к сумме s.3. Сумму делим на количество элементов массива sa=s/n .Фрагмент программы:Var {дополнительные переменные}s: integer; {сумма элементов массива}sa:real;   {среднее арифметическое элементов массива}… Begin...{1}  s:=0;{2} for i:=1 to n do s:=s+A[i];{3} s:=s/n;…Поиск максимального/минимального элемента  массиваЗадача 6: Найти значение максимального элемента массива.Алгоритм содержит три пункта:1. Максимальным элементом считаем первый элемент: max=A[1].2.                      Начиная    со    второго    элемента,    сравниваем    имеющийся максимальный элемент max с очередным элементом массива A[i].3.                Если    очередной    элемент    массива    больше    имеющегося максимального элемента, то это и есть новый максимальный элемент max=A[i].Фрагмент программы:Var {дополнительные переменные}max:integer; {значение максимального элемента массива}… Begin...{1}  max:=A[1];

{2} for i:=2 to n do{3} if A[i]>max then max:=A[i];…Задача 7: Найти min и max значения элементов массива.Фрагмент программы:Var {дополнительные переменные}max,min:integer;{значение максимального и минимального элементов массива}… Begin... max:=A[1];min:=A[1];for i:=2 to n doif A[i]>max then max:=A[i]else if A[i]<min then min:=A[i];…Подсчет количества элементов, удовлетворяющих заданному условиюЗадача  8:     Подсчитать,  сколько  раз  в  массиве         встречается элемент, равный 10.Задача решается по следующему алгоритму:1. Количество нужных элементов k=0.2. Проходим по всем элементам массива,3. И если очередной элемент массива равен 10,4. Тогда увеличиваем k (количество элементов равных 10) на 1.Фрагмент программы:Var {дополнительные переменные}k:integer; {количество элементов, равных 10}… Begin...{1}  k:=0;{2} for i:=1 to n do{3}     if A[i]=10{4}  then k:=k+1;…

Удаление элемента из массиваЗадача 9: Удалить из массива 1-ый элемент.Удаление элемента заключается в:1. сдвиге элементов, стоящих правее удаляемого влево;2.  уменьшении  количества  элементов  массива  n  на  количество удаляемых элементов.Сдвиг элементов выполняется так:1. Начиная с удаляемого элемента, копируем содержимое элемента,стоящего правее в текущий элемент: A[i]:=A[i+1].2. Переходим к следующему элементу вправо: i:=i+1.3. Заканчиваем сдвиг, когда i=n-1, так как i+1  при i=n-1 равен n..Фрагмент программы:…{1 - сдвигаем элементы на одну позицию вправо}{вначале i:=1, потому что надо удалить 1-ый элемент}for i:=1 to n-1 doA[i]:=A[i+1];{2 - уменьшаем количество элементов в массиве}n:=n-1;…Задача 10: Удалить из массива максимальный элемент массива.Для этого надо:1. Найти индекс максимального элемента.2. Удалить элемент с найденным индексом.Фрагмент программы:Var {дополнительные переменные}imax:IndexEl; {индекс максимального элемента}… Begin...{1 - ищем индекс максимального элемента массива}imax:=1; {вначале imax указывает на первый элемент}{в цикле начиная со 2-го элемента}for i:=2 to n do{сравниваем i-ый элемент с максимальным на текущий момент времени, и если i-ый элемент больше

максимального, то максимальным становитсяi-ый элемент}if A[i]>A[imax] then imax:=i;{2 - удаляем элемент массива с индексом imax}for i:=imax to n-1 doA[i]:=A[i+1];dec(n); {уменьшаем n на 1}Замечание: в ТР имеются процедуры увеличения и уменьшения переменной целого типа.Inc - увеличение значения переменной.

Вид вызова

для целого X

Inc(x);

x:=x+1;

Inc(x,n);

x:=x+n;

где  x - переменная целого типа;n - целочисленное выражение.В первом случае переменной x   присваивается следующее значение (например, x была равна 10, тогда после выполнения inc(x) x  равна  11).  Таким  образом,  можно  сказать,  что  запись  inc(x)эквивалентна записи x:=x+1.Можно также сказать, что запись inc(x,n) эквивалентна записиx:=x+n.Dec – уменьшение значения переменной.

Вид вызова

Для целого X

Dec(x);

x:=x-1;

Dec(x,n);

x:=x-n;

Вставка новых элементов в массивЗадача  11:  В  массив  после  максимального  элемента  вставить элемент, равный 0.Пример исходного массива A:           1 2 5 1 0 1 2максимальный элемент A[3]=5Массив после вставки элемента: 1 2 5  0 1 0 1 2Алгоритм вставки элемента в массив:1. Сдвинуть элементы от позиции вставляемого элемента в конец.2. В позицию вставляемого элемента вписать нужное значение.

3. Количество элементов n увеличить на 1 .Общий алгоритм программы следующий:1 . Введем массив А.2 . Найдем индекс max элемента.3 . Вставим после max 0.4 . Выведем получившийся массив.Приведем полный текст программы:{Пример обработки одномерного массива}{ Задание: В массив после максимального элемента вставить элемент, равный 0}Program InsertExample;Const {определение констант}maxN = 20; {максимально возможное количество элементов в массиве}Type {определение типов}IndexEll = 1 .. maxN; {индексы массива лежат в интервале от 1 до maxN}arrInt = array[interval]  of integer; {массив целых чисел,содержащий до maxN элементов}Vara:arrInt;         {массив}n:integer;     {количество элементов в массиве}i:IndexEl;    {переменная для сканирования массива}max: IndexEl; {номер max элемента массива}Begin{1 - ввод массива - генерируем случайные элементы}randomize;n:=random(6)+5; {n в интервале 5..10}for i:=1 to n doA[i]:=random(19)-9; {Генерируем элементы массива}{ каждый элемент имеет значение в интервале -9..9}{2 - ищем индекс max элемента}max:=1;for i:=2 to n doif A[i]>A[max] then max:=i;{3- вставляем 0 после максимального элемента}{сначала сдвигает “хвост” массива вправо}for i:=n downto max+1 doA[i+1]:=A[i];{заносим в следующий за максимальным элемент 0} A[max+1]:=0;

{увеличиваем количество элементов массива} Inc(n);{4 - выводим массив}writeln('Массив А после вставки:');for i:=1 to n do write(A[i]:3);readln;  {ждем нажатия клавиши Enter} End.Данная программа демонстрирует модульный подход к решению задач - задача разбивается на подзадачи, полученные подзадачи решаются отдельно. Если подзадача не решается непосредственно, то она снова разбивается на подзадачи и т.д.   Такой   подход называется "программирование сверху вниз".Замечание: данная программа таит в себе ошибку. Если n=20, то после вставки еще одного элемента n станет равной 21, и, скорее всего, программа повиснет (потому что элементов в массиве может быть НЕ БОЛЬШЕ 20). Следовательно, при вставке   элементов необходимо следить, чтобы было n<=maxN .Удаление нескольких элементов массиваЗадача 12: Удалить из массива все элементы между k-м и z-м элементами.Рассмотрим задачу на примере при количестве элементов в массиве n=10, k=3, z=7 (т.е. надо удалить элементы между третьим и седьмым).Будем использовать переменную d - количество удаляемых элементов. Значение d можно вычислить по формуле: d = z - k – 1 ( в нашем примере получится d = 7 - 3 - 1 = 3).Массив  A до   удаления:a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]1    3          9          1          0          1          3          2          7            2^        ^          ^a[k]    a[z]      a[n]Массив  A после удаления:a[1] a[2] a[3] a[4] a[5] a[6] a[7]

 

1

3

9

3

2

7

2

 

 

^a[k]

^a[z]

 

 

^a[n]

После удаления n стало меньше на d (в нашем примере на 3).Общий алгоритм решения:1 . Сдвинуть элементы вперед на d элементов, начиная с z-го.2 . Уменьшить n на d.Фрагмент программы:Var {дополнительные переменные}k: integer; {индекс элемента, после которого удаляем}z: integer; {индекс элемента, до которого удаляем}d: integer; {количество удаляемых элементов}… Begin…{вычисляем количество удаляемых элементов}d:=z-k-1;{1 - сдвигаем элементы}for i:=z to n doA[i-d]:=A[i];{2 - уменьшаем n на d} Dec(n,d);…Задача 13: Из массива удалить все элементы, которые меньше 0.Рассмотрим два решения этой задачи.Алгоритм первого решения:1. Просматриваем массив .2. Если элемент<0, то удаляем его и n уменьшаем.3. Если элемент>=0, то переходим к следующему.Фрагмент программы:…{в цикле просматриваем элементы массива}i:=1;while i<=n do begin{проверяем ,не нужно ли i-ый элемент удалять}if A[i]<0 then begin{если нужно – удаляем i-ый элемент}

for j:=i to n-1 do {сдвигаем} A[j]:=A[j+1];Dec(n); {уменьшаем количество элементов}endelse Inc(i); {если удалять не нужно, то переходим к следующему элементу}end;Пример прогона алгоритма:Исходный  массив:0: i=1, n=6: -1 -2        2 -3 -4  3Состояния массива после обработки очередного элемента массива:

1:

i=1,

n=5:

-2

2

-3

-4

3

(удален  -1)

2:

i=1,

n=4:

2

-3

-4

3

 

(удален  -2)

3:

i=2,

n=4:

2

-1

-2

3

 

(перешли  на   следующий)

4:

i=2,

n=3:

2

-4

3

 

 

(удален  -3)

5:

i=2,

n=2:

2

3

 

 

 

(удален  -4)

6:

i=3,

n=2:

2

3

 

 

 

(перешли  на   следующий)

Алгоритм второго решения:1. Счетчик переписанных элементов k=0.2. Просматриваем элементы массива.3.      Если    элемент          A[i]      не        меньше           0,         k          увеличиваем  на        1          и переписываем элемент A[i] на k-ое место.4.         После  просмотра      всего   массива          количество            переписанных элементов k заносим в n.Фрагмент программы:Var {дополнительные переменные}k:IndexEl; {количество переписанных элементов}… Begin...{1 - переписанных элементов пока не было}k:=0;{2 - в цикле просматриваем  элементы массива}for i:=1 to n do{3 - если A[i] не <0} if not(A[i]<0) then beginInc(k); {увеличиваем значение k на 1}A[k]:=A[i];  {переписываем i-ый элемент в позицию k}end;

{4 - в массиве оставляем k элементов}n:=k;Пример прогона алгоритма:Исходный  массив: -1  -2   2 -3 -4            3Состояния массива после просмотра очередного элемента массива:

0:

k=0,

i=1,

n=6:

-1

-2

2

-3

-4

3

{не   переписываем}

1:

k=0,

i=2,

n=6;

-1

-2

2

-3

-4

3

{не   переписываем}

2:

k=1,

i=3,

n=6;

2

-2

2

-3

-4

3

{переписываем

 

 

 

 

 

 

 

 

 

 

a[1]:=a[3]}

3:

k=1,

i=4,

n=6;

2

-2

2

-3

-4

3

{не   переписываем}

4:

k=1,

i=5,

n=6;

2

-2

2

-3

-4

3

{не   переписываем}

5:

k=2,

i=6,

n=6;

2

3

2

-3

-4

3

{переписываем

 

 

 

 

 

 

 

 

 

 

a[2]:=a[6]}

6:

k=2,

i=7,

n=6:

2

3

2 -3 -4 3

{выход из  цикла}

7:

n=2:

 

 

2

3

{значение  k

переписываем в  n}

Обработка нескольких  массивовЗадача 14: Массивы А и В имеют одинаковую длину. Массив С необходимо заполнить суммами соответствующих элементов массивов А и В. n - длина массивов А и В (и С тоже).Фрагмент программы:…{проходим по всем элементам массивов}for i:=1 to n do{сумму i-ых элементов массивов A и B заносим в i-ый элемент C} C[i]:=A[i]+B[i];…Задача 15: В конец массива А[n] приписать все элементы массиваВ[m].Фрагмент программы:…{проходим в цикле по массиву B}for i:=1 to m doA[n+i]:=B[i]; {дописываем элементы в хвост A} Inc(n,m); {увеличиваем значение n (длину массива A) наm (длину массива B)}…

Замечание: Необходимо  следить, чтобы n не превысило значениеmaxN.Например, так:…if n+m>maxNthen writeln('В массив А все элементы массива В не поместятся')else ... {а вот здесь выполняем добавление элементов}Задача 16: Сформировать массив В из отрицательных элементов массива А. Массив А не изменять.Фрагмент программы:…m:=0; {m - количество элементов в массиве В -вначале массив B пустой}{проходим по всем элементам массива A}for i:=1 to n doif A[i]<0 then {если i-ый элемент массива A отрицательный}begin{то копируем его в массив B}Inc(m);       {в B добавляется еще один элемент -увеличиваем m на 1}B[m]:=A[i];  {копируем i-ый элемент массива Aв m-ый элемент массива B}end;…Задача 17: Подсчитать, сколько элементов массива А совпадают с элементами массива В.Алгоритм программы:1. Ввести массив А[n].2. Ввести массив В[m] .3. Счетчик совпадений cnt обнулить.4. Пройти по всем элементам массива A.5. Сравнить i-ый элемент массива А со всеми элементами массива В.6. Если А[i] совпадает хотя бы с одним элементом массива B,то счетчик повторений увеличить на 1.7. Вывести количество совпадений.Текст программы:

{Подсчитать, сколько элементов массива А совпадают с элементами массива В}Program TwoArrayExample; ConstmaxN = 20; {максимальное количество элементов массива} TypeIndexEl = 1 .. maxN; {индексы массива лежат в интервалеот 1 до maxN}arrInt = array[IndexEl] of integer; {массив целых чисел,содержащий до maxN элементов}Vara,b:arrInt;    {массивы  A и B} n:integer;{количество элементов массива A} m:integer;{количество элементов массива B} i,j:IndexEl; {переменные для сканирования массивов}cnt: integer; {количество совпадений элементов A с элементами B}k: integer;   {количество совпадений элемента A[i] с элементами B} Begin{1 - ввод массива A}{ ввод количества элементов}repeat write('Введите n:'); readln(n);until (n>=1) and (n<=maxN); {выйдем из цикла лишь тогда,  когдаn будет принадлежать интервалу [1..maxN]}{ ввод элементов массива A поодиночке}for i:=1 to n do beginwrite('a[',i,']');readln(a[i]);end;{2 - ввод массива B}{ ввод количества элементов}repeatwrite('Введите m:');readln(m);until (m>=1) and (m<=maxN);{ ввод элементов массива B поодиночке}for i:=1 to m do begin write('b[',i,']'); readln(b[i]); end;

{3 - счетчик повторений обнуляем}cnt:=0;{4 - проходим по всем элементам массива A}for i:=1 to n do begin{5 - сравниваем i-ый элемент массива А со всеми элементами массива В}k:=0;  {k - количество совпадений i-го элемента массива Aс элементами массива В}{считаем количество совпадений A[i] с элементами массива B}for j=1 to m doif A[i]=B[j] then Inc(k);{6 - если А[i] совпадает  хотя бы с одним элементом массива B,счетчик повторений увеличить на 1}if k>0 then Inc(cnt);end;{7 - выводим количество повторений} writeln('Количество совпадений cnt=',cnt); readln;  {ждем нажатия клавиши Enter}End.Проверка соседних элементов массиваЗадача 18: Подсчитать, сколько в массиве элементов, равных 0,справа и слева от которых стоят отрицательные элементы.Фрагмент программы:…k:=0;   {количество таких элементов}{проходим по всем элементам массива A}{начинаем не с первого, а со второго, потому что у первого элемента нет стоящего слева от него}{заканчиваем на n-1 элементе, а не на n, потому что у последнегоn-го элемента нет элемента, стоящего от него справа}for i:=2 to n-1 do{если i-ый элемент равен 0 и элемент слева от него иэлемент справа от него отрицательные}if (A[i]=0) and (A[i-1]<0) and (A[i+1]<0)then Inc(k); {тогда увеличиваем счетчик}…

Задача 19: Найти номер первого элемента массива, который находится между двумя положительными элементами.Фрагмент программы:…k:=0; {k - номер искомого элемента}i:=2; {начинаем со второго элемента}while (i<=n-1) and (k=0) do {пока не нашли искомый элемент и не просмотрели все элементы массива}begin{если элемент тот, что надо, то запоминаем его индекс}if (A[i-1]>0) and (A[i+1]>0) then k:=i;Inc(i); {переходим к следующему элементу}end;{выводим позицию искомого элемента}if k=0then writeln('искомых элементов в массиве нет')else writeln('искомый элемент занимает  позицию ',k);Сортировка массива и работа с отсортированным массивомЗадача 20: Отсортировать массив по возрастанию.Массив A является отсортированным (упорядоченным) по возрастанию, если для всех i из интервала [1..n-1] выполняется условие A[i]<=A[i+1].Существует множество методов сортировки, мы же воспользуемся один из самых простых - метод сортировки выбором (поиском минимального).Суть этого метода сортировки заключается в следующем:1. В массиве находим минимальный элемент.2. Меняем минимальный элемент с первым.3. В усеченном (исключая первый элемент) массиве находим минимальный элемент.4. Ставим его на второе место.И так далее  n-1 раз.Пример:Массив A, исходное состояние 1 3 0 9 2

Процесс сортировки

0:

1 3 0 9 2

min=a[3]=0

Переставляем a[1]<->a[3]

1:

0|3 1 9 2

min=a[3]=1

Переставляем a[2]<->a[3]

2:

0 1|3 9 2

min=a[5]=2

Переставляем a[3]<->a[5]

3:

0 1 2|9 3

min=a[5]=3

Переставляем a[4]<->a[5]

4:

0 1 2 3 9

Готово

 

Здесь знак | отделяет уже отсортированную часть массива от еще не отсортированной.На Turbo Pascal этот алгоритм будет выглядеть следующим образом:Var {дополнительные переменные}buf: integer; {через buf будем менять значения двух элементов массива}imin:IndexEl; {индекс минимального элемента неотсортированной части  массива}…Begin…{n-1 раз ищем минимальный элемент массива}for i:=1 to n-1 do begin{Ищем минимальный элемент в несортированной части   массива (от i-го элемента)}imin:=i;  {imin - это  индекс минимального элемента массива}for j:=i+1  to n doif A[j]<A[imin] then imin:=j;{переставляем i-ый и imin-ый элементы}buf:=A[i]; A[i]:=A[imin]; A[imin]:=buf; End;…Задача 21. Вставить в упорядоченный по возрастанию массив новый элемент таким образом,чтобы сохранилась упорядоченность.Алгоритм решения задачи следующий:1. Ищем в массиве тот элемент, который больше вставляемого, – для этого последовательно просматриваем все элементы, начиная с первого.2. Увеличиваем длину массива на 1.3. После  этого   все       элементы,       стоящие          правее от        найденного,включая его самого, сдвигаются вправо.4. На освободившуюся позицию вставляется искомый элемент.

Замечание: если все элементы массива меньше вставлямого, то новый элемент надо вставить в конец массива. Если все элементы массива больше вставляемого, то новый элемент надо вставить в начало массива.Пример:  Надо вставить 5 в массив A: 3  4  7 91. Ищем элемент, больший вставляемого. Это элемент A[3]=7.2. Увеличиваем длину массива на 1.Получаем массив A: 3 4 7 9 X3. Сдвигаем элементы, начиная с 3-го, вправо.Получаем массив A: 3 4 7 7 94. В элемент A[3] заносим 5.Получаем массив: 3 4 5 7 9Фрагмент программы, реализующей данный алгоритм:…{считываем число, которое надо вставить в массив}read(g);{1. Ищем элемент больше вставляемого }k:=1; {k – индекс сравниваемого элемента}while (k<=n) and (g>=a[k])  do {если k не вышла за границу n,и  вставляемый элемент меньше или равен A[k]}k:=k+1; {то переходим к следующему элементу}{2. Увеличиваем длину массива на 1}n:=n+1;{3. Сдвигаем элементы начиная с k-го вправо}for i:=n downto k+1 do a[i]:=a[i-1];{4. В A[k] заносим g}a[k]:=g;…