Функции
Begin
Var
Begin
Var
Процедуры
Подпрограммы
End.
Begin
Var
Cортировка прямым выбором
End.
Begin
Begin
Сортировка методом прямого выбора
End.
Begin
Var
Сортировка методом вставки
for i := 2 to n do begin
x := a[i];
включение х на соответсвующее место среди a[i], … , a[i – 1]
end; {можно использовать бинарный поиск}
program insertsort;
const n = 8;
i, j : integer;
a: array [0..n] of integer;
a[1]:=30; a[2]:=17; a[3]:=73; a[4]:=47; a[5]:=22; a[6]:=11; a[7]:=65; a[8]:=54;
for i:=2 to n do begin
x:=a[i];
a[0]:=x {барьер}
while x < a[j – 1] do begin
a[j]:=a[j-1]; {поиск места вставки}
j:=j-1;
end;
a[j]:=x; {вставка}
1. Выбирает min элемент в неотсортированной части
2. Меняется местами с последним в уже отсортированной части.
for i:=1 to n-1 do begin
присвоить k индекс min из a[i + 1]..a[n]
a[k] поменять местами a[i]
end;
{ввод массива}
for i:=1 to n – 1 do
k:=i; x:=a[i];
for j:= i + 1 to n do if a[j] < x then begin
k:=j;
x:=a[k];
end;
a[k]:=a[i];
a[i]:=x;
end;
…
(пузырьковая сортировка)
Основан на сравнении и смене мест двух соседних элементов.
1-й этап | 17 30 47 22 11 65 54 73 |
2-й этап | 17 30 22 11 47 54 65 73 |
3-й этап | 17 22 11 30 47 54 65 73 |
4-й этап | 17 11 22 30 47 54 65 73 |
5-й этап | 11 17 22 30 47 54 65 73 |
Program bubblesoft;
const n=8;
i, j, k: integer;
a: array [1..n] of integer;
{ввод массива}
for j:=2 to n do
for i:=n downto j do
if (a[i] < a[i – 1]) then begin
x:=a[i];
a[i]:=a[i -1];
a[i -1]:=x;
end;
ЛЕКЦИЯ №12
Одним из принципов программирования больших программ является нисходящее программирование, т.е. разбиение программы на фрагменты меньшей сложности – подпрограммы. Концепция программирования, которая основана на использовании подпрограмм называется повторное использование кода.
В Паскале два вида подпрограмм – процедуры и функции.
Функция отличается от процедуры тем, что она возвращает результат в точку ее вызова и используется в выражениях.
Процедуры(функции) – группа логически связанных операторов, имеющих имя, которые можно вызвать по имени любое количество раз из различных мест программы.
Структура процедуры полностью аналогична программе. Отличие только в записи (не program, а procedure).
Процедуры делятся на два вида: с параметром и без.
Описание процедуры с параметром.
procedure <имя процедуры> (<список формальных параметров>); <блок>;
procedure ProcName(n: integer; x: real);
<список формальных параметров> -имена параметров и их тип отделяются «;»
С их помощью передают исходные данные для процедуры. Описание типов в заголовке запрещено.
Описание процедуры без параметров.
procedure<имя>; <блок>
Примеры описания процедур:
Описание процедур и функций выполняется в разделе процедур и функций программы, т.е. перед разделом операторов.
Примеры с параметром.
Procedure stepen1(n: integer; x: real; var y: real);
i: integer;
y:=1;
for i:=1 to n do y = y * x;
end;
Пример без параметра
Procedure stepen2;
i: integer;
y: real;
y:=1;
for i:=1 to n do y = y * x;
end;
Описание функций похоже на процедуру, с некоторыми оговорками
1) Используется слово function
2) Функция возвращает результат типа через свое имя, поэтому в заголовке указывается ее тип
3) Должен быть оператор присваивания имени функции результат вычислений
Описание функций
function <имя>(<список формальных параметров>):тип; <блок>
function <имя>:тип; <блок>
Примеры
function stepen3(n:integer; x: real): real;