Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глоссарий.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
526 Кб
Скачать
☆

Лекция 2. Алгоритмический язык Турбо Паскаль 7.0.

Алфавит. Простые структуры данных.

Операции. Выражения

Язык Паскаль был разработан профессором Никлаусом Виртом в Швейцарском техническом институте в Цюрихе в 1968 – 1971 годах. Паскаль не был продуктом какого-то регулярного подхода к созданию языка, а появился в результате "творческого" акта. Создав Паскаль, Н. Вирт попытался объяснить, как это он сделал, но это уже было объяснение после выигранного сражения. Разработка принципов структурного программирования велась в те же годы, что, по мнению автора, позволяет связывать одно с другим. Во всяком случае, этот язык специально конструировался так, чтобы в нём нашли отражение самые фундаментальные понятия программирования в естественной, ясной и сжатой форме.

Язык Турбо Паскаль был создан фирмой Борланд (Borland) в 1983 году как расширение языка Паскаль.

В алфавит языка входят:

1. Латинские прописные и строчные буквы: A, …, Z, a, …, z.

2. Цифры от 0 до 9.

3. Символ подчёркивания "_". Из этих и только из этих трёх видов символов составляются слова (идентификаторы, имена). Слово всегда начинается с буквы, прописные и строчные буквы не различаются.

4. Простые специальные символы:

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

Из некоторых пар этих символов образуются составные специальные символы, воспринимаемые как один символ:

<= >= <> := (* *) (. .) ..

5. Пробельный символ. Этот символ является разделителем в языке. Он не может входить в состав слов и составных специальных символов.

Остальные символы клавиатуры могут входить в состав комментариев, а также символьных и строковых констант.

Слова языка подразделяются на следующие:

1. Ключевые (зарезервированные) слова – являются составной частью языка, имеют однозначно определённый смысл, изменить который в программе невозможно.

2. Стандартные директивы и имена – обозначают заранее определённые конструкции языка: дополнительные характеристики объектов языка, типы, константы, функции и процедуры. Их смысл можно изменять в программе, но нежелательно.

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

Полный набор ключевых слов представлен в таблице:

And

array

asm

begin

case

const

Constructor

destructor

div

do

downto

else

End

exports

file

for

function

goto

If

implementation

in

inherited

inline

interface

Label

library

mod

nil

not

object

Of

or

packed

procedure

program

record

Repeat

set

shl

shr

string

then

To

type

unit

until

uses

var

While

with

xor

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

Absolute

assembler

export

external

far

forward

index

Interrupt

near

private

public

resident

virtual

Некоторые стандартные типы языка:

Boolean

Byte

Char

Comp

Double

Extended

Integer

LongInt

Pointer

Real

ShortInt

Single

Text

Word

Некоторые стандартные константы языка: False и True.

Некоторые стандартные переменные языка: Input, Output, RandSeed.

Имена некоторых стандартных функций и процедур модуля System:

Abs

Addr

Append

ArcTan

Assign

Assigned

BlockRead

BlockWrite

Break

ChDir

Chr

Close

Concat

Continue

Copy

Cos

CSeg

Dec

Delete

Dispose

DSeg

Eof

Eoln

Erase

Exit

Exclude

Exp

FilePos

FileSize

FillChar

Flush

Frac

FreeMem

GetDir

GetMem

Halt

Hi

High

Inc

Include

Insert

Int

IOResult

Length

Ln

Lo

Low

MaxAvail

MemAvail

MkDir

Move

New

Odd

Ofs

Ord

ParamCount

ParamStr

Pi

Pos

Pred

Ptr

Random

Randomize

Read

ReadLn

Rename

Reset

Rewrite

RmDir

Round

RunError

Seek

SeekEof

SeekEoln

Seg

Sin

SizeOf

SPtr

Sqr

Sqrt

SSeg

Str

Succ

Swap

Trunc

Truncate

UpCase

Val

Write

WriteLn

Важное для программирования понятие типа основывается на трёх положениях: 1) тип – это множество допустимых значений какого-то данного; 2) с типом связано допустимое множество операций над данными этого типа; 3) с типом связан формат внутримашинного представления значений этого типа.

Паскаль – язык с сильной типизацией: 1) в нём имеется большой набор стандартных типов; 2) можно конструировать разнообразные новые типы; 3) любая переменная, функция, параметр подпрограммы должны быть описаны до их использования, то есть должен быть задан их тип.

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

Порядковые типы отличаются от вещественных тем, что каждый имеет ограниченное конечное число возможных значений. Эти значения можно упорядочить, то есть сопоставить каждому значению целое число. Порядковые типы делятся на: целые (ShortInt, Byte, Integer, Word, LongInt), логический или булевский (Boolean – состоит из двух констант False и True), символьный (Char), перечислимый и ограниченный (последние два типа конструируются программистом). К данным всех порядковых типов применимы стандартные функции Ord, Succ и Pred и стандартные процедуры Inc и Dec, а к остальным типам они неприменимы.

Вещественные типы представлены стандартным типом Real, а также типами, введёнными в Турбо Паскале: Single, Double, Extended.

Сложные типы представлены: массивами (array of), строками как особым случаем массивов символов (string), файлами (текстовыми – Text, типизированными – file of, бестиповыми – file), множествами (set of), записями (record…end), объектами как своеобразным развитием записей (object…end). Особое место занимают процедурные (функциональные) типы, объединяющие какие-то множества процедур или функций, и ссылочные типы (указатели), которые бывают типизированные и нетипизированные (Pointer) и содержат адреса данных в оперативной памяти.

Для константы можно задавать имя – это повышает удобство программирования и косвенно защищает от ошибок. Тип констант при этом определяется по их значению.

Тип переменных обязательно задаётся в описании. Их значение при этом остаётся неопределённым. В Турбо Паскале введено новое понятие – типизированная константа. Фактически оно обозначает переменную, для которой задано начальное значение, то есть здесь можно констатировать использование неудачного термина: слово константа (неизменная) представляет изменяемую величину.

Подробнее смотри литературу: 2 – 13.

Операции. Стандартные функции. Выражения

Все операции в языке Паскаль делятся на четыре группы в соответствии с их приоритетами. Первый (высший) приоритет имеют унарные операции (@, +, -, not), второй приоритет – мультипликативные операции (*, /, div, mod, and, shl, shr), третий приоритет – аддитивные операции (+, -, or, xor), четвёртый (низший) приоритет – сравнения и принадлежность множеству (=, <>, >, <, >=, <=, in).

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

Один и тот же знак операции может использоваться для операндов разных типов, например: операция not для логического операнда задаёт логическое отрицание, а для целочисленного – побитовое отрицание; операция "+" для числовых операндов задаёт сложение, для строковых – сцепление, а для множеств – объединение.

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

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

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

Выражение, как формула из операндов, операций и скобок, вычисляется в следующем порядке: 1) подвыражения в самых вложенных скобках; 2) обращения к функциям; 3) операции в соответствии с их приоритетами. В языке Паскаль необходимо обратить внимание на высокий приоритет логических операций. Поэтому, например, запись на языке Паскаль математического двойного неравенства 4 < x < 8 в виде выражения 4 < X and X < 8 вызовет сообщение об ошибке несоответствия типов. Правильная запись выглядит так: (4 < X) and (X < 8).

Подробнее смотри литературу: 2 – 13.

Лекция 3 Структура программы.

Инструкции присваивания и ввода/вы вода.

Пустая инструкция

Общий вид программы:

program Имя_программы;

Разделы описаний

begin

Основной блок программы

end.

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

begin

end.

Не только переменные, но и все именованные объекты программы должны быть предварительно описаны в соответствующем разделе. Каждый раздел начинается со своего ключевого слова и заканчивается с началом следующего раздела или на слове begin основного блока. Возможны объявления разделов: модулей – ключевое слово uses, меток – label, констант – const, типов – type, переменных – var; определение очередной процедуры – procedure, определение очередной функции – function. В Турбо Паскале разделы могут размещаться в любом порядке и быть не в единственном числе. Исключение составляет раздел uses: если он есть, то должен быть единственным и самым первым.

Основной блок содержит инструкции (операторы) программы. Инструкции – это законченные предложения языка, выполняющие некоторые действия над данными. Их условно можно разделить на простые и структурные (сложные, структурированные). Простые инструкции не содержат в себе других инструкций. Структурные инструкции содержат в себе хотя бы одну простую инструкцию и могут содержать другие структурные инструкции. К простым инструкциям относятся: присваивание (:=), обращение к процедуре, безусловный переход (goto), пустая инструкция. К структурным инструкциям относятся: составная инструкция или блок (begin…end), ветвления (if…then…else, case…of…else…end), циклы (while…do, repeat…until, for…to/downto…do), присоединение (with…do). Последовательно размещаемые инструкции разделяются символом ";".

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

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

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

Инструкция присваивания имеет вид

X := Expr

где X – переменная, Expr – выражение, значение которого после вычисления присваивается переменной X. Типы X и Expr должны соответствовать друг другу, как и при бинарных операциях (см. выше Тему "Операции"). При различии типов разрешается присваивание вещественной переменной X целого значения Expr, строковой X – символьного значения Expr, но не наоборот. В ситуации, когда X – целая и Expr – вещественное, необходимо явное преобразование типа с помощью стандартной функции Trunc или Round. Для преобразования из символьного типа в целый и обратно используются стандартные функции Ord и Chr.

В языке Паскаль отсутствуют инструкции ввода/вывода – вместо них используются инструкции обращения к стандартным процедурам. Общий вид обращения аналогичен уже рассмотренному обращению к функции: P(S1, S2, …, SN). Здесь P – имя процедуры, а в скобках – список из одного или более фактических параметров. Через эти параметры в процедуру передаются значения, и значения могут возвращаться. В отличие от обращения к функции обращение к процедуре является простой инструкцией языка.

Инструкции ввода с клавиатуры: Read – потоковый ввод, несколько таких инструкций последовательно вводят все символы из единого потока, не теряя ни одного из них; ReadLn – построчный ввод, несколько таких инструкций вводят данные каждый раз с новой строки, игнорируя избыточные символы в строке. Вводиться могут данные только целых, вещественных, символьного и строкового типов. Целые и вещественные значения разделяются пробелами или признаками "конец строки". Строковые данные желательно вводить инструкцией ReadLn.

Инструкции вывода на экран: Write – потоковый вывод, несколько таких инструкций выводят все символы в единый поток, в одну строку экрана; WriteLn – построчный вывод, несколько таких инструкций выводят данные каждый раз с новой строки, включая в её конец обычно невидимый признак "конец строки". Значение каждого из элементов списка вывода по отдельности можно форматировать, организуя более красивую и понятную печать. Выводиться могут данные тех же типов, что и при вводе, а также булевские данные.

Пустая инструкция – это просто пустое место. Несколько символов ";" подряд задают несколько пустых инструкций. Пустая инструкция может быть помечена, и тогда на неё можно передавать управление инструкцией goto.

Лекция 4. Блок. Ветвление.

Инструкции альтернативы и варианта

Составная инструкция (блок) – это последовательность любых инструкций, заключённая в инструктивные (операторные) скобки begin и end. Таким образом, блок позволяет свести цепочку инструкций в одну структурную инструкцию.

Простейшее альтернативное ветвление представлено инструкцией if, общий вид которой на языке Паскаль и на псевдокоде:

if L then

S1

else

S2

если L то

S1

иначе

S2

конец_если

Возможен и сокращённый вариант инструкции: if L then S1

В любом из вариантов S1 и S2 – это инструкции (каждая в единственном числе), но зато они могут быть простыми или структурными, что позволяет вкладывать в if любые инструкции.

Если в качестве S1 или S2 вкладываются другие альтернативы, то здесь самое главное – не запутаться в вариантах сочетания условий. Всегда действует правило: ветвь else соответствует ближайшей предшествующей ветви then, ещё не имеющей парной ей ветви else.

Инструкция варианта обычно необходима тогда, когда в алгоритме в зависимости от какого-то условия надо выбрать одну ветвь не из двух, а из большего числа ветвей. Её общий вид на языке Паскаль и на псевдокоде:

case C of

C1: S1;

…

CN: SN;

else

S

end

выбор C из

C1: S1;

…

CN: SN;

иначе

S

конец_выбора

где условие C – выражение порядкового типа; C1, …, CN – группы констант, однотипных с C; S1, …, SN, S – инструкции (каждая в единственном числе), но зато они могут быть простыми или структурными. Символ ";" после инструкции SN является необязательным. Любая из групп констант CK может быть списком одной или более констант: D1, D2, …, DM, – либо списком диапазонов (одного или более) констант: E1..E2, E3..E4, …, E2M-1..E2M. Если инструкция S – пустая, то можно опустить и ключевое слово else.

Инструкция case выполняется в два этапа: сначала вычисляется выражение C; затем, если полученное значение C принадлежит какому-то набору CK, то выполняется инструкция SK и управление передаётся за слово end, если же полученное значение C не принадлежит никакому набору CK, то выполняется инструкция S (если она есть) и управление также передаётся за слово end.

Лекция 5. Циклы. Инструкция

безусловного перехода,

метки

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

Цикл с предусловием:

while L do

S

пока L повторять

S

конец_пока

здесь S, как и в инструкциях ветвления, – это единственная инструкция тела цикла, но зато она может быть простой или структурной.

Цикл с постусловием:

repeat

S1;

…

SN

until L

повторять

S1;

…

SN

до L

здесь S1, …, SN – это цепочка из одной или нескольких инструкций (простых или структурных), составляющих тело цикла. В отличие от цикла с предусловием тело обязательно выполняется хотя бы один раз.

Цикл со счётчиком является частным случаем цикла с предусловием и имеет общий вид при шаге K3=1:

for K := K1 to K2 do

S

для K от K1 до K2 шаг K3 повторять

S

конец_для

При шаге K3 = -1 ключевое слово to заменяется словом downto:

for K := K1 downto K2 do

S

В первом случае в цикле будет выполнено 0 итераций, если значение выражения K1 больше значения выражения K2. Во втором же случае будет выполнено 0 итераций, если K1 меньше K2. При других соотношениях K1 и K2 в обоих циклах выполняется |K2-K1|+1 итераций, если в теле S не оказывается влияние на счётчик K (например с помощью присваивания, ввода или другого вложенного цикла с одноимённым счётчиком).

Тип K, K1, K2 – любой порядковый. Все три параметра – однотипные.

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

M: S

Метка M обязательно объявляется в разделе label и задаётся либо именем, либо целой неотрицательной константой.