Задание 3.1
Написать программу решения задачи. Указание: использовать процедуры задания массива случайным образом, ввода элементов с клавиатуры, вывода элементов массива на экран; используемые процедуры описать в модуле.
Задание 3.2
Написать программу решения задачи.
Указания:
1. Выполнить процедурную декомпозицию задачи методом пошаговой детализации. 2. Для ввода и вывода массива использовать процедуры, модуля, использованного при решении задания 3.1.
Пример 2
Сортировка по возрастанию массива A из N целых чисел.
Приведем текст процедуры сортировки. Описание константы N, типа mas, процедур заполнения массива и вывода массива на экран см. в примере 6.1.
Procedure sort(var a:mas);
Procedure obmen(x1, x2:integer;
{вспомогательная процедура, выполняющая обмен значений двух переменных х1 и х2}
var
t:integer;
begin
t:=x1;
x1:=x2;
x2:=t
end;
var i, k: integer;
{основная процедура}
begin
for i:=1 to n-1 do
{внешний цикл}
for k:=1 to n-i do
{внутренний цикл, в котором «всплывает» вверх наибольше из чисел a[1]..a[n-i]}
if a[k]>a[k+1] then obmen(a[k],a[k+1]);
end;
Пусть константа N=4, тогда протокол исполнения процедуры sort будет следующий:
действия |
a |
i |
k |
||||||||||
передача в процедуру аргумента a |
|
|
|
||||||||||
i := 1 |
|
1 |
|
||||||||||
i <= N-1 (1<=3 true) |
|
|
|
||||||||||
k:=1 |
|
|
1 |
||||||||||
k<=n-i (1<=3 true) |
|
|
|
||||||||||
a[k]>a[k+1] (a[1]>a[2] true) |
|
|
|
||||||||||
obmen(a[k],a[k+1]) |
Инд.
1
2
3
4
Знач.
7
9
5
8 |
|
|
||||||||||
k:=k+1 |
|
|
2 |
||||||||||
k<=n-i (2<=3 true) |
|
|
|
||||||||||
a[k]>a[k+1] (a[2]>a[3] true) |
|
|
|
||||||||||
obmen(a[k],a[k+1]) |
|
|
|
||||||||||
|
Инд.
1
2
3
4
Знач.
7
5
9
8 |
|
|
||||||||||
k:=k+1 |
|
|
3 |
||||||||||
k<=n-i (3<=3 true) |
|
|
|
||||||||||
a[k]>a[k+1] (a[3]>a[4] true) |
|
|
|
||||||||||
obmen(a[k],a[k+1]) |
Инд.
1
2
3
4
Знач.
7
5
8
9 |
|
|
||||||||||
k:=k+1 |
|
|
4 |
||||||||||
k<=n-i (4<=3 false) |
|
|
|
||||||||||
i:=i+1 |
|
2 |
|
||||||||||
i <= N-1 (2<=3 true) |
|
|
|
||||||||||
k:=1 |
|
|
1 |
||||||||||
a[k]>a[k+1] (a[1]>a[1] true) |
|
|
|
||||||||||
obmen(a[k],a[k+1]) |
Инд.
1
2
3
4
Знач.
5
7
8
9 |
|
|
||||||||||
k:=k+1 |
|
|
2 |
||||||||||
k<=n-i (2<=2 true) |
|
|
|
||||||||||
a[k]>a[k+1] (a[2]>a[3] false) |
|
|
|
||||||||||
k:=k+1 |
|
|
3 |
||||||||||
k<=n-i (3<=2 false) |
|
|
|
||||||||||
i:=i+1 |
|
3 |
|
||||||||||
i <= N-1 (3<=3 true) |
|
|
|
||||||||||
k:=1 |
|
|
1 |
||||||||||
k<=n-i (1<=1 true) |
|
|
|
||||||||||
a[k]>a[k+1] (a[1]>a[2] false) |
|
|
|
||||||||||
k:=k+1 |
|
|
2 |
||||||||||
k<=n-i (2<=1 false) |
|
|
|
||||||||||
i:=i+1 |
|
4 |
|
||||||||||
i <= N-1 (4<=3 false) |
|
|
|
||||||||||
передача в основную программу значения массива а |
Инд.
1
2
3
4
Знач.
5
7
8
9 |
|
|
