Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 1 семестр.doc
Скачиваний:
25
Добавлен:
10.06.2015
Размер:
1.26 Mб
Скачать

Программирование на языках высокого уровня

1. Основные понятия

1.1. Алфавит и словарь языка

Программа формируется из предложений, состоящих из лексем и разделителей, которые в свою очередь формируются из конечного набора литер, образующих алфавит языка Pascal. Этот язык состоит из букв латинского алфавита (прописных – А, В, С, D ... X, Y, Z, строчных – а, b, с ... x, у, z), арабских цифр (0, 1, 2, 3,4, 5, 6, 7,8,9) и специальных символов.

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

Разделителями являются:

  • пробел,

  • конец строки,

  • ; – точка с запятой (конец предложения)

  • комментарий, представляющий собой текст, ограниченный слева и справа фигурными скобками.

Лексемы включают: зарезервированные слова, идентификаторы (стандартные и пользовательские), специальные символы (простые и составные), метки.

Зарезервированные слова представляют собой составную часть языка, имеют фиксированное начертание и определенный смысл (например, зарезервированное слово VAR открывает раздел описания переменных).

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

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

Правила составления идентификаторов.

  1. Идентификатор начинается с буквы, или знака подчеркивания.

  2. Содержит только буквы, цифры или знак подчеркивания.

  3. Между двумя идентификаторами должен стоять разделитель.

  4. Максимальная длина 127 символов. Все символы значимы.

  5. Идентификатор не может повторять зарезервированное слово.

  6. Если идентификатор пользователя повторяет стандартный, то действие стандартного идентификатора – отменяется.

Примеры пользовательских идентификаторов: x, s, s23, asd_sd45.

Специальные символы:

Простые

«+», «-», «*», «/», «=», «>», «<», «_», «.», «,», «:», «;», «{}», «[]», «()», «^», «'», «$».

Составные

«:=», «<>», «..», «<=», «>=».

Метки используются для идентификации операторов в программе при переходе по оператору GOTO. Правила написания меток отличаются от правил составления идентификаторов, следующим – на первом месте может стоять цифра.

Примеры меток: В1ок_12, 67, М1, exit, 15GX.

1.2. Скалярные, стандартные типы данных

Данные скалярного типа имеют в качестве своего значения одну единственную величину. В этом разделе мы остановимся на четырех важнейших, стандартных типах данных - INTEGER, REAL, BOOLEAN и CHAR.

Константы и переменные

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

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

Переменные - это данные, которые меняют свое значение по ходу выполнения программы.

Тип INTEGER (целый)

Этот тин представляет множество целых чисел диапазона от -32768 до 32767. В памяти ЭВМ под целое число отводится два байта (16 бит). Наибольшему значению целого числа 32767 соответствует стандартный идентификатор MAXINT, а наименьшему – выpaжeниe NOT (MAXINT) = - (MAXINT+1), или число -32768.

Операции, проводимые над целыми числами: «+» сложение, «-» вычитание, «*» умножение, DIV - целочисленное деление, MOD - остаток от целочисленного деления, AND - арифметическое 'И', OR - арифметическое 'ИЛИ', NOT – арифметическое отрицание, XOR - исключающая дизъюнкция. Примеры использования этих операций приведены в таблице1.

Таблица 1.

Операция

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

Результат выполнения

+

5 + 3

8

-

5 - 3

2

*

5 * 3

15

DIV

14 div 4

3

MOD

14 mod 4

2

AND

11 and 5

1

OR

11 or 4

15

NOT

not 8

-9

XOR

11 xor 21

30

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

Например: требуется вычислить выражение 1000 * 4000 div 2000. Поскольку операции умножения и деления имеют один приоритет и выполняются слева направо в порядке записи арифметического выражения, то при умножении произойдет прерывание, связанное с переполнением. Выход из этой ситуации возможен при изменении порядка выполнения операций умножения и деления, для чего используются круглые скобки ==> 1000 * (4000 div 2000).

Предусмотрено представление целых чисел в шестнадцатеричной системе счисления. Форма записи таких чисел , где X - целая константа, а символ $ - признак. Примеры: $57, $1FF. Напомним, что в шестнадцатеричной системе счисления цифры 10, 11, 12, 13, 14 и 15 заменяются латинскими буквами А, В, С, D, Е и F соответственно.

Кроме типа INTEGER в языке Pascal предусмотрены и другие целые типы данных BYTE, SHORTINT, WORD и LONGINT (таблица 2). Все эти типы определены на множестве целых чисел, характеризуются одним набором арифметических операций и отличаются диапазоном значений и объемом занимаемой памяти.

Таблица 2

Название типа

Длина, байты

Диапазон значений числа

BYTE

1

0 .. 255

SHORTINT

1

-128 .. 127

WORD

2

0 .. 65535

INTEGER

2

-32768 .. 32767

LONGINT

4

-2147483648.. 2147483647

Тип REAL (вещественный)

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

Вещественное число записывается и хранится в памяти компьютера в виде , где m – мантисса, В – основание представления числа с плавающей точкой, n – порядок (целое число). Имеют место ограничения –M1 < m < +М2; -E1< n < +Е2. В этих выражениях B, Е и М — константы, характеризующие представление числа. В таблице 3 приведены значения этих констант для вещественных типов данных, используемых в Pascal.

Таблица 3.

Название типа

Длина, байты

Мантисса, количество

значащих цифр

Диапазон десятичного порядка

SINGLE

4

7 .. 8

-45 .. 38

REAL

6

11 .. 12

-39 .. 38

DOUBLE

8

15 .. 16

-324 .. 308

EXTENDED

10

19.. 20

-4951 .. 4932

Так, для типа REAL основание В равно 10. Размер мантиссы 11—12 десятичных чисел. Диапазон десятичного порядка равен [-39, +38]. Таким образом, на отрезке оси вещественных чисел в заданном диапазоне можно закодировать только конечное число значений, а поскольку на оси таких чисел бессчетное множество, то выбирается интервал, «дискрет», на который этот диапазон (отрезок) делится. Число таких интервалов конечно. Каждый дискрет ставится в соответствие значению вещественного числа. Конечное множество определенных таким образом представителей вещественных чисел называется континуумом. Результаты вычислений округляются до чисел этого множества, поэтому необходимо говорить о точности вычислений. Округление результата происходит до ближайшего вещественного числа большего данного по модулю. Следует также отметить, что эти интервалы не являются равными. В соответствии с полулогарифмическим способом своего представления интервалы «растягиваются» с увеличением порядка. Наибольшая точность расчетов достигается в центральной части диапазона изменения вещественного числа X (например, в районе 1.0Е+00 погрешность вычислений 0,00000000001), и наименьшая — на его краях (например, в окрестностях числа 1.0Е+38 погрешность вычисления равна 1000000000000000000000000000).

Существует две формы отображения вещественных чисел (таблица 4): полулогарифмическая (с плавающей точкой) и естественная (с фиксированной точкой).

Таблица 4. Правильное представление вещественных чисел

С плавающей точкой

С фиксированной точкой

0.000000Е + 00 (нормальная форма)

0.0

1.340000Е + 02

134.0

-7611 .Е - 02

-76.11

-98.3569Е - 05

-0.000983569

Над вещественными числами определены операции сложения (+), вычитания (-), умножения (*) и деления (/). Операция возведения в степень не предусмотрена.

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

ошибки ввода — недостаточная точность исходных данных при сборе, подготовке и их вводе в ЭВМ;

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

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

Тип BOOLEAN (булевский, логический)

Логический тип в языке Паскаль задается как перечисляемый тип, содержащий всего два значения, которые имеют идентификаторы FALSE (ложь) и TRUE (истина). Элементам этого типа поставлены в соответствие номера: 0 — значению FALSE и 1 — TRUE. Поэтому FALSE < TRUE.

В памяти ЭВМ переменные этого типа занимают один байт. Над данными этого типа определены операции: дизъюнкция ( ˅ ) OR, конъюнкция ( ˄ ) AND, исключающее ИЛИ (), отрицание () NOT, а также отношения <, >, <=, >=, <>, =. Результаты выполнения логических операций над булевыми переменными P и Q приведены в таблице 5.

Таблица 5

P

Q

P ˄ Q

P ˅ Q

PQ

P

Q

False

False

False

False

False

True

True

True

False

False

True

True

False

True

False

True

False

True

True

True

False

True

True

True

True

False

False

False

Следует отметить, что операции сравнения данных любых типов имеют результат типа BOOLEAN. Например, если даны переменные с именами Р, Q типа BOOLEAN и X, Y, Z типа REAL, причем X = 5.8, Y = 8, a Z = 10.3 , то справедливы утверждения:

Q := (X < Y) ˄ (Y <= Z) =>TRUE;

P:= X = Y =>FALSE.

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

В языке имеется функция ODD(X), где X - целое число. Если X четно, то ODD(X) принимает значение FALSE, если X нечетно, то ODD(X) – TRUE.

Основные соотношения алгебры логики:

1. Р ˅ Q = Q ˅ Р.

Р ˄ Q = Q ˄ Р.

2. (Р ˅ Q) ˅ R = Р ˅ (Q ˅ R).

(Р ˄ Q) ˄ R = Р ˄ (Q ˄ R).

3. (Р ˄ Q) ˅ R = (Р ˅ R) ˄ (Q ˅ R).

(Р ˅ Q) ˄ R = (Р ˄ R) ˅ (Q ˄ R).

4. (Р ˅ Q) = P ˄ Q.

(Р ˄ Q) = Р ˅ Q.

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

Эквивалентные преобразования

X ≠ Y (X = Y)

X  Y (X > Y) ˅ (X = Y)

X  Y (X < Y)

X > Y (X < Y) ˄ (X = Y)

Тип CHAR (литерный, символьный)

Этот тип задает конечное упорядоченное множество символов (литер), допускаемое в конкретной реализации языка. В ЭВМ для внутреннего представления символов, хранения символьной информации на внешних носителях и кодирования знакогенераторов дисплеев и печатающих устройств используется восьмиразрядный код ASCII (American Standard Code for Information Interchange -стандартный американский код, используемый для обмена информацией). Емкость кода 256 единиц.

Общая часть кодовой таблицы для всех персональных компьютеров содержит символы, имеющие коды от 32 до 127, сведенные в таблицу 6.

Таблица 6

32 – пр.

48 –0

64 –@

80 – Р

96 – ‘

112 – p

33 – !

49 – l

65 – А

81 – Q

97 – а

113 – q

34 – "

50 –2

66 – В

82 – R

98 – b

114 – r

35 – #

51 – 3

67 – С

83 – S

99 – с

115 – s

36 – $

52 –4

68 – D

84 – Т

100 – d

116 – t

37 – %

53 –5

69 – Е

85 – U

101 – е

117 – u

38 – &

54 – 6

70 – F

86 – V

102 – f

118 – v

39 – ’

55 –7

71 – G

87 – W

103 – g

119 – w

40 – (

56 –8

72 – Н

88 – X

104 – h

120 – x

41 – )

57 –9

73 – I

89 – Y

105 – i

121 – у

42 – *

58 – :

74 –J

90 – Z

106 – j

122 – z

43 – +

59 – ;

75 – К

91 – [

107 – k

123 – {

44 – ,

60 – <

76 – L

92 – \

108 – l

124 – |

45 – -

61 –=

77 – М

93 – ]

109 – m

125 – }

46 – .

62 – >

78 – N

94 – ^

110 – n

126 – ~

47 – /

63 – ?

79 – О

95 – _

111 – o

127 –

Первые позиции 0 –31 заняты под коды управления устройствами (монитор, принтер и др.) и могут иметь разное воздействие на разные устройства. Например, код 7 вызывает звуковой сигнал при выводе информации на дисплей - WRITELN ('Проверьте принтер!', CHR(7)); коды 13 и 10 для дисплея или принтера осуществляют перевод курсора в начало текущей строки и переход на следующую строку. Эти коды можно использовать для вывода информационного сообщения, составляющего несколько строк, с помощью одного оператора вывода:

WRITELN('Bнимание!'' + CHR(13) + CHR(10) + 'Следите за экраном.').

Переменная часть кодовой таблицы содержит национальный алфавит, символы псевдографики и специальные нестандартные символы. Коды 128 — 255, приведенные в таблице 7, отражают модифицированную кодировку ГОСТа для подключения кириллицы.

Таблица 7

128 – А

144 – Р

160 – а

176 – ░

192 – └

208 – ╨

224 –р

240 – Ё

129 – Б

145 – С

161 –б

177 – ▒

193 – ┴

209 – ╤

225 – с

241 – ё

130 – В

146 – Т

162 – в

178 – ▓

194 – ┬

210 – ╥

226 –т

242 – Є

131 –Г

147 – У

163 – г

179 – │

195 – ├

211 – ╙

227 – у

243 – є

132 –Д

148 – Ф

164 – д

180 – ┤

196 – ─

212 – ╘

228 – ф

244 – Ї

133 – Е

149 – X

165 – е

181 – ╡

197 – ┼

213 – ╒

229 – х

245 – ї

134 – Ж

150 – Ц

166 – ж

182 – ╢

198 – ╞

214 – ╓

230 – ц

246 – Ў

135 – 3

151 – Ч

167 –з

183 – ╖

199 – ╟

215 – ╫

231 – ч

247 – ў

136 – И

152 – Ш

168 – и

184 – ╕

200 – ╚

216 – ╪

232 – ш

248 – º

137–Й

153 – Щ

169 –й

185 – ╣

201 – ╔

217 – ┘

233 – щ

249 – •

138 – К

154 – Ъ

170 – к

186 – ║

202 – ╩

218 – ┌

234 – ъ

250 – ·

139 – Л

155 – Ы

171 – л

187 – ╗

203 – ╦

219 – █

235 – ы

251 – √

140 – М

156 – Ь

172 –м

188 – ╝

204 – ╠

220 – ▄

236 – ь

252 – №

141 –Н

157 –Э

173 – н

189 – ╜

205 – ═

221 – ▌

237 –э

253 –

142 – О

158 – Ю

174 – о

190 – ╛

206 – ╬

222 – ▐

238 –ю

254 –■

143 – П

159 – Я

175 – п

191 – ┐

207 – ╧

223 – ▀

239 – я

255 –зб.

Примечание: в таблицах 6 и 7 сокращения (пр.) и (зб.) означают пробел и забой соответственно.

Значения констант и переменных типа CHAR есть один символ из допустимого набора, например: 'Z', 'j', '2', '*', 'Ц', 'д', 'г'. Второй способ записи символа в программе состоит в использовании префикса # перед номером литеры. Примеры символов: #90, #106, #50, #42, #150, #164.

Описываются переменные этого типа как – VAR CHI, CH2:CHAR;

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

Например: 'В' > 'А' => FALSE, '1' <= '9' => TRUE.

Множество цифр и букв не только упорядочено в соответствии с кодом литер от 32 до 255, но и связно, код последующей литеры больше кода предшествующей на 1.

Таким образом, '0' < '1' < '2' < ... < '9'; 'А' < 'В' < 'С < 'D' < ... < 'Z'; 'а' < 'б' < 'в' < 'г' < ... < 'я'.

Для работы с литерами часто используются функции CHR, ORD, PRED, SUCC, описание которых приведено в таблице 10.

Пример 1. Вывести на экран монитора литеры, коды которых начинаются с 32 и заканчиваются — 255.

PROGRAM PR1; VAR I: INTEGER; BEGIN

FOR I:=32 TO 255 DO WRITELN('код =', I:-3,'===>', CHR(I))

END.