Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Алгоритмизация.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
445.44 Кб
Скачать

Тема 7. Подпрограммы, их классификация. (1 часа)

План лекции 9:

  1. Способы оформления подпрограмм.

  2. Обращение к подпрограммам.

  3. Передача фактических параметров.

Интерфейс подпрограммы или, иными словами, та информация, которая «представляет» подпрограмму и достаточна для корректного ее вызова, сосредоточена в заголовке.

Синтаксически любая программа выглядит следующим образом

<необязательный заголовок программы><блок>.

<необязательный заголовок программы>::=

program <идентификатор>;

<блок>::=

<описания типов, переменных, подпрограмм и т.п.>

begin <операторы> end

Два вида подпрограмм – процедуры и функции – одинаковый смысл и аналогичная структура, но различие в назначении и способе их использования.

Функции служат для определения алгоритма вычисления нового значения некоторого простого типа, и вызов функции должен быть операндом в выражении.

Процедуры служат для задания совокупности действий, направленных на изменение внешней по отношению к ним программной обстановки и, как следствие, определение новых значений переменных в программе. Вызов процедуры играет роль оператора.

Синтаксические диаграммы Пример:

Выходной параметр S у процедуры str4 имеет вещественный тип, поэтому лучшим решением является использование не процедуры, а функции.

var AB,BC,CD,AD,BD:real;

function str4(a,b,c:real):real;

{функция вычисляет площадь треугольника со сторонами a, b и c} var p:real;

begin p:=(a+b+c)/2;

S:=sqrt(p*(p-a)*(p-b)*(p-c)) end;

begin read(AB,BC,CD,AD,BD);

writeln('площадь=',str4(AB,AD,BD)+str4(BC,CD,BD));end.

Имеются два различных способа передачи фактических параметров в подпрограммы. Если в описании формального параметра ему предшествует var, то этот способ называется передачей параметра по ссылке, а сам параметр называется параметром-переменной. Если var отсутствует, то такой параметр называется параметром-значением, а способ – передачей параметра по значению.

Параметры-значения

Формальный параметр в этом случае считается обычной локальной переменной подпрограммы. Фактический параметр может быть произвольным выражением того же типа, что и формальный параметр.

Пример: var a,b:integer;

procedure h(x:integer;var y:integer);

begin x:=x+1; y:=y+1;

writeln(x,' ',y); end;

begin a:=0;b:=0;

h(a,b); =====> печать: 1 1

writeln(a,' ',b) =====> печать: 0 1 end.

Тема 8. Алгоритмы поиска и сортировки. (1 часа)

План лекции 10:

  1. Алгоритмы поиска: линейный поиск

  2. Алгоритмы поиска: поиск с барьером

  3. Алгоритмы сортировки: сортировка выбором

  4. Алгоритмы сортировки: сортировка обменом (методом "пузырька")

Задача поиска состоит в отыскании в последовательности элемента (или нескольких элементов) с заданными свойствами его значения. Например, найти элемент с наибольшим (наименьшим) значением или найти элемент с заданным значением.

Запишем пошаговую разработку алгоритма. Главное его свойство: все действия выполняются одинаково для всех элементов последовательности. Значит, основой его будет следующий цикл.

  1. Инициализация цикла.

  2. Пока есть элементы делай

Начало

    1. Сравнить эталон с очередным элементом последовательности

    2. Перейти к следующему элементу.

Конец.

Анализируем п.1. Нужно задать номер того элемента, с которого начнется сравнение, и определить эталон. Если в качестве эталонной переменной MIN выберем x1, то можно начать цикл с элемента номер 2. Тогда

  1. I:=2; MIN:=X[1];

Условие п.2. означает, что текущий номер элемента I не превысил заданную длину последовательности: I≤N.

Шаг 2.1. – условный оператор. Его особенность – в отсутствии действий после иначе, поэтому можем записать укороченную форму оператора

2.1. IF X[I]<MIN

THEN MIN:=X[I];

Шаг 2.2. – в увеличении индекса I на 1:

2.2. I:=I+1;

Объединяя шаги детализации, получим алгоритм:

Ввод (последовательность Х);

I:=2; MIN:=X[1];

WHILE I<=N DO

BEGIN

IF X[I]<MIN

THEN MIN:=X[I];

I:=I+1;

END;

Вывод (MIN);

Простой выбор

Это очень естественный способ сортировки, который обычно первым приходит на ум человеку, впервые столкнувшемуся с этой задачей.

Идея метода такова. Найдем в последовательности элемент с наименьшим значением и поменяем его местами с первым элементом. Затем проделаем те же действия с оставшимися N-1 элементами, затем с N-2 и так далее до тех пор, пока не останется один элемент – последний. Он будет наибольшим.

Проиллюстрируем процесс (табл.2.4).

Таблица 2.4 – Пример сортировки простым выбором

Номер элемента

1

2

3

4

5

6

7

8

Исходная последовательность

72

14

6

98

17

51

25

33

После выбора среди 8 элементов

6

14

72

98

17

51

25

33

7 элементов

6

14

72

98

17

51

25

33

6 элементов

6

14

17

98

72

51

25

33

5 элементов

6

14

17

25

72

51

98

33

4 элементов

6

14

17

25

33

51

98

72

3 элементов

6

14

17

25

33

51

98

72

2 элементов

6

14

17

25

33

51

72

98

Упорядоченная последовательность

6

14

17

25

33

51

72

98

Для составления алгоритма снова воспользуемся методом пошаговой детализации. Отметим, что для получения результата нам нужно N-1 раз находить минимальное значение в последовательности, длина которой каждый раз уменьшается. Кроме того, так как минимальный элемент нужно менять местами с определенным элементом последовательности, то номер минимального элемента нужно запоминать.

Обобщенно наш алгоритм можно записать так.

  1. I:=1;

  2. Пока I ≤ N-1

Начало

    1. найти минимальный элемент и его номер в последовательности AI, …, AN.

    2. поменять местами AI и минимальный элемент.

    3. I:=I+1;

Конец

Алгоритм поиска минимального элемента и его номера мы рассмотрели ранее, поэтому

2.1.

K:=I;

X:=A[I];

J:=I+1;

WHILE J<=N DO

BEGIN

IF A[J]<X

THEN BEGIN

X:=A[J];

K:=J;

END;

J:=J+1;

END;

В результате значением Х будет значение минимального элемента среди АI, ... AN, а значением К - номер этого элемента. Поэтому п. 2.2. можно записать конкретнее:

2.2. поменять местами элементы Ai и Ak

Это можно сделать так:

2.2. C:=A[I]; А[I]:=A[K]; A[K]:=C;

Однако в нашей ситуации дополнительная переменная С не нужна, так как ее роль играет Х из п. 2.1. Поэтому запишем:

2.2. A[K]:=A[I]; A[I]:=X;

Мы сэкономили на одном присваивании, а так как действие выполняется в цикле, то это немало.

Теперь запишем полностью алгоритм сортировки простым выбором.

Ввод (последовательность А);

I:=1;

WHILE I<=N-1 DO

BEGIN

K:=I;

X:=A[I];

J:=I+1;

WHILE J<=N DO

BEGIN

IF A[J]<X

THEN

BEGIN

X:=A[J];

K:=J;

END;

J:=J+1;

END;

A[K]:=A[I];

A[I]:=X;

I:=I+1;

END;