
- •С примерами на Object pascal (72 часа)
- •Введение
- •1.1. Основной принцип структурного программирования
- •"Инкапсуляция времени выполнения" — полное отсутствие.
- •"Структурные типы" —хорошо;
- •1.2. Основные задачи структурного программирования
- •1.3. Основные принципы объектно-ориентированного программирования (ооп)
- •2.1. Алфавит языка pascal. Идентификаторы.
- •2.2. Простые и составные специальные символы, используемые на пк.
- •2.3. Стандартные типы данных. Двоичное представление чисел и дополнительный код.
- •2.4. Особенности работы с некоторыми типами данных
- •2.5. Арифметические операторы.
- •2.6. Логические операторы и операции отношения.
- •2.7. Потеря точности, потеря порядка и переполнение при арифметических операциях.
- •2.8. Структура простейшей программы.
- •2.9. Простейшие операторы языка Object pascal
- •1) Цикл от меньшего к большему значению:
- •2) Цикл от большего к меньшему значению:
- •2.10. Структурные типы данных
- •2.11. Указатели. Динамические переменные. Динамическое выделение и высвобождение памяти
- •2.12. Процедуры и функции. Формальные и фактические параметры. Передача параметров по ссылке, по значению и через указатель.
- •2.13. Локальные и глобальные переменные. Побочный эффект функции. Вложенность процедур и функций. Правила видимости.
- •2.14. Пример на правила видимости и передачи параметров
- •2.15. Рекурсия
- •2.1. Инкапсуляция. Объект. Поля данных и методы объекта
- •3.2 Задание модуль класса (статическая объектная модель)
- •4.10. Создание и уничтожение объектов. Конструкторы и деструкторы.
- •4.11. Наследование. Статические, виртуальные, динамические и абстрактные методы.
- •4.12. Области видимости объектов.
- •4.13. Обработка исключительных ситуаций.
- •4.14. Специальные средства для работы с ms Windows: сообщения.
- •4.15. События и их делегирование. Обработка событий.
- •4.16. Методы класса и указатели на класс.
- •4.17. Дополнительные возможности Object Pascal.
- •5. Визуальное проектирование в среде Delphi.
- •5.8. Создание экранных форм. Инспектор объектов.
- •5.9. Палитра компонентов.
- •6. Интерфейсы и множественное наследование
- •6.1. Общие представления об интерфейсах в Object pascal
- •6.2. Реализация интерфейсов свойством
- •6.3. Различение имен при реализации нескольких интерфейсов
- •5.11. Спецификаторы вызовов процедур и функций
- •5.12. Динамические массивы
- •5.13. Перезагрузка (overloading) методов, процедур и функций
- •5.14. Параметры по умолчанию
- •5.17. Технологии dde и ole
- •5.18. Технология ActiveX
- •5.20. Использование библиотек OpenGl и glu
- •5.21. Создание программистом собственного компонента Литература
Какую работу нужно написать?
2.6. Логические операторы и операции отношения.
Логические операторы:
and логическое "И". Пример: a and b
or логическое "ИЛИ": a or b
xor логическое "исключающее ИЛИ": a xor b
not логическое "НЕ": not a
Операции отношения (результат — типа boolean):
= равно. Пример: A=B
<> не равно: A<>B
> больше: A>B
< меньше: A<B
>= больше или не равно: A>=B
<= меньше или не равно: A<=B
in принадлежность множеству: A in B
2.7. Потеря точности, потеря порядка и переполнение при арифметических операциях.
Пусть x1 – арифметическая переменная real, x2 – вещественная extended. Тогда выполнение присваиваний x2:=1+1e-14 даст 1.00000000000001, а x1:=1+1e-14 даст 10000000000000,т.к. числа real имеют всего 12 значащих цифр мантиссы. После этого выражение x2:=x2-1 даст 1e-14, а выражение x1:=x1-1 даст 0. Это потеря точности. Если мы имеем выражение типа a+b-c, где a очень близко к c, а b<<a (и, значит, b<<c), то большее значение приобретает порядок действий. При этом выражение (a-c)+b дает гораздо лучшую точность, чем (a+b)-c. По умолчанию действия выполняются слева направо, поэтому a+b-c это то же, что (a-c)+b. Потеря порядка – выход при умножении или делении за пределы минимального порядка. Так, x1:=1e/-26 даст не 0, а ошибку потери порядка. Арифметическое переполнение – выход за пределы максимальных значений для данного типа. Так, x1:=1e20*1e20 даст переполнение вещественного типа. А если I типа integer, I:=20000; j:=15000, то выражения I:=I+j, I:=2*I, либо I:=2*j-10000 дадут переполнение. При этом возникновение диагностики переполнения во время выполнения программы зависит от опции компилятора.
2.8. Структура простейшей программы.
В PASCAL любое число пробелов, символов <TAB> или переносов на новую строку везде приводится к одному пробелу (конечно, кроме строковых выражений). Имя файла с текстом программы должно быть то же, что имя программы, а расширение имени файла после точки должно быть PAS. Многострочные комментарии заключаются в фигурные скобки, однострочные – начинаются со знака “//”.
program MyProg1; //имя файла должно быть MyProg1.pas
var a,b,c: integer; {начало раздела переменных – зарезервированное
слово var}
a1,b1: real;
x: integer;
goodResult: boolean; //конец раздела описания переменных
begin //начало тела программы
a:=1;
b:=a+5;
a1:=b/sin(b-a);
x:=round(a1);
goodResult:=(x<2);
end. //конец тела программы, завершается точкой
Комментарии компилятором игнорируется.
2.9. Простейшие операторы языка Object pascal
2.9.1. Пустой и составной операторы.
Операторы в языке PASCAL разделяется символом ";".
Пустой оператор — это просто пустая строка (или эквивалентная ей последовательность пробелов и переносов на новую строку), после которой стоит ";". Он ничего не делает. Иногда использовался для того, чтобы поставить перед ним метку для использования в операторе goto.
Составной оператор — блок кода от begin до end:
begin
последовательность простых или составных операторов
end;
Используется там, где по синтаксису языка PASCAL может стоять один оператор, а надо использовать последовательность операторов.
Замечание: Перед операторной скобкой end точка с запятой необязательна. Однако ее лучше ставить, так как при котировании строк в другое место программы отсутствие “;” вызовет ошибку компиляции, точно также, как и добавление новых строк в блок.
2.9.2. Оператор безусловного перехода goto.
Этот оператор требует наличия метки (label), на которую и производится переход. Идентификатор метки — либо целое число, меньшее <65367, либо буквенно-численный идентификатор; обычно используют число.
program MyProg2;
label 1;
var i: integer;
begin
...
if...then goto1;
...
1:...
...
end.
Оператор goto рекомендуется использовать как можно реже, т.к. частое его употребление очень усложняет понимание логики программы. Чаще всего его применяют совместно с условными операторами. В современных версиях PASCAL имеются конструкции, позволяющиеся полностью отказаться от использования этого оператора.
2.9.3. Условный оператор if.
if условие then оператор; — первая форма
В C-образных if (условие) оператор;
if условие then оператор1
else оператор2; — вторая форма
В C-образных if (условие) оператор;
Else оператор;
Пример:
if a<b
then a:=a+1
else (if a=b
then a:=a+1
else
begin
a:=a+1;
b:=b+1
end
);
Надо отметить, что после then должен стоять только один оператор, а не последовательность операторов. Поэтому запись оператора в виде
if условие then оператор1;
else оператор2;
недопустима, т.к. символ ”;”, стоящий после оператора1, рассматривается как пустой оператор, и поэтому между then и else стоят два оператора, а может быть только один. Хотя бы и составной, ограниченный операторными скобками begin и end.
В случае последовательности операторов типа:
if условие1 then if условие2 then оператор1 else оператор2;
имеющийся else относится к последнему then, поэтому лучше отформатировать текст так:
if условие1
then if условие2
then оператор1
else оператор2;
таким образом , если писать соответствующие if, then и else друг под другом, логика работы программы становится очевидной.
Пример неправильного стиля оформления:
if условие1
then if условие2
then оператор1
else оператор2;
Этот стиль подталкивает к логической ошибке при чтении программы. Надо отметить, что сама возможность такой ошибки связана с непродуманностью синтаксиса языка PASCAL (в том числе Object Pascal). Другой вариант ошибки, связанный с синтаксисом PASCAL, может быть вызван лишним символом “;” после then. Так, строки
If условие then; оператор1;
И
If условие then оператор1;
совершенно неэквивалентны. В первом случае логика работы лучше понятна при записи оператора в следующем виде
If условие then;
Оператор1;
Т.е. при выполнении условия выполнится пустой оператор, а оператор1 будет выполнен всегда.
2.9.4. Оператор выбора case.
Является аналогом if для нескольких условий выбора. Варианты синтаксиса оператора для различной формы записи условий следующие:
сase выражение of
значение1:оператор1;
...
значение2,значение3,...,значениеN:оператор2;
начальное значение..конечное значение:оператор3
else оператор
end;
Тип выражения должен быть либо каким-нибудь из перечисляемых типов: целый, либо литерным, либо булевским, либо элементом множества, в частности, строковый и вещественный типы недопустимы . Значения — совместимого типа.
Часть с else является необязательной.
Пример:
case (a mod b) of
0: i:=0;
1: i:=1;
2,4,6,8: i:=2;
10..100: begin
i:=3;
a:=a div10
end
else i:=4
end {/case};
. . .
В C-образных языках для аналогичных целей применяется конструкция
switch (выражение)
{
case значение1: оператор1;
……………………………
case значение N: оператор N;
default: оператор;
}
2.9.5. Оператор цикла for.
Имеется две формы синтаксиса оператора.