Арифметические выражения и правила их записи



КУРС ЛЕКЦИЙ

 

Лекция 2

ЭЛЕМЕНТЫ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ.

ОСНОВНЫЕ ПОНЯТИЯ  ЯЗЫКА ПАСКАЛЬ

План лекции

§ Характеристика и назначение структурного программирования

§ Основные понятия языка ПАСКАЛЬ

w Алфавит языка Паскаль

w Лексемы языка Паскаль

w Типы данных языка Паскаль

§ Арифметические выражения и правила их записи

Характеристика и назначение структурного программирования

 

Структуризованная программа (или подпрограмма) – это программа, составленная из фиксированного множества базовых конструкций. Рассмотрим основные определения и способы образования этих конструкций в схемах алгоритмов.

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

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

Конструкция, состоящая из развилки, двух операций и слияния, называется ветвлением. Одна из операций может отсутствовать.

Конструкция, имеющая линии управления, ведущие к предыдущим операциям или развилкам, называется циклом.

Конструкции следование, ветвление и цикл можно представить как операции, так как они имеют единственный вход и единственный выход.

Произвольную последовательность операций можно представить как одну операцию.

Операция может быть реализована любым оператором языка ПАСКАЛЬ (простым или составным) либо группой операторов, за исключением оператора перехода GOTO.

В языке ПАСКАЛЬ количество базовых конструкций увеличено до шести, это:

-следование;

-ветвление;

-цикл с предусловием;

-цикл с постусловием;

-цикл с параметром;

-вариант.

Далее рассмотрим, как эти базовые конструкции реализуются в языке ПАСКАЛЬ.

 

 

Основные понятия языка ПАСКАЛЬ

 

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

Как в любом языке программирования, в Паскале присутствуют три составляющие: алфавит, синтаксис и семантика .

Алфавит – это фиксированный для данного языка набор основных символов, из которых может состоять текст на этом языке. Никакие другие символы в тексте не допускаются.

Синтаксис – это система правил, определяющих допустимые конструкции из символов алфавита. С помощью этих конструкций представляются отдельные компоненты алгоритма и алгоритм в целом.

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

 

 

Алфавит языка Паскаль

Алфавит языка Паскаль составляют основные символы языка - буквы, цифры и специальные символы. Паскаль включает следующий набор основных символов: 1) 26 латинских прописных и 26 латинских строчных букв:  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 2) _ подчеркивание 3) 10 цифр: 0 1 2 3 4 5 6 7 8 9 4) знаки операций: + - * / = <> < > <= >= := @ 5) ограничители: . , ' ( ) [ ] (. .) { } (* *) .. : ; 6) спецификаторы: ^ # $ 7) служебные (зарезервированные) слова: ABSOLUTE       EXPORTS                 LIBRARY                  SETASSEMBLER    EXTERNAL              MOD                          SHLAND и              FAR                            NAME                       SHRARRAY массив FILE                           NIL                            STRINGASM                   FOR                            NEAR                       THENASSEMBLER    FORWARD                NOT                          TOBEGIN                FUNCTION               OBJECT                    TYPECASE                  GOTO                        OF                              UNITCONST               IF                                OR                             UNTILCONSTRUCTOR IMPLEMENTATION PACKED                   USESDESTRUCTOR   IN                              PRIVATE                  VARDIV                      INDEX                      PROCEDURE           VIRTUALDO                       INHERITED             PROGRAM               WHILEDOWNTO           INLINE                     PUBLIC                     WITHELSE                   INTERFACE             RECORD                   XOREND                    INTERRUPT             REPEATEXPORT             LABEL                      RESIDENT Кроме перечисленных, в набор основных символов входит пробел. Пробелы нельзя использовать внутри сдвоенных символов и зарезервированных слов.

Лексемы языка Паскаль

 

Лексема – это минимальная конструкция языка, состоящая из символов алфавита, имеющая смысловое значение. Рассмотрим следующие виды лексем.

1. Слова. Их можно подразделить на зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.

Зарезервированные слова являются составной частью языка, имеют фиксированное начертание и раз и навсегда определенный смысл. Всего зарезервированных слов около шестидесяти (например, program, begin, end).

Стандартные идентификаторы служат для обозначения заранее определенных разработчиками языка типов данных, констант, процедур и функций. (Sin, Ln).

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

Существуют общие правила написания идентификаторов [1]:

Ÿ идентификатор начинается только с буквы или знака подчеркивания;

Ÿ идентификатор может состоять из букв, цифр и знака подчеркивания (пробелы, точки и другие специальные символы недопустимы);

Ÿ между двумя идентификаторами должен быть хотя бы один пробел;

Ÿ максимальная длина идентификатора 127 символов, все они значимы.

Паскаль не различает идентификаторы, написанные прописными и строчными символами. Например, SUM2, BL_6 – правильные идентификаторы; 1KL – ошибка, идентификатор должен начинаться с цифры; NOMER.DOMA – ошибка, идентификатор содержит точку.

2. Константы – это элементы данных, значения которых известны заранее и в процессе выполнения программы не изменяются. Различают такие виды констант, как литералы, именованные и типизированные константы.

К константам-литералам относятся:

Ÿ десятичные числа (например, 69, -619, 21.14 и т. п.);

Ÿ целые шестнадцатеричные числа, которые начинаются со знака $. Например, $B, $3A и т.п.;

Ÿ логические (или булевские) константы – принимают 2 значения: True и False;

Ÿ символьные константы, например, ‘A’, ‘45’, ‘?’ и т.п.;

Ÿ строковые константы, например, ‘FFF’, ‘DOM’, ‘BOX’ и т.п.

Именованная константа – это идентификатор, которому должно быть присвоено значение. Такие константы должны быть описаны в разделе описания констант программы. В Паскале для описания констант используется зарезервированное слово Const.

Формат

Const <идентификатор> = <значение константы>;

Пример

Const Max = 1000;Arg = -54.69; C = ‘GRUPPA’;

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

 

Таблица 1– Зарезервированные константы

Идентификатор Тип Значение Описание
Pi Real (вещественный) 3,141592.. Число «пи»
True Boolean (булевский) True Истина
False Boolean (булевский) False Ложь
Maxint Integer (целочисленный) 32767 Максимальное целое число

Типизированная константа – это константа, для которой указывается не только значение, но и тип. Типизированной константе можно присваивать только те значения, которые определяются данным типом. Например,

Const GR: INTEGER = 2005;

где INTEGER – целочисленный тип.

3. Переменная – это именованный элемент, который может изменять свое значение в процессе выполнения программы.

Каждая переменная характеризуется именем, которое является идентификатором, и типом.

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

Тип переменных должен быть описан перед тем, как с переменными будут выполняться какие-либо действия. Для описания переменных предназначено зарезервированное слово Var.

Формат

Var <идентификатор>: <тип>;

Пример

Var C: integer;

J:Char;

A, B:Real;

 

Типы данных языка Паскаль

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

Тип – это множество значений, которые могут принимать объекты программы, и совокупность операций, допустимых над этими значениями [1].

Например, значения 1 и 2 относятся к целочисленному типу, их можно складывать, умножать и выполнять другие арифметические операции. Значения «монитор» и «Паскаль» носят лингвистический характер, они имеют свой набор допустимых операций. В большинстве широкоупотребительных языков могут использоваться только строго определенные, заранее известные типы. Pascal, наряду со стандартными типами, имеющимися в других языках высокого уровня, позволяет программисту образовывать собственные типы.

Все допустимые в языке Паскаль типы подразделяются на две большие группы: простые и сложные (структурированные). 

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

Скалярные типы подразделяются на стандартные и определенные пользователем.

Стандартные типы предлагаются пользователям разработчиками языка Паскаль. К ним относятся целочисленные, вещественные, литерные, булевские типы данных и указатели.

Целочисленные типыданных представляют собой значения, которые могут использоваться в математических выражениях. Данные целочисленных типов могут быть представлены как в десятичной, так и в шестнадцатеричной системе, для записи которой используется знак $. Характеристика целочисленных типов данных представлена в таблице 2.

 

Таблица 2 – Характеристика целочисленных типов данных

Тип Диапазон Требуемая память (байт)
BYTE 0..255 1
SHORTINT -128..127 1
INTEGER -32768..32767 2
WORD 0..65535 2
LONGINT -2147483648..2147483647 4

 

Очевидно, что использование переменной типа Byte по сравнению с типом Integer экономит память в два раза. Использование байтового типа целесообразно, если известно, что значение переменной не превысит 255. В арифметических и логических выражениях допустимо смешение типов byte иinteger.

Пример

Var Sort, Nomer: integer;

A, B, C: integer;

Gran: byte; Min, Max: byte;

 

Вещественные типы данных представляют собой вещественные значения, которые используются в арифметических выражениях и занимают в памяти от 4 до 6 байт. Паскаль допускает представление вещественных значений с плавающей или фиксированной точкой. Вещественные десятичные числа с фиксированной точкой записываются по обычным правилам арифметики. Целая часть отделяется от дробной десятичной точкой. Если десятичная точка отсутствует, число считается целым. Вещественные десятичные числа с плавающей точкой представлены в экспоненциальном виде: mE+p, где m – мантисса (целое или дробное число с десятичной точкой), Е обозначает «10 в степени», p – порядок (целое число). Характеристика вещественных типов данных представлена в таблице 3.

 

Таблица 3 – Характеристика вещественных типов данных

Тип Диапазон Мантисса, знаков Требуемая память (байт)
REAL 2.9*10Е-39..1.7*10Е38 11-12 6
SINGLE 1.5*10Е-45..3.4*10Е38 7-8 4
DOUBLE 5.0*10Е-324..1.7*10Е308 15-16 8
EXTENDED 1.9*10Е-4951..1.1*10Е4932 19-20 10
COMP -2Е+63+1..2Е+63-1 10-20 8

 

Эффективное использование типов SINGLE, DOUBLE, EXTEND, COMP возможно только при включенной директиве {$N+}. По умолчанию она находится в выключенном состоянии. Для решения инженерно-экономических задач достаточно значений типа REAL.

Пример

Var Res, Summa, Itog: real;

X, Y: real;

Булевский тип данных описывается идентификатором BOOLEAN. Переменные и константы этого типа могут принимать только одно из двух значений: TRUE (истина) или FALSE (ложь).

Пример

Var Sel1, Sel2: boolean;

A,B,C,D: boolean;

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

 

Литерный (символьный) тип описывается стандартным идентификатором CHAR. Константы и переменные этого типа могут принимать одно из значений кодовой таблицы ASCII. Значение константы или переменной этого типа заключается в апострофы.

Например, Var Bukva, Znak, Simvol: char;

   Bukva:=’A’; Znak:=’+’; Simvol:=’!’

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

Кроме стандартных типов данных, Паскаль поддерживает скалярные типы, определенные пользователем. К ним относятся перечисляемый и интервальный типы. Данные этих типов занимают в памяти 1 байт, поэтому любой пользовательский тип не может содержать более 255 элементов. Их применение значительно улучшает наглядность программы, делает более легким поиск ошибок и экономит память.

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

Формат

Type <имя типа>=(<значение1, значение2, ..., значениеN>);

Var <идентификатор, ...>: < имя типа>;

 

Пример

Type Season =(Spring, Summer, Autumn, Winter);

Var S1, S2: Season;

Autumn: (September, October, Nowember);

В данном примере приведен явно описанный тип данных пользователя Season. Определены их значения – обозначения времен года. Переменные S1 и S2 могут принимать только одно из перечисленных значений. Попытка присвоить им любое другое значение вызовет программное прерывание. Третий тип перечисления – анонимный (не имеет имени) и задается перечислением значений в разделе Var. Autumn является переменной этого типа и может принимать значения September, October, Nowember. Таким образом, может быть задан любой тип, но это не всегда приемлемо. Первый способ, безусловно, более понятен и больше соответствует характеру языка Pascal.

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

Формат

Type <имя типа> = <константа1> .. <константа2>;

Var <идентификатор>: < имя типа>;

Пример

Type Days = 1.. 31;

Var Work_d, Free_d: Days;

В этом примере переменные Work_d, Free_d имеют тип Days и могут принимать любые значения из диапазона 1 . . 31.

Выход из диапазона вызывает программное прерывание.

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

Const Min = 1; Max = 31;

Type Days = Min .. Max;

Var Work_d, Free_d: Days;

 

Структурированные типы данных базируются на скалярных типах и могут содержать их различные комбинации. Они определяют упорядоченную совокупность скалярных элементов и характеризуются типом своих компонентов [1]. В языке Паскаль представлены следующие структурированные типы данных:

строка – последовательность символов, заключенная в апострофы;

массив – структурированный тип данных, состоящий из фиксированного количества элементов одного и того же типа, доступ к которым осуществляется по индексу;

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

запись – совокупность фиксированного числа компонентов разного типа;

файл – последовательность компонентов одного типа и одной длины.

Еще двум структурированным типам – процедурному и типу object (объектному) – трудно поставить в соответствие данные в обычном представлении.

 

Рисунок 1 Набор основных типов языка Паскаль

 

Арифметические выражения и правила их записи

 

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

Существует пять категорий операций, упорядоченных по убыванию старшинства:

1) – (унарный минус), @ - (взятие адреса объекта);

2) операция NOT;

3) операции типа умножения : *, /, DIV, MOD, AND, SHL, SHR (см. таблицу 4);

4) операции типа сложения: +, OR, XOR (см. таблицу 5);

5) операции сравнения: =, <>, >, <, >=, <=.

 

Таблица 4  Операции типа умножения

Обозначение Наименование Тип операторов Тип операндов
* умножение real real
    integer integer
    real, integer real
/ деление real, integer real
DIV целое деление integer integer
MOD остаток от деления integer integer
AND арифметическое И integer integer
  логическое И boolean boolean
SHL сдвиг побитовый влево integer integer
SHR сдвиг побитовый вправо integer integer

 

Таблица 5 – Операции типа сложения

Обозначение Наименование Тип операторов Тип операндов
+ сложение real real
    integer integer
    real, integer real
- вычитание real real
    real, integer real
    integer integer
or арифметическое ИЛИ integer integer
  логическое ИЛИ boolean boolean
xor арифметическое побитовое сложение по модулю 2 integer integer
  логическое исключающее ИЛИ boolean boolean

 

Функция DIV возвращает целую часть от деления числа нацело, а функция MOD – остаток от деления.

Например,

56 DIV 5 = 11 – выделяет целую часть полученного частного;

56 MOD 5 = 1 – выделяет остаток от деления нацело. В арифметических выражениях могут использоваться стандартные функции, представленные в таблице 6.

Таблица 6 – Стандартные функции языка Паскаль

Математическая запись Запись на Паскале Примечание
Sin x Sin(X)  
Cos x Cos(X)  
Ln x Ln(X) x>0
Sqrt(X)
Exp(X)  
Sqr(X)  
Arctg x Arctan(X)
Abs(X)  

tg(x) = sin(x)/cos(x)

ctg(x) = cos(x)/sin(x)

Аргументами этих функций могут быть данные любых числовых типов. Кроме них, при решении задач можно использовать следующие функции [3]:

Ÿ получение целой части:

§ Trunc(X) – результат имеет целочисленный тип;

§ Int(X) – результат имеет вещественный тип;

Ÿ получение дробной части: Frac(X) – результат вещественного типа;

Ÿ округление до целого: Round(X) – результат имеет вещественный тип;

Ÿ Pred(X)возвращает элемент, предшествующий X в списке значений типа. Тип результата совпадает с типом параметра;

Ÿ Succ(X)возвращает значение, следующее за X в списке значений типа. Тип результата совпадает с типом параметра.

Ÿ получение значения случайного числа:

§ Random– генерирует случайное значение из диапазона 0..0.99, результатимеет вещественный тип;

§ Random(X) – генерирует случайное значение из диапазона от 0 до х, результатимеет целочисленный тип.

§ Randomize -- процедура используется для обновления базы генерации.

Для определения четности/нечетности числа используется функция ODD. Ее аргументом может быть переменная только целого типа.

ODD(X) – возвращает значение булевского типа, равное True, если X – нечетное и False, если X – четное.

Например, ODD(3) – возвращает значение True, так как аргумент нечетный, ODD(4) – вернет значение False, ODD(2+7-1) – также вернет значение False.

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

 

 Þ  Þ

 Þ  Þ

 Þ  Þ

 Þ  Þ

Пример

 Þ  Þ  Þ  Þ  


Лекция 3


Дата добавления: 2018-04-15; просмотров: 617; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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