
- •Конспект лекций
- •Тема 1. Программные средства пк. Основы алгоритмизации задач.
- •Тема 2. Программирование на базовом процедурно-ориентированном алгоритмическом зыке. Классификация операторов алгоритмического языка. Оператор присваивания. Операторы управления. (2 часа)
- •Тема 3. Описание линейных и разветвляющихся структур алгоритмов. Программирование разветвляющихся структур.(1 часа)
- •Тема 4. Организация выполнения программ на пк. Структуры данных: массивы. Множества. Записи. (2 часа)
- •Тема 5. Организация алгоритмов циклической структуры. Алгоритмическое описание вложенных циклических структур. (1 часа)
- •Оператор цикла с параметром
- •Оператор цикла с постусловием
- •Примеры бесконечных циклов
- •Тема 6. Программирование ввода-вывода массивов. Строковые данные. Библиотека стандартных подпрограмм. (1 часа)
- •Тема 7. Подпрограммы, их классификация. (1 часа)
- •Параметры-значения
- •Тема 8. Алгоритмы поиска и сортировки. (1 часа)
- •Тема 9. Программирование в среде delphi. (1 часа)
- •Тема 10. Работа с файлами. Различные типы файлов.
- •Тема 11. Динамические структуры данных. Указатели. Работа с очередями и стеком. (2 часа)
- •Добавление в конец списка
- •Рекурсивная процедура добавления элемента в список
- •Включение в список
- •Рекурсивная процедура удаления элемента из списка
- •Тема 12. Машинная графика.Примеры программ с различной структурной организацией. (1 часа)
- •Литература
Тема 3. Описание линейных и разветвляющихся структур алгоритмов. Программирование разветвляющихся структур.(1 часа)
План лекции 4:
Линейные структуры алгоритмов.
разветвляющиеся структуры алгоритмов.
Классификация операторов алгоритмического языка.
Для программ в императивных (процедурных) языках при их выполнении характерно строго последовательное выполнение содержащихся в них операторов. Переход от одного оператора к другому в процессе выполнения программы называется течением программы или управлением потоком. В языке для управления течением программы используются, прежде всего, условные операторы и циклы. В машинном языке для управления потоком используется команда перехода. С помощью этой команды и реализуются условные операторы и циклы. Но в языке Паскаль существует и прямой аналог команды перехода оператор перехода.
Отдельные операторы можно пометить с помощью меток. Благодаря этому может быть использован специальный оператор goto m (называемый переходом), так что в результате выполнения этого оператора выполнение программы продолжается с оператора, помеченного меткой m.
Все метки, используемые в программе (блоке), должны быть описаны в специальном разделе label. Метка представляет собой идентификатор или целое число от 1 до 9999.
Пример:
label
m,1,metka,56;
Оператор, помеченный меткой, имеет вид
<метка>:<оператор>;
Не допускаются переходы вовне подпрограмм или внутрь их. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибках.
Графическое представление управления потоком выполняемых команд может быть дано с помощью так называемых диаграмм управления потоком (блок-схем). С математической точки зрения блок-схема есть ориентированный граф с различными типами узлов, которые помечены определенными выражениями или операторами.
Блок-схема для императивной программы может быть систематически выведена из программы.
Условный оператор if C then S1 else S2 выражается с помощью следующей блок-схемы, изображенной на рис. 1
Рис. 1
Операторы присваивания (и вызовы подпрограмм) записываются в прямоугольниках. Булевские выражения, управляющие потоком, записываются в ромбах.
Последовательной композиции S1;S2 соответствует соединение блок-схем для S1 и соответственно для S2 с помощью стрелки от S1 до S2 (рис.2).
Рис. 2
Оператору цикла while B do S соответствует блок-схема рисунка 3.
Рис. 3
Блок-схемы особенно часто применялись в ранние годы программирования, так как с их помощью надеялись получить наглядное представление о структуре программы, точнее, о структуре потока программы. Однако и сейчас блок-схемы достаточно широко используются в очень прагматических областях программирования.
Условный оператор применяется для задания разветвления в программе, т.е. выбора действий в зависимости от истинности или ложности какого-либо условия.
Пример:
Для того чтобы z стало равным наибольшему из двух чисел x и y, необходимо выполнить присвоение z:=x либо z:=y.
Две формы условного оператора: полная и сокращенная.
<полный условный оператор>::=
if <логическое выражение> then <оператор>
else <оператор>
Примеры:
if x>y then z:=x
else z:=y;
if x<0 then begin
x:=x+h;
y:=y-h;
d:= not d
end
else begin
x:=0;
y:=0
end;
if x>0 then sgn:=1
else if x=0 then sgn:=0 else sgn:=-1;
<сокращенный условный оператор>::=
if <логическое выражение> then <оператор>;
Например, оператор x:=abs(x) эквивалентен if x<0 then x:=-x.
Поменять местами значения переменных x и y так, чтобы в x было большее значение:
if y>x then begin
t:=x;
x:=y;
y:=t
end;
Ветви then и else могут снова содержать условные операторы, например:
if x>0 then sgn:=1
else if x=0 then sgn:=0 else sgn:=-1;
Неоднозначность в условном операторе следующего вида:
if B1 then if B2 then S1 else S2
Возможные истолкования
a) if B1 then begin
if B2 then S1 else S2
end;
b) if B1 then begin if B2 then S1 end
else S2;
В Паскале используется вариант a).
Вводится последовательность целых чисел, 0 – конец последовательности. Найти два наименьших числа.
Переменные:
x – очередное число;
min1 – первое наименьшее число;
min2 – второе наименьшее число (min2>=min1).
Алгоритм решения задачи:
устанавливаем начальные значения min1 и min2 по двум первым числам;
последовательно считываем числа и, если очередное число x меньше или равно min1 (min1<min2), то переприсваиваем значение min1 и min2;
если x попадает в интервал от min1 до min2, то переприсваиваем только min2;
выводим результат.
var x,min1,min2:integer;
begin
write('Введите x=');
readln(x);
min1:=x;
write('Введите x=');
readln(x);
min2:=x ;
{min1<=min2}
repeat
if x<=min1 then
begin
min2:=min1;
min1:=x;
end
else
if (min1<x) and (x<min2) then min2:=x;
write('Введите x=');
readln(x);
until (x=0);
writeln( 'Два наименьших числа равны', min1, 'и', min2);
end.