- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •2. Зарезервированные слова.
- •X a8 alpha Massiv z52d9 eps Res_52_a ___75
- •6. Метка.
- •2. Целые типы данных.
- •4. Вещественные типы.
- •1. Раздел описания меток.
- •2. Раздел описания констант.
- •3. Раздел описания типов.
- •4. Раздел описания переменных.
- •6. Раздел операторов.
- •7. Последовательность разделов.
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Ввод массива из текстового файла.
- •3. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •1. Параметр цикла должен быть ординального типа.
- •2. Параметр должен быть описан в том же блоке, где находится сам оператор цикла.
- •5. В теле цикла параметр не должен изменяться.
- •6. Начальное и конечное значения параметра цикла вычисляются только один раз, до начала цикла.
- •7. При нормальном завершении цикла значение его параметра считается неопределенным.
- •Контроль ординальных переменных
- •Вставка элемента в упорядоченный массив
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Var c : array[1..10,1..15,1..8] of real.
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Ввод матрицы из текстового файла.
- •3. Вывод матрицы на экран.
- •Тождественные и совместимые типы
- •Обработка в процедуре одномерных массивов с различными именами типов
- •Обработка в процедуре матриц с различными именами типов
- •Var s : string[V],
- •Процедуры и функции для обработки строк
- •Определение битовой структуры поля памяти
- •Процедуры и функции для файлов любого типа
- •Var p : pointer;
- •1. Формирование стека из текстового файла.
- •7. Определение значения и местоположения максимального элемента в стеке.
- •8. Удаление из стека максимального элемента.
- •9. Добавление элемента в упорядоченный стек.
- •2. Добавление нового элемента в очередь.
- •3. Удаление элемента из очереди.
- •6. Удаление произвольного элемента из очереди.
- •7. Добавление нового элемента в произвольное место очереди.
- •1. Формирование дека.
- •Var sin : integer;
- •Процедура заполнения FillChar
- •Процедура перемещения данных move
- •Управление экраном в текстовом режиме
- •Сохранение и восстановление экрана
- •Interface
- •Implementation
- •Процедуры управления текстовым режимом экрана
- •Intr(n:byte; Var Reg:Registers),
- •If KeyPressed then
- •Автоматическая оптимизация программ
- •1. Свертывание констант.
- •2. Слияние констант.
- •3. Вычисление по короткой схеме.
- •4. Удаление неиспользуемого кода.
- •If false then
- •5. Эффективная компоновка.
- •Оверлейная структура программы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Использование сопроцессора
Автоматическая оптимизация программ
В Турбо Паскале выполняется несколько типов оптимизации кода компилируемой программы с целью повышения ее быстродействия и уменьшения объема занимаемой памяти.
1. Свертывание констант.
Если операндами выражения являются константы ординального типа, то выражение вычисляется в период компиляции. То же относится к функциям abs, sqr, succ, pred, odd, lo, hi, swap, если их аргументами являются константы ординального типа.
Пример 1.
Var k : integer;
Begin
k:=abs(-15)+sqr(7)-6*12;
Для выполняемой программы записанный в исходном тексте оператор будет заменен оператором k := -23;
Если индексом массива является константа или выражение, состоящее из констант, то адрес элемента массива вычисляется во время компиляции. Например, доступ к элементам a[sqr(7)+2,3*8] и a[61,24] будет таким же эффективным, как и доступ к простой переменной.
2. Слияние констант.
Если в одном блоке несколько раз встречается одна и та же строковая константа, то в объектном коде программы компилятор разместит только одну ее копию.
Пример 2.
Writeln('Введите значение ','x =');
................................
Writeln('Введите значение ','y =');
................................
Writeln('Введите значение ','z =');
................................
Для объектного кода программы это эквивалентно фрагменту
Const S = 'Введите значение ';
Begin
Writeln(S,'x =');
................
Writeln(S,'y =');
................
Writeln(S,'z =');
................
3. Вычисление по короткой схеме.
Логическое выражение в Турбо Паскале вычисляется по короткой схеме. Это означает, что вычисление такого выражения прекращается, как только его результат становится очевидным.
Пример 3.
If (x>0) and (x<100) and (y>1) and (y<x) then ...
While (x<0) or (y>1) or (z>x+y) do ...
Если x = -1, то вычисление обоих логических выражений прекращается после вычисления значения истинности первого операнда. В первом случае имеем для всего выражения значение false, во втором - значение true.
4. Удаление неиспользуемого кода.
Операторы, которые никогда не будут выполняться, в объектный код программы не включаются.
Пусть в исходном тексте программы записан оператор
If false then
y:=sqr(x)+1;
Такой оператор при компиляции программы игнорируется.
Используя это свойство компилятора, можно в исходном тексте программы подготовить различные ее варианты, формируемые при повторной компиляции.
Пример 4.
Const KeyPrint = 0; { Ключ тестовой печати: }
{ 0 - тестовая печать отсутствует ; }
Begin { 1 - активизируется тестовая печать }
...............................
If KeyPrint>0 then
Begin
Печать массива A
End;
................................
Операторы отладочной печати включаются в объектный код программы, если до ее компиляции было установлено значение константы KeyPrint = 1.
5. Эффективная компоновка.
Процедуры и функции, к которым в программе нет ни одного обращения, в объектный код не включаются. Не включаются в объектный код также переменные, которые описаны в разделах Var, но в программе не используются.
Данный тип оптимизации кода имеет особое значение при использовании модулей. Если в программе записана фраза
Uses Graph;
то в объектный код программы будут переписаны только те процедуры из модуля Graph, к которым имеются обращения.
Здесь следует отметить, что при компиляции программы в память эффективная компоновка не работает. Этим объясняется, почему некоторые программы становятся меньше при компиляции их на диск.