
- •Конспект лекций
- •Тема 1. Программные средства пк. Основы алгоритмизации задач.
- •Тема 2. Программирование на базовом процедурно-ориентированном алгоритмическом зыке. Классификация операторов алгоритмического языка. Оператор присваивания. Операторы управления. (2 часа)
- •Тема 3. Описание линейных и разветвляющихся структур алгоритмов. Программирование разветвляющихся структур.(1 часа)
- •Тема 4. Организация выполнения программ на пк. Структуры данных: массивы. Множества. Записи. (2 часа)
- •Тема 5. Организация алгоритмов циклической структуры. Алгоритмическое описание вложенных циклических структур. (1 часа)
- •Оператор цикла с параметром
- •Оператор цикла с постусловием
- •Примеры бесконечных циклов
- •Тема 6. Программирование ввода-вывода массивов. Строковые данные. Библиотека стандартных подпрограмм. (1 часа)
- •Тема 7. Подпрограммы, их классификация. (1 часа)
- •Параметры-значения
- •Тема 8. Алгоритмы поиска и сортировки. (1 часа)
- •Тема 9. Программирование в среде delphi. (1 часа)
- •Тема 10. Работа с файлами. Различные типы файлов.
- •Тема 11. Динамические структуры данных. Указатели. Работа с очередями и стеком. (2 часа)
- •Добавление в конец списка
- •Рекурсивная процедура добавления элемента в список
- •Включение в список
- •Рекурсивная процедура удаления элемента из списка
- •Тема 12. Машинная графика.Примеры программ с различной структурной организацией. (1 часа)
- •Литература
Тема 7. Подпрограммы, их классификация. (1 часа)
План лекции 9:
Способы оформления подпрограмм.
Обращение к подпрограммам.
Передача фактических параметров.
Интерфейс подпрограммы или, иными словами, та информация, которая «представляет» подпрограмму и достаточна для корректного ее вызова, сосредоточена в заголовке.
Синтаксически любая программа выглядит следующим образом
<необязательный заголовок программы><блок>.
<необязательный заголовок программы>::=
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. Нужно задать номер того элемента, с которого начнется сравнение, и определить эталон. Если в качестве эталонной переменной MIN выберем x1, то можно начать цикл с элемента номер 2. Тогда
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 |
|
6 |
14 |
72 |
98 |
17 |
51 |
25 |
33 |
7 элементов |
6 |
14 |
72 |
98 |
17 |
51 |
25 |
33 |
|
6 |
14 |
17 |
98 |
72 |
51 |
25 |
33 |
5 элементов |
6 |
14 |
17 |
25 |
72 |
51 |
98 |
33 |
|
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 раз находить минимальное значение в последовательности, длина которой каждый раз уменьшается. Кроме того, так как минимальный элемент нужно менять местами с определенным элементом последовательности, то номер минимального элемента нужно запоминать.
Обобщенно наш алгоритм можно записать так.
I:=1;
Пока I ≤ N-1
Начало
найти минимальный элемент и его номер в последовательности AI, …, AN.
поменять местами AI и минимальный элемент.
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;