- •35 Жегуло а.И. Компьютерные науки 2010-2011 гг. Компьютерные науки Лекции для студентов 1 курса, 2010-2011 уч. Г., семестр 1
- •1. Основные понятия 3
- •2. Введение в язык программирования Pascal 3
- •7. Массивы 16
- •8. Сортировки массивов 22
- •9. Рекурсия 25
- •1. Символьные и строковые типы данных 31
- •Основные понятия
- •Способы описания алгоритма:
- •Введение в язык программирования Pascal
- •Структура программы на языке Pascal
- •Правила записи программ
- •Стиль программирования
- •Переменные и константы. Понятие типа данных
- •Классификация типов данных
- •Стандартные простые типы данных
- •Целые типы
- •Вещественные типы
- •Логические (булевские) типы
- •Перечисляемые типы
- •Интервальные типы
- •Порядковые типы
- •Описание данных
- •Описание переменных
- •Описание констант
- •Описание типизированных констант
- •Выражения
- •Операции отношения
- •Приоритеты операций
- •Арифметические выражения
- •Логические выражения
- •Операторы
- •Оператор присваивания
- •Оператор ввода с клавиатуры
- •Оператор вывода на экран монитора
- •Форматный вывод
- •Условный оператор (оператор альтернативы)
- •Составной оператор
- •Оператор выбора
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием repeat
- •Оператор цикла for с параметром
- •Вложенные циклы
- •Взаимозаменяемость циклов различных видов
- •Дополнительные конструкции переходов для циклов
- •«Вечные» циклы
- •Простейшие алгоритмы
- •Вычисление суммы и произведения
- •Организация счетчика
- •Нахождение наибольшего и наименьшего значений
- •Рекуррентные последовательности
- •Итерационные алгоритмы
- •Подпрограммы (процедуры и функции)
- •Понятие подпрограммы, ее описания и вызова
- •Цели введения подпрограмм
- •Способы передачи параметров. Виды параметров
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Корректность передачи параметров
- •Досрочное завершение работы программы и подпрограммы
- •Реализация вызова подпрограммы
- •Область действия и время жизни идентификаторов
- •Правила видимости
- •Время жизни идентификаторов
- •Побочный эффект функции
- •Массивы
- •Описание переменных-массивов
- •Обозначение элементов массива
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Типизированные константы-массивы
- •Операции над массивами
- •Именная эквивалентность типов
- •Передача массива в качестве параметра
- •Открытые массивы
- •Типичные задачи для одномерных массивов
- •Поиск заданного элемента в массиве
- •Анализ методов поиска по количеству операций сравнения
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Сортировки массивов
- •Понятие сортировки
- •Параметры оценки алгоритмов
- •Сортировка простым включением (простыми вставками) Принцип сортировки включением
- •Сортировка простым выбором Принцип сортировки выбором
- •Сортировка простым обменом (метод пузырька) Принцип сортировки обменом
- •Сравнение эффективности базовых методов сортировки
- •Использование индексных массивов при сортировке
- •Рекурсия
- •Что такое рекурсия
- •Рекурсивные подпрограммы
- •Прямая и косвенная рекурсия
- •Предварительное (опережающее) описание подпрограммы
- •Опасности рекурсии
- •Бесконечная рекурсия
- •Итерация и рекурсия. Необоснованное применение рекурсии
- •Глубокая рекурсия
- •Когда использовать рекурсию
- •Формы рекурсивных подпрограмм
- •Примеры рекурсивных программ
- •Ввод последовательности целых чисел, заканчивающейся нулем, вывод в обратном порядке
- •Поиск максимального элемента массива
- •Задача о Ханойских башнях
- •Символьные и строковые типы данных
- •Символьные типы данных
- •Представление символов в памяти компьютера
- •Символьные константы и переменные Неименованные символьные константы
- •Стандартные функции над символами
- •Строковые типы данных
- •Строковые типы. Представление строк в памяти компьютера
- •Стандартные функции и процедуры для строк
- •Выделение слов из строки
-
Подпрограммы (процедуры и функции)
-
Понятие подпрограммы, ее описания и вызова
-
Подпрограмма – это часть программы, снабженная именем и списком параметров, содержащая набор операторов и оформленная в виде описания подпрограммы. Имя и список параметров образуют заголовок подпрограммы, который содержит информацию, необходимую для вызова подпрограммы. Тело подпрограммы – следующий за заголовком блок операторов.
Подпрограмма может быть многократно вызвана из разных частей программы. Вызов приводит к выполнению операторов тела подпрограммы. После завершения работы подпрограммы происходит возврат в точку вызова подпрограммы.
В языках программирования высокого уровня используется два вида подпрограмм: процедуры и функции.
Для контролируемой передачи данных в подпрограмму и возврата результатов из неё используются параметры подпрограммы:
-
Параметры, описанные в заголовке подпрограммы, называются формальными параметрами. Они используются только внутри подпрограммы.
-
Для вызова подпрограммы указывается имя подпрограммы и фактические параметры, которые подставляются на место формальных параметров в момент вызова.
-
Цели введения подпрограмм
-
Первоначально подпрограммы использовались для экономии занимаемой памяти, т.к. позволяли не повторять в программе идентичные фрагменты, а описывать их однократно и вызывать по мере необходимости с различными параметрами. Сейчас эта цель стала вспомогательной.
-
Главная цель структурирование программы, разбиение ее на части, решающие отдельные подзадачи. Это делает программу более понятной, облегчает модификацию программы, даже если подпрограмма вызывается только один раз.
-
Процедуры
Описание процедуры:
procedure имя_процедуры (список_формальных_параметров);
Разделы локальных описаний const, type, var и т.д.
begin операторы
end;
Вызов процедуры это оператор вызова процедуры:
имя_процедуры (список фактических параметров)
Если процедура не имеет формальных параметров, то ее заголовок имеет вид: procedure имя_процедуры; а оператор вызова: имя_процедуры;
-
Функции
Функция это подпрограмма специального вида, она возвращает результат в точку вызова. Вызов функции может использоваться как операнд в выражении.
Описание функции:
function имя_функции (список_формальных_параметров):тип_результата;
Разделы локальных описаний const, type, var и т.д.
begin операторы
end;
Вызов функции это операнд в выражении:
имя_функции (список фактических параметров)
Если функция не имеет формальных параметров, то ее заголовок имеет вид: function имя_функции : тип результата; а вызов: имя_функции;
Описание функции отличается от описания процедуры следующим:
-
в заголовке функции указывается тип результата;
-
тело функции должно содержать оператор присваивания, в левой части которого стоит имя функции: имя_функции:= выражение где тип выражения должен быть совместим по присваиванию с типом результата функции. Таких операторов может быть несколько, но перед выходом из функции такой оператор должен выполниться, чтобы функция возвратила значение.
Таким образом, функция передает свое значение через присваивание значения идентификатору функции.
Если имя_функции использовать в правой части оператора присваивания, произойдет рекурсивный вызов этой функции (т.е. вызов этой же функции из тела функции). Избежать рекурсивного вызова позволяет в Delphi неявно определенный параметр Result, тип которого равен типу результата функции.
Result используется для возврата результата функции, но может также входить в выражение правой части оператора присваивания, например, Result:=Result+1.
Пример. Программа вычисления факториала n!=1*2* ... *n
|
|
program Fact1; var i,n:integer; F:integer; begin Write(‘n=’); Readln(n); F:=1; for i:=2 to n do F:=F*i Writeln(’Factorial=’, F) end. |
var F: integer; procedure Pfact(n:integer; var F: integer); var i:integer; begin F:=1; for i:=2 to n do F:=F*i end; begin Write(‘n=’); Readln(n); Pfact(n,F); //Вызов процедуры Writeln(’Factorial=’, F) end. |
|
|
var F: integer; function Ffact(n:integer): integer; var i:integer; F:longint; begin F:=1; for i:=2 to n do F:=F*i; Ffact:=F end; begin Write(’n=’); Readln(n); F:= Ffact(n); //Вызов функции Writeln(‘Factorial=’, F) end. |
var F: integer; function Ffact(n:integer): integer; var i:integer; begin Result:=1; for i:=2 to n do Result:= Result*i end; begin Write(’n=’); Readln(n); F:= Ffact(n); //Вызов функции Writeln(‘Factorial=’, F) end. |