Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7



Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7

(Курс лекций)

Воронов Г.И.

Санкт-Петербург

Г


Оглавление

Глава 1. Общие сведения о языке и правилах написания программ. 5

Исторические сведения. 5

Тип и функциональные возможности языка. 5

Структура программы на Паскале. 5

Алфавит языка. 6

Правила написания имен. 7

Структура блока описаний. 7

Глава 2. Простые типы данных в языке Паскаль. 7

Понятие и классификация типов данных. 7

Целочисленные типы.. 8

Вещественные типы.. 9

Логический тип. 9

Символьный тип. 10

Интервальный тип пользователя. 10

Перечисляемый тип пользователя. 11

Глава 3. Встроенные функции. 12

Понятие и классификация типов функций. 12

Математические функции. 12

Функции преобразования типов. 13

Глава 4. Выражения. 14

Понятие и классификация типов выражений. 14

Арифметические операции. 14

Логические операции. 15

Отношения. 16

Битовые операции. 16

инверсия. 16

побитовое логическое умножение. 16

побитовое логическое сложение. 16

побитовое исключающее «или». 16

сдвиг влево. 16

сдвиг вправо. 17

Приоритеты операций. 17

Глава 5. Выполняемые операторы языка (для программ линейной структуры) 17

Понятие и классификация. 17

Классификация инструкций Паскаля. 18

Оператор присваивания. 18

Простейшие операторы ввода с клавиатуры.. 19

Простейшие операторы вывода на экран дисплея. 20

Глава 6. Выполняемые управляющие операторы языка. 21

Простые управляющие операторы.. 21

Оператор безусловного перехода. 21

Оператор продолжения цикла. 21

Оператор прекращения (прерывания) цикла. 22

Оператор (процедура) выход из программной единицы.. 22

Оператор (процедура) останов программы.. 22

Понятие составного оператора, операторные скобки. 22

Операторы ветвлений. 23

Оператор условного перехода. 23

Неполный условный оператор. 23

Полный условный оператор. 24

Операторы циклов. 25

Оператор арифметического цикла. 25

Операторы итеративных циклов. 26

Организация цикла с помощью условного перехода. 27

Оператор итеративного цикла с предусловием.. 27

Оператор итеративного цикла с постусловием.. 28

Глава 7. Составные типы данных. 29

Классификация составных типов. 29

Массивы.. 29

Основные определения. 29

Заполнение массива данными. 31

Вывод массива. 32

Примеры программ работы с массивами. 33

Сортировки массива. 35

Алгоритмы основных методов сортировок. 36

Строки. 39

Строковые переменные. 39

Стандартные (встроенные) процедуры работы со строками. 41

Стандартные (встроенные) функции работы со строками. 41

Структуры.. 44

Глава 8. Подпрограммы и функции. 46

Понятие подпрограмм в языке Паскаль. 46

Процедуры. 46

Описание и вызов функций. 47

Параметры процедур и функций. 47

Глава 9. Файлы.. 50

Классификация внешних данных. 50

Стандартные процедуры работы с файлами. 51

Процедуры.. 52

Функции. 52

Особенности работы с текстовыми файлами. 52

Процедуры.. 53

Функции. 53

Пример работы с текстовыми файлами. 53

Двоичные файлы (в машинных кодах) 54

Типизированные файлы.. 54

Процедуры при работе с типизированными файлами. 54

Функции при работе с типизированными файлами. 55

Пример работы с типизированными файлами. 55

Файлы без типов. 56

Процедуры, используемые при работе с нетипизированными файлами. 57

Функции, используемые при работе с нетипизированными файлами. 57

Глава 10. Динамические переменные (списки) 58

Понятие динамических переменных. 58

Списочные данные. 59

Односвязные списки. 60

Двусвязные списки. 61

Нульсвязные списки. 62

Глава 11.Стандартный модуль работы с текстовым экраном Crt 65

Использование экрана дисплея в модуле Crt 65

Назначение модуля. 65

Координаты экрана. 65

Работа с текстом.. 65

Работа с цветом.. 65

Работа со звуком.. 65

Пример программы.. 65

Глава 12.Стандартный модуль работы с графическим экраном Graph. 66

1) назначение модуля. 66

2) координаты экрана. 66

3) управление графическим режимом.. 66

4) управление экраном и окном.. 67

5) управление цветом.. 67

6) вывод точек. 68

7) вывод линий. 68

8) вывод и закраска контуров. 69

9) окружности, эллипсы, дуги. 69

10) вывод текста. 69

11) Последовательность работ при использовании графического режима. 70

11) пример программы.. 71

ПРИЛОЖЕНИЯ.. 72


Лекция 1

Глава 1. Общие сведения о языке и правилах написания программ.

Исторические сведения

Язык Паскаль (Pascal) был разработан профессором Никлаусом Виртом из Швейцарского города Цурих в 1970 году. Название язык получил в честь французского математика 17 века Блеза Паскаля. Язык был разработан первоначально для обучения студентов принципам структурного программирования, но в последствии, благодаря своей простоте и стройности, он вошел в четверку наиболее распространенных языков программирования (наряду с Бейсиком, фортраном и Си).

В процессе реализаций языка на различных ЭВМ (а затем и ПЭВМ), он развивался, пополнялся новыми возможностями. Ниже будет дано описание реализации языка на персональных IBM-совместимых ЭВМ. Эта реализация носит название Turbo Pascal версии 6.0, разработана в 1990?? году фирмой Borland Internationl. Эта фирма в 1992 году выпустила следующую версию - Turbo Pascal 7.0 и еще более мощный пакет - Borland Pascal 7.0, но эти версии эффективно работают только на достаточно мощных ПЭВМ, так как требуют для использования много ресурсов.

Тип и функциональные возможности языка

Язык Паскаль относится к алгоритмическим (машинно-независимым) операторным языкам программирования. Его реализация Turbo Pascal 6.0 позволяет работать только в среде операционной системы MS DOS. Программы строятся по модульному принципу (т.е. полная программа может собираться из отдельных, возможно созданных заранее модулей). В языке реализован принцип локализации памяти данных для каждого модуля: процедур-подпрограмм, функций и основной программы. Имеется, конечно, и возможность использовать общую (глобальную) для разных модулей память.

Второй важной чертой языка является возможность выделения дополнительной памяти для данных по ходу выполнения программы (и освобождения ее по дальнейшей ненадобности таких данных). Этот процесс называется динамическим распределением памяти. Это одно из важнейших отличий языка Паскаль от Фортрана. Чтобы программа работающая с массивом на Фортране была универсальной, размер массива при описании должен быть заказан максимально большим, а при работе программы он заполняется и используется только частично. Это приводит к неэффективному использованию памяти ЭВМ. В Паскале можно выделять под массивы данных столько места, сколько его требуется в конкретном варианте расчета.

Паскаль-программа может использовать обширные библиотеки подпрограмм, как поставляемые фирмами-разработчиками программного обеспечения, так и выполненные самим программистом. Важнейшие и наиболее часто используемые библиотеки включены в состав пакета Turbo Pascal.

Лекция 2

Лекция 3

Алфавит языка

Алфавитом называется множество символов, с помощью которых строятся все конструкции (объекты) языка. В версии Turbo Pascal 6.0 используются символы Американского Стандартного Кода Обмена Информацией (английская аббревиатура - ASCII). Все символы можно разделить на символы, используемые при написании 1) констант, имен, зарезервированных и ключевых слов; 2) разделителей между константами, именами и ключевыми словами и 3) специальные символы (знаки пунктуации, знаки операций).

В первую группу входят 26 букв латинского алфавита (с учетом того, что Паскаль не различает строчные и прописные буквы), 10 цифр и символ подчеркивания.

Во вторую группу входят: пробел, перевод строки, возврат каретки, табуляция (и вообще любой управляющий символ, с кодом начиная от 0 до 31) и комментарий. Отметим, что там, где можно поставить один разделитель, можно поставить любое количество любых разделителей. Комментарий может находиться внутри оператора, может занимать несколько строк.

В третью группу входят символы:

+ - * / - знаки арифметических операций;

< > = <= >= <> - знаки операций отношений:

- границы комментария;

[] - для индексов массивов, строк, элементов множеств;

() - выделение части выражения, задание списка параметров;

:= - знак присваивания значения;

, - разделение элементов списка;

. - отделение дробной части числа, имен полей в структурах;

; - разделение операторов;

: - отделение метки от оператора, имен переменных от типа;

' - выделение символа или текстовой константы;

.. - разделение границ диапазона;

$ - признак шестнадцатеричной константы, директивы компилятору;

# - обозначение символа, заданного числовым кодом;

@ - обозначение адреса переменной;

^ - обозначение значения величины по ее адресу (указателю).

Другие символы (например русские буквы, знаки %,?,!, ", &, символы псевдографики) можно использовать только в комментариях и внутри текстовых констант.

Правила написания имен

Имя любого объекта программы может состоять из букв, цифр и знака подчеркивания. Имя не может начинаться с цифры. Длина имени не должна превышать 63 символа. Строчные и прописные буквы транслятором не различаются. Традиционно имена констант пишут прописными символами, переменных - строчными, но начинают с прописной. Часто используют имена, состоящие из нескольких слов, при этом каждое слово начинают с прописной буквы для удобства чтения, например: NewResult, StudentName и т.д. Иногда для разделения отдельных слов в имени используют символ подчеркивания, например: Get_Next_Record, Line_size.

В качестве меток используют либо обычные имена, либо целые числа в диапазоне от 0 до 9999.

Некоторые имена в Turbo Pascal являются зарезервированными, т.е. могут использоваться только в строго определенном смысле. Их список приведен в главе 3 (параграф 4). Некоторые слова используются для написания стандартных имен (встроенных функций, констант, директив компилятору) - их можно (хотя и нежелательно) переопределять - т.е. использовать для других целей.

Структура блока описаний

В общем случае блок описаний может состоять из 8 частей - разделов:

USES - раздел объявления подключаемых библиотек и их разделов;

LABEL - раздел объявления меток;

CONST - раздел объявления констант;

TYPE - раздел объявления типов;

VAR - раздел объявления переменных;

FUNCTION - раздел объявления функций;

PROCEDURE - раздел объявления процедур;

Порядок следования разделов может быть произвольным, за следующими исключениями:

- объявление библиотек (если оно есть) должно идти раньше других объявлений;

- объявление используемых процедур и функций должно быть после других объявлений;

- каждый раздел может встретиться несколько раз;

- каждый используемый нестандартный тип или константа должны быть описаны (объявлены) раньше их использования;

- любой раздел или разделы, не нужные в программе могут отсутствовать.

Лекция 4

Целочисленные типы

 

Особенностями работы с целыми числами в ЭВМ являются ограничения, накладываемые на значения из-за фиксированного размера памяти, выделяемой переменным. Следует учитывать три особенности при вычислениях с целочисленными данными:

1. В ЭВМ существуют команды арифметики для данных только одинакового типа и размера. (Если операнды разного типа, и один из них может быть приведен к типу второго без потери точности, перед выполнением операции автоматически будет выполнено приведение.)

2. Тип результата совпадает с типом операндов (кроме вещественного деления целых чисел). Если результат не помещается в отведенное место, старшие разряды теряются. Таким образом, множество целых чисел в ЭВМ представляет собой замкнутое кольцо – за самым большим значением следует самое малое.

3. Потеря информации при переполнении, для арифметических операций с целочисленными значениями выполняется без сообщения об ошибках.

В Turbo Pascal предусмотрено 5 разных стандартных описаний целых чисел, в зависимости от возможных диапазонов их изменения (соответственно выделяемой на числовое значение места в оперативной памяти). Их характеристики приведены в таблице.

 

Таблица 1. Описатели переменных целочисленных типов.

тип р в байтах формат диапазон
shortint integer longint byte word   знак. знак. знак. б/зн. б/зн. -128.. 127 -32768.. 32767 -2147483648.. 2147483647 0.. 255 0.. 65535

 

Для всех целочисленных данных определены арифметические операции: сложение, умножение, вычитание, деление как вещественных данных, целочисленное деление и нахождение остатка при целочисленном делении. Результатом любой операции, кроме вещественного деления является также целое значение.

Значения целочисленных данных могут записываться в 10- и 16-тиричной форме, причем в последнем случае константе должен предшествовать знак $.

Примеры записи целочисленных констант:

534, -1, 21000000, $1С07, $7fffffff, $ABCD и др.

Существует стандартная константа MAXINT=32767, которую можно использовать не объявляя.

Обычно в разделе VAR для знаковых переменных используют тип integer, а для беззнаковых - word, например:

VAR

I,J,MaxI,Period: integer;

Number,NegativCount: word;

При описании целочисленных переменных, следует иметь ввиду, что этот тип используется в абстрактных математических задачах, а в физических - только для объектов задачи, про которых можно спросить: "Какой он по порядку?" и "Сколько их всего штук?".

 

Лекция 5

 

Вещественные типы

Для объектов, описывающих любую физическую измеряемую величину в программе должны заводиться переменные вещественного типа. В памяти значения вещественных чисел хранятся в нормализованной экспоненциальной форме в 3-х полях: знаковом, поле для порядка числа и поле для цифр мантиссы. В зависимости от размеров выделяемых полей меняется как диапазон возможных чисел, так и точность их представления. В Turbo Pascal предусмотрены следующие стандартные описатели для вещественных переменных:

 

Таблица 2. Описатели переменных вещественных типов.

 

тип размер (байт) цифр диапазон возможных значений
real single double   11-12 7-8 15-16 2.9e-39..1.7e38 1.5e-45..3.4e38 5.0e-324..1.7e308

 

Обычно используют тип real, два других типа можно использовать только при специальной настройке. Важно помнить, что другие языки (фортран, C) используют 4-х или 8-ми байтовые представления вещественных чисел, поэтому, если нужна совместимость по данным, Паскаль-программа должна использовать описатели single или double.

Для вещественных данных определены операции сложения, вычитания, умножения и деления (кроме деления на 0), причем результатом любой операции является вещественное число.

Вещественные константы записывают в двух формах: с фиксированной точкой и с плавающей точкой (последняя форма еще называется экспоненциальной). Примеры первой формы записи:

3.1416, 0.0735, -21.0

Вторая форма получается из первой дописыванием десятичного порядка, отделяя его от мантиссы символом "Е" или "е", например:

0.5e7, -4.57e-3, 1E10 и т.д.

Лекция 6

 

Логический тип

Логический (или булевский, битовый) тип данных предназначен для данных, которые могут принимать только 2 значения (обозначаемые терминами "истина" и "ложь" - TRUE и FALSE, и над которыми возможны логические операции. Хотя для логической переменной достаточно отводить 1 бит (в нем может храниться 0 или 1), в целях удобства работы с этими данными на них выделяется целый байт. Избыточность отводимой памяти оправдана повышением скорости обработки, так как наименьшей адресуемой величиной в ЭВМ является байт, и вырезание из него нужного бита требует дополнительных команд, а следовательно, и времени.

 

Таблица 3. Описатели переменных логического типа.

 

тип р в байтах диапазон возможных значений
boolean   TRUE, FALSE

 

Обычно реализация константы FALSE представляет собой байт, в котором все биты равны 0 (т.е. байт с нулевым значением), в противном случае байт содержит значение константы TRUE, но в языке Паскаль двоичное представление константы TRUE строго равно 1.

В качестве логических операций в языке Паскаль предусмотрены операции " логического отрицания", "логического умножения", "логического сложения", "исключающего или". Результатом таких операций над логическими данными являются также логические значения. Кроме того, логические значения получаются в результате выполнения операций отношений над данными других типов (см. раздел логических выражений).

Символьный тип

Вообще символьный (или литерный) тип предназначен для ввода передачи любых типов данных между ЭВМ и человеком, а также иногда для хранения данных на внешних носителях или обменами информацией между различными ЭВМ. В Паскале, как и в других языках нет операций, преобразующих одни символьные значения в другие, поэтому, строго говоря, символьные операции не существуют. Правда в время процедур ввода или вывода может происходить преобразование данных с появлением, например, символьных значений из числовых (при выводе) или логических значений из символьных (при вводе), однако это не является следствием специальных символьных операций.

Иногда ошибочно операцию сцепления строк '+' называют символьной. На самом деле это операция над другими типами данных (будет рассмотрена ниже).

Символьные данные могут принимать значения, составляющие фиксированную таблицу значений данной ЭВМ. Существует несколько стандартных наборов (таблиц). В этих таблицах каждому символу, который может отображаться на экране ПЭВМ, сопоставлен свой уникальный числовой код. Кроме того, некоторые коды предусмотрены для данных, не отображаемых обычно на экране, а используемых в качестве управляющих сигналов. Общее количество кодов таблицы равно 256. Каждый код равен порядковому номеру символа в таблице, поэтому для хранения любого кода достаточно 1 байта.

 

Таблица 4. Описатели переменных символьного типа

 

тип р в байтах диапазон возможных значений
char   Кодовая таблица ASCII,коды:0..255

 

Чаще всего в русифицированных ПЭВМ используется таблица кодов, называемая "альтернативной кодировкой", в которой первые 128 символов - стандартные символы ASCII ("Американского Стандартного Кода Обмена Информации"), а следующие 128 символов содержат буквы русского алфавита (кириллицу) и символы псевдографики. Таблица альтернативной кодировки символов приведена в приложении.

При написании символьных констант в программе, их следует заключать в апострофы, например: 'a', '!', '5', ','. Если нужно написать значение апострофа, его удваивают внутри внешних апострофов: ''''- это один символ.

 

Лекция 7

 

TYPE

hour = 0..23;

kurs = 1..6;

letter= a..z;

VAR

NumberK: kurs;

LunchTime,Supper,Dinner: hour; slovo:array[1..20] of letter;

Часто интервальный тип задают границами в виде констант: CONST

MinDay =1; { минимальное значение дня }

MaxDay =365; { максимальное значение дня }

TYPE

day = MinDay..MaxDay; { тип 'day' задает возможные значения }

VAR

BirthDay: day; { переменная может содержать только целые числа в диапазоне от 1 до 365 }

TYPE

language = (C,Pascal,Fort,Basic,Fortran,Ada,Modula);

gas = (N,O2,CO2,N20,CH4);

VAR

TextType: language;

Emission,Pollutant: gas;

RadioIsotop: (St_90,I_133,B_137,U_235,U_238,Pu_242);

В последней строке заведена переменная перечисляемого типа без определения имени типа.

Для переменных такого типа возможны операции присваивания значений, но только из списка заданных значений:

Emission:= O2;

Pollutant:= N2O;

TextType:=Basic;

при этом недопустимы операторы:

Pollutant:=1;

RadioIsotop:=CH4;

Разрешены операции сравнений на "равно", "больше", "меньше" и т.д. в соответствии с порядковыми номерами заданных значений в списке перечислений. Так, при выполненных операторах присваивания, написанных выше, Pollutant > Emission, так как N2O идет в списке после O2, а результатом операции сравнения:

TextType = Basic

будет значение TRUE (истина).

Выражения и константы перечисляемого типа можно использовать в операторах переключателях "case" (примеры см. в разделе описаний операторов).

Важно помнить, что для переменных перечисляемого типа не предусмотрены стандартные операторы ввода и вывода, т.е. нельзя написать:

Read(Emission) или Write(CO2).

При работе с данными этого типа часто используются стандартные функции Паскаля Pred(), Succ() и Ord(), которые будут описаны ниже.

Лекция 8

Глава 3. Встроенные функции

Математические функции

Это функции, реализующие стандартные математические функции, обычно с одним аргументом. Как аргумент, так и результат имеют числовой тип (целочисленный или вещественный). Ниже приведены имена, типы и назначения стандартных математических функций.

 

Таблица 5. Встроенные математические функции Турбо-Паскаля

Функция Тип результата Тип результата Назначение
Abs(X) Числовой Как аргумент Абсолютное значение аргумента
Arctan(X) Вещественный Вещественный Арктангенс аргумента (в радианах)
Cos(X) Вещественный Вещественный Косинус (аргумент в радианах)
Exp(X) Вещественный Вещественный Экспонента Х (е в степени Х)
Frac(X) Вещественный Вещественный Дробная часть вещественного аргумента
Int(X) Вещественный Вещественный Целая часть вещественного аргумента
Ln(X) Вещественный Вещественный Натуральный логарифм веществ.аргумента
Sin(X) Вещественный Вещественный Синус (аргумент в радианах)
Sqr(X) Числовой Как аргумент Квадрат аргумента
Sqrt(X) Вещественный Вещественный Квадратный корень веществ. аргумента

 

При обращении к функции в качестве аргумента (Х) можно указывать константу, имя переменной или выражение, но обязательно вещественного типа (для Abs и Sqr можно и целого типа). Например:

Sin(1.56), Cos(Alfa), Exp(3.0-2.2*Y), Sqrt(A[i,j]+Abs(Z[1]))

Функции преобразования типов

Эти функции служат для преобразования данных из одного типа в другой (допустимй) тип, а также для нахождения порядковых номеров конкретных значений в общем списке возможных значений. Преобразовывать можно обычно числовые данные из одного типа в другой, работа с порядковыми номерами возможна для данных, представимых точно и упорядоченных (т.е. кроме вещественных и комплексных чисел).

Chr(X) - преобразование ASCII-кода в символ. Аргументом должно быть целое число в диапазоне (0..255). Результатом является символ, код которого равен аргументу. Если число не входит в диапазон, функция просто не вычисляется без всяких сообщений.

High(X) - получение максимального значения некоторой величины, определяемой аргументом. (Работает начиная с версии 6). Если аргументом является величина перечисляемого типа, выдается ее максимально возможное значение, если аргументом является имя массива - возвращается максимальное значение индекса, если строка - возвращается объявленный при описании размер строки.

Low(X) -получение минимального значения некоторой величины, определяемой аргументом. (Работает начиная с версии 6). Если аргументом является величина перечисляемого типа, выдается ее минимально возможное значение, если аргументом является имя массива - возвращается минимальное значение индекса, если строка - возвращается 0.

Odd(X) - проверка четности аргумента. Аргумент - целочисленное значение любой точности, может быть беззнаковое. Результат -логическое значение TRUE, если аргумент нечетный и FALSE в противном случае.

Ord(X) - преобразование любого порядкового типа в целый. Аргументом может быть любой простой тип, кроме вещественного. Если аргумент - целое - результат равен аргументу, если символьный, логический, перечисляемый - результат равен его порядковому номеру в полном списке значений (нумерация начинается с нуля). Тип результата - LongInt.

Pred(X) - нахождение предыдущего значения величины Х. Аргументом может быть любая перечислимая величина. Возвращается величина того же типа, что и аргумент, но со значением, предшествующим значению аргумента. Например, для числового аргумента Pred(12) равно 11, для символьного: Pred('D') равно 'C'. Если функция вычисляется от самого первого элемента последовательности значений, возникает состояние ошибки.

Round(X) - округление вещественного значения до ближайшего целого. Аргумент должен быть вещественного типа, результат имеет тип LongInt. Если округленное вещественное значение не входит в допустимый диапазон LongInt (т.е. превышает по модулю 2.147 миллиарда), возникает ошибка.

Trunc(X) - приведение вещественного значения к целому отбрасыванием дробной

части. Типы аргумента и результата - как и у функции Round(X).

Succ(X) - нахождение последующего значения величины Х. Типы аргумента и

результата - как у функции Pred. Если функция вычисляется от самого

последнего элемента последовательности значений, возникает состояние ошибки.

Функции работы со строками будут описаны позднее.


Лекция 9

Глава 4. Выражения

Арифметические операции

Наиболее часто в программах обрабатываются числовые данные, над которыми выполняются арифметические операции. Следует отметить, что хотя процессор не имеет команд, реализующих арифметические операции над числовыми данными, с различными описателями типов (например, не может сложить целое однобайтовое и целое беззнаковое двухбайтовое, или перемножить целое и вещественное), язык Паскаль разрешает записывать в одном выражении операнды различных числовых типов. Просто при трансляции, если необходимо, компилятор подставляет команды преобразования данных к единому типу. Так как команды преобразований часто занимают гораздо больше времени, чем сами операции, целесообразно, где это возможно, использовать операнды одного типа.

Например, если Х - вещественная переменная, первое выражение будет выполняться быстрее, чем второе:

1) X + 1.0 2) X + 1

Все варианты арифметических операций представлены в таблице

Таблица 6. Допустимые арифметические операции Турбо-Паскаля

Знак Операция Типы операндов Тип результата
+ Сложение Целый Целый
Хотя бы один - веществ. Вещественный
- Вычитание Целый Целый
Хотя бы один - веществ. Вещественный
* Умножение Целый Целый
Хотя бы один - веществ. Вещественный
/ Деление Любой числовой Вещественный
div Целочисленное деление Целые Целый
mod Остаток деления целых чисел Целые Целый

При всех делениях, делитель не должен быть нулем. В программе можно использовать унарную (одноместную) операцию "-", которая меняет знак величины на противоположный. При этом можно не отделять знак унарного "-" от предшествующего ему знака бинарной операции, например следующие выражения записаны правильно и дают одинаковый результат:

A * - B; -A * B; A * (-B); A*-B; A *- B;

Операции целочисленного деления и получения остатка от деления применимы только для целочисленных данных. Результат такого деления получается вещественным делением операндов и переводом результата в целое путем отбрасывания (а не округления!) дробной части. Остаток целочисленного деления - это такое наименьшее (по модулю) число, после уменьшения на которое делимое будет делиться на делитель без остатка. В выражениях операции, изображаемые служебными словами, должны отделяться от имен хотя бы одним пробелом:

A div B, A mod B

Примеры выполнения операций:

5/3 ->1.666667; 5 div 3 ->1; 3 div 5 ->0; 5 div -3 -> -1; 10 div 3->3;

5 mod 3 ->2; 3 mod 5 ->3; 10 mod 3 ->1; -10 mod 3 ->1;

Лекция 10

Логические операции

Логические операции встречаются только в логических выражениях и применяются к логическим операндам. Логические выражения в Паскале используются в виде условий выбора одного из двух альтернативных путей при организации ветвлений или при решении о выходе из цикла. Результат такой операции всегда тоже логического типа.

Таблица 7. Таблица истинности для основных двоичных логических функций

 

  отрицание конъюнкция дизъюнкция сложение по модулю 2 импликация эквиваленция штрих Шеффера стрелка Пирса
P Q ┐P P ^Q P V Q P Å Q P->Q P<->Q P | Q P ↓ Q
                   
                   
                   
                   

 

В Турбо Паскале всего имеется четыре логических операции, одна из них - унарная - not (отрицание), остальные - бинарные. Их названия:

and - "и" (логическое умножение, коньюнкция),

or - "или" (логическое сложение, дизьюнкция),

xor - "исключающее или" (сложение по модулю 2).

В следующей таблице представлены результаты всех возможных вариантов выполнения логических операций.

Таблица 8. Логические операции Турбо-Паскаля

 

P Q not Q P and Q P or Q P xor Q
False False True True False True False True True False False False False True False True True True False True True False

 

Вычисление сложных логических выражений может выполняться как по полной, так и по укороченной схеме. По полной схеме вычисление проводится до конца, по укороченной - до момента, когда результат становится определенным. В качестве примеров можно привести следующие выражения:

Отношения

Операции отношений возможны для сравнимых величин, т.е. для однотипных простых данных и для некоторых составных данных (строк, множеств), для которых эти операции определены специальным образом. Любые однотипные данные можно сравнивать на тождественность ("равно", "не равно"), упорядоченные типы можно также сравнивать на относительное расположение ("меньше", "больше").

В качестве знаков операций отношений в Турбо Паскале используются:

= - равно;

<> - не равно;

< - меньше;

<= - меньше или равно;

> - больше;

>= - больше или равно.

Особенностью операций отношений является то, что результат всегда логического типа, независимо от сравниваемых операндов. Причем, в качестве операндов могут выступать и выражения:

2.1*sin(X)-0.5 >= Y+Z или J < N-1

Отметим, что в Турбо Паскале логический тип - частный случай перечисляемого типа со значениями False и True, поэтому эти значения - упорядочены, и можно написать, что False < True. Аналогично, упорядоченными являются символьные данные, и можно утверждать, что

'А' < 'Б' -> True; '1' < 'A' -> True; 'a' < 'A' -> False.

В качестве составной части, отношения могут входить в сложные логические выражения, например (при NoError и EndArray - логического типа):

((J < N-1) or (X>=1.0)) and NoError and not EndArray;

Битовые операции

 

Операции, примененные к каждому биту целочисленных данных, называются битовыми. В Паскале таких операций предусмотрено 6 видов. Одна из них - унарная, остальные - бинарные. Назначение и примеры использования этих операций рассмотрены в справочном пособии по языку.

Инверсия

not - унарная операция инверсии всех битов целочисленного значения. Тип результата тот же, что и у исходного числа.

Побитовое исключающее «или»

xor - побитовое исключающее «или». Тип результата - как в операции and. Вычисления производятся в соответствии с таблицей истинности, приведенной выше.

 

Сдвиг влево

К битовым операциям относятся также операции сдвигов.

shl - сдвиг влево. Выражение M shl K сдвигает содержимое переменной M на K битов влево. Освобождающиеся справа биты заполняются нулями.

Сдвиг влево на один разряд эквивалентен умножению числа на 2, сдвиг на n разрядов - умножению на 2 в степени n.

 

Сдвиг вправо

shr - сдвиг вправо. Выражение M shr K сдвигает содержимое переменной M на K битов вправо. Освобождающиеся слева биты заполняются нулями.

Лекция 11

 

Приоритеты операций

Вычисление любого выражения выполняется с учетом приоритетов операций, входящих в это выражение. Чтобы изменить порядок вычислений используются круглые скобки и выражение в скобках вычисляется и рассматривается как отдельный операнд. Кроме того, предварительно определяются все переменные и константы, разыскиваются элементы массивов, входящие в выражение. Затем вычисляются функции, к которым есть обращения, и далее выражение начинает выполняться слева направо, но с учетом приоритетов. Приоритеты операций приведены в таблице. Первый приоритет - самый высокий.

 

Таблица 8. Приоритеты операции Турбо-Паскаля

приоритет тип операций (действий) список операций
  Вычисления в скобках (), []
  Вычисления функций любые функции
  Унарные операции @,^,not,унарный"-"
  Операции типа умножения *,/,div,mod,and,shl,shr
  Операции типа сложения +,-,or,xor
  Операции отношений =, <>, >, >=, <, <=
  Операция присваивания :=

 

Примеры (цифры под выражением указывают порядок вычислений):

A x B

дробное выражение ----- записывается как A*B/C/D или A*B/(C*D)

C x D 1 2 3 1 3 2

пример логического выражения:

(X<1.5) or (2.5-3.2*X+Y * -sin(0.5/Z-1)* 0.01/ exp(sqr(-X /2.0))>Y) and

1 21 3 2 15 8 7 6 4 5 9 14 13 12 10 11 16 20

not(-X <> P1)

19 17 18

 



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 207; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.168.172 (0.216 с.)