- •Алгоритмы
- •Свойства алгоритма
- •Способы описания алгоритмов
- •Язык программирования
- •Способы описания синтаксиса языка программирования
- •1. Бнф (Бэкуса-Наура форма)
- •Компиляторы и интерпретаторы
- •Обзор языков программирования высокого уровня (таблица)
- •Язык программирования Паскаль Первая программа на языке программирования Паскаль
- •Типы, переменные и константы
- •Основные типы данных языка Pascal
- •Операторы ввода/вывода
- •Форматы вывода
- •Выражения и операции Выражения
- •Операции
- •Операции div и mod для целых
- •Операции shl и shr для целых
- •Логические операции
- •Часто используемые правила математической логики
- •Стандартные процедуры и функции Стандартные функции
- •Стандартные функции в Dephi
- •Стандартные процедуры для целых
- •Явление переполнения
- •Погрешность округления и вычислительная погрешность
- •Примеры на суммирование рядов
- •Процедуры break и continue
- •Оператор безусловного перехода goto
- •Подпрограммы. Процедуры и функции
- •Процедуры
- •Синтаксис описания процедуры
- •Оператор вызова процедуры
- •Функции
- •Переменная Result
- •Способы передачи параметров Передача по значению. Параметры-значения
- •Передача по ссылке. Параметры-переменные (с ключевым словом var)
- •Семантика вызова подпрограммы
- •Алгоритм вызова подпрограммы
- •Статическая и автоматическая память
- •Локальные и глобальные переменные
- •Обращение к глобальным переменным и побочный эффект
- •Область видимости и время жизни объекта
- •Статическая локальная переменная
- •Перегрузка имен подпрограмм
- •Структура модуля
- •Перечислимый и диапазонный типы Перечислимый тип
- •Записи с вариантами
- •Как записи с вариантами хранятся в памяти
- •Сортировка массивов записей
- •Индексная сортировка
- •Множества
- •Стандартные подпрограммы для работы с символами
- •Виды строк в Delphi
- •Cтроки shortstring
- •Основные подпрограммы для работы со строками
- •Основные подпрограммы для работы со строками (Delphi)
- •Алгоритмы на строках
- •Использование Split
Перегрузка имен подпрограмм
Перегрузка имен подпрограмм имеется в Delphi, FreePascal и отсутствует в Turbo Pascal.
В одном пространстве имен процедуры (функции) могут иметь одинаковые имена, если они имеют различные списки параметров.
procedure swap(var a,b: integer); overload; ... procedure swap(var a,b: real); overload; ...
Это явление называется полиморфизмом.
Полиморфизм – использование одного имени (одного знака операции) для выполнения родственных действий.
Примеры.
writeln(a,b) – полиморфная процедура: параметры различных типов.
a+b – операция «+» используется для различных типов.
Тонкости перегрузки
Пример 1.
procedure A(i: integer); overload; procedure A(i: real); overload;
var b: byte; ... A(b); // ошибка - неоднозначность при вызове процедуры
Пример 2.
function f: integer; overload; function f: real; overload; ... r:=f; // ошибка - неоднозначность при вызове функции
Правило: тип возвращаемого значения не участвует в разрешении перегрузки.
Параметры по умолчанию
Параметры по умолчанию имеются в Delphi, FreePascal и отсутствуют в Turbo Pascal.
procedure DoOperation(a,b: real; var res: real; op: char=’+’); begin case op of ’+’: res:=a+b; ’-’: res:=a-b; ... end; end. ... DoOperation(2,3,res); DoOperation(2,3,res,'*');
Правило. Параметры по умолчанию всегда должны идти последними.
Предварительное объявление подпрограмм
procedure p(i: integer); forward; // Предварительное объявление. p будет определена далее
procedure q; begin p(3); // можно вызывать end;
procedure p(i: integer); begin ... end;
Методы разработки программ
Метод программирования сверху вниз
Вначале разрабатывается основная программа.
Пример. Выдать все простые числа от 1 до 1000
1 шаг.
x:=2; while x<1000 do begin if IsPrime(x) then write(x,’ ’); x:=x+2 end;
2 шаг. Детализируем IsPrime.
Возможно, потребуется несколько этапов детализации.
Метод эффективен, когда задача четко поставлена и имеется четкий алгоритм ее решения.
Метод программирования снизу вверх
Вначале разрабатываются подпрограммы – «строительные блоки» программы ( в нашем случае – IsPrime):
function IsPrime(x: integer): boolean; …
Метод эффективен:
1. Когда задача нечетко поставлена. В процессе создания подпрограмм – строительных блоков можно добиться более четкой постановки задачи.
2. Когда решается группа задач из одной области (Выдать все простые числа от 1 до 1000. Сколько простых чисел во 2-ой сотне? Меняется ли процент простых чисел?)
3. Позволяет приступить к программированию, когда еще идет формирование общей процедуры алгоритма. Причем, процедуры нижнего уровня пишет один человек, в то время как общую структуру формирует другой.
Для больших проектов сочетают оба метода: сверху вниз и снизу вверх.
Модули
Модуль - это файл, в котором находится специальным образом оформленная группа взаимосвязанных процедур (функций), констант, типов. Модули позволяют:
1. Объединить группу взаимосвязанных подпрограмм в единое целое, отделив от остального кода. 2. Разбить большой код на относительно независимые части. 3. Поставлять пользователям библиотеки подпрограмм без исходного текста