
- •Основы алгоритмизации и программирования.
- •2. Файл и связанные с ним понятия
- •3. Краткие сведения об интегрированной среде
- •4. Ввод и редактирование текста программы
- •4.1. Ис Турбо Паскаля и окна.
- •4.2. Работа с исходными файлами в окне редактирования
- •4.2.1. Возможные режимы редактирования
- •4.2.2. Приемы работы с клавиатурой
- •4.3. Работа с блоками
- •4.4. Поиск и замена фрагментов текста
- •5. Работа с файлами
- •5.1. Создание нового исходного файла
- •5.2. Загрузка существующего файла
- •5.3. Сохранение файла
- •5.4. Перезапись файла
- •6. Интерактивная помощь.
- •7. Выполнение работы
- •8. Содержание отчета
- •Лабораторная работа № 2 подготовка программ к выполнению в среде турбо паскаля
- •1. Средства ис для компиляции программ
- •1.1. Команда Compile
- •1.2. Команда избирательной компиляции Make
- •1.3. Команда общей компиляции Build
- •1.4. Команда назначения первого файла Primary file
- •1.5. Команда Clear primary file
- •1.6. Команда получения общего состояния Information
- •2. Исправление синтаксических ошибок в программе по сообщениям компилятора
- •2.1. Классификация сообщений компилятора
- •2.2. Определение места ошибки в программе
- •2.3. Определение причины ошибки
- •3. Порядок выполнения работы
- •4. Контрольные вопросы
- •Лабораторная работа № 3 выполнение программ в среде турбо-паскаль
- •1. Структура простейших линейных программ
- •2. Экраны и окна, поддерживаемые ис
- •3. Режимы выполнения программ в ис и курсор выполнения
- •4. Команды ис для выполнения программ
- •5. Дополнительные возможности по прерыванию выполнения программы
- •5.1. Использование точек останова
- •5.2. Использование клавишCtrl-Break
- •6. Правила ввода исходных данных
- •7. Порядок выполнения работы
- •Исходный текст программы lab3.Pas
- •8. Контрольные вопросы.
- •Лабораторная работа № 4 операции в языке турбо паскаль
- •1. Порядковые типы и операции над ними
- •1.1. Целые типы
- •Поразрядное “не”
- •Поразрядное “и”
- •Поразрядное “или”
- •Поразрядное “исключающее или”
- •1.2. Булевский тип
- •2. Выражения в языке Паскаль
- •Приоритет операций
- •3. Выполнение работы
- •I0, i1, i2, x1, x2, x11, x12, u11, u21, u12, u13, u22, u23, n1, n2, n3, p
- •4. Текст программы oper.Pas
- •5. Контрольные задания
- •6. Варианты заданий для лабораторной работы
- •Содержание
Поразрядное “не”
-
X
Not X
0
1
1
0
Поразрядное “и”
-
X
Y
X and Y
0
0
0
0
1
0
1
0
0
1
1
1
Поразрядное “или”
-
X
Y
X or Y
0
0
0
0
1
1
1
0
1
1
1
1
Поразрядное “исключающее или”
-
X
Y
X xor Y
0
0
0
0
1
1
1
0
1
1
1
0
Последняя операция устанавливает результат, равный единице, при несовпадении соответствующих разрядов.
Поразрядный сдвиг вправо и влево достигается применением операций Shl и Shr:
X Shl Y - значение X сдвигается влево на Y разрядов,
X shr Y - значение X сдвигается вправо на Y разрядов.
При выполнении сдвигов мысленная (для выбранного типа ) граница числа (правая или левая) сдвигается на соответствующее число разрядов (вправо или влево):
При сдвиге вправо мысленная правая граница перемещается влево;
При сдвиге влево мысленная левая граница перемещается вправо.
Двоичные разряды числа, которые оказываются за его мысленной границей, отбрасываются. С противоположной направлению сдвига стороны добавляется такое же количество нулей. Исключение составляет случай сдвига влево чисел типов Integer,ShortintиLongint: значение в знаковом разряде, оказываясь за мысленной левой границей числа, не отбрасывается, а циклически восстанавливается опять в знаковом разряде.
Пример.Для числа типа Byteвыполнить операцию7 Shr 2
Было
до сдвига = 7 Стало
после сдвига =1
0
0 0 0 0 1 1 1 0 0 0 0 0 0 0 1
исчезают добавляются
Поразрядные логические операции используются для выполнения следующих действий:
1) выделение двоичного кода, 2) очистка двоичного кода, 3) проверка двоичного кода,
4) инвертирование двоичного кода, 5) занесение единиц в нужные разряды двоичного кода.
Пример.Выделение из двоичного кода нужных разрядов.
Задано следующее объявление двух переменных:
Var
c, w: word;
Выделение из 2байтов переменнойw7младших разрядов происходит так:
Var
c, w: word;
Begin
c := w
and $ 7F
маска
Маска формируется следующим образом: нужно поставить в единицу те разряды, которые должны быть выделены.
Пример. Установка в ноль (очистка) нужных разрядов.
Var
c, w: word;
Begin
c := w and $ FF80
где
1111
1111 1000 0000
F F 8 0
В маске нужно установить в единицу все разряды, кроме тех, которые те очищают.
В данном случае будут очищены младшие семь разрядов.
Пример. Проверка заданных разрядов.
Var
c, w: word;
Begin
if (c and маска) = маска
then {если совпало}
Маска формируется следующим образом: в маске все разряды устанавливаются в
ноль, кроме тех, в которых надо проверить наличие единицы.
Пример. Инвертирование нужных разрядов.
Нельзя использовать операцию not, т.к. она является одноместной.
Var
c, w: word;
Begin
c := w xor $7;
Маска формируется следующим образом: в единицу устанавливаются те разряды, которые надо инвертировать (здесь - три младших разряда).
Примечание./ Если операцияxorповторяется два раза, то значение исходного числа восстановится.
ПримерЗанесение1в нужные разряды:
Var
c, w: word;
Begin
c := c or $7;
Маска формируется следующим образом: в единицу устанавливаются те разряды, в которые надо занести единицу. При таком занесении не будут задействованы те разряды, для которых в маске установлен ноль.
ЗАМЕЧАНИЕ. Во всех рассмотренных примерах есть одна особенность: вид маски зависит от разрядности числа. Рассмотрим маску, которая используется в операции очистки, если с ее помощью очистить младшие 7 разрядов в переменной longint, то очистятся 7 младших разрядов и 16 старших разрядов, так как для типа longint маска будет записана как 0000FF80.
Var
c: longint;
Begin
c := c and $FF80;
Вывод: запись маски не должна зависеть от разрядности числа, к которому она применяется.
Для получения семи нулевых младших разрядов надо поступить иначе. Сначала нужно получить число с единицами в младших семи разрядах, а затем проинвертировать его.
Not
($7F)
0111 1111
В общем случае для получения маски из n единиц, начиная с k-го разряда, можно получить следующим образом:
m
:= not( ( (not 0) shl n) shl (k - n + 1))
будут получены все единицы
справа будут получены n
нулей
нули
перегоняются на нужную позицию
будет получено n единиц