I основы языка высокого уровня турбо pascal алфавит языка Pascal




Дата канвертавання25.04.2016
Памер327.5 Kb.


ЧАСТЬ I

1. ОСНОВЫ ЯЗЫКА ВЫСОКОГО УРОВНЯ ТУРБО PASCAL
1.1. Алфавит языка Pascal
Алфавит языка Pascal состоит из:

  • 26 букв английского алфавита и знака подчеркивания - "_";

  • 32 букв русского алфавита (только для комментариев и текстовых сообщений);

  • 10 арабских цифр ( 0 - 9 );

  • знаков математических операций +, -, *, /, mod, div;

  • знаков операций отношений <, >, <=, >=, =, <>;

  • разделителей - ".", ",", ";", ":", (), [], {}, ' ;

  • спецсимволов - #, $, ^, &, @, := .

Прописные и строчные буквы Pascal'eм не различаются. Знаки «возведение в степень» и двойная кавычка - " - в языке отсутствуют.
1.2. Идентификаторы
Идентификаторы - имена констант, переменных, меток, типов процедур, функций, модулей, программ и полей в записях. Идентификатор является комбинацией только букв, цифр и знака подчеркивания. Другие символы не допускаются. Должен начинаться с буквы или знака подчеркивания. Длина идентификатора не должна превышать 127символов.
1.3. Константы
Паскаль обрабатывает константы следующих типов:

  1. Целые константы: +354, -5298, 101;

  2. Вещественные константы, представленные двумя способами

  • с фиксированным разделителем: 234.56, - 3456.002;

  • в экспоненциальной форме:3.4783Е+12, -658.56546Е-6 .

  1. Шестнадцатеричные числа записываются цифрами от 0 до 9 и буквами от А до F c предшествующим знаком денежной единицы: $A12, $2465F. Диапазон изменений - от $000000000 до $FFFFFFFFF.

  2. Символьные (текстовые) константы - набор любых символов клавиатуры, заключенных в апострофы: 'ABCD', ' X = ', ' Cумма = ', ' Таблица Nо 1 '.

  3. Логические константы имеют только два значения : TRUE и FALSE. Их принимают переменные логического (BOOLEAN) типа.


1.4. Правила записи Pascal программ
Строки Pascal программ представляют собой законченные команды языка, элементы описательной части или заголовки программных модулей. Признаком завершения строки является символ ";".Длина строки не должна превышать 127 символов. Строки Pascal программ могут свободно размещаться относительно строк текстового редактора: в одной строке редактора могут располагаться несколько команд Pascal' я, а одну длинную команду можно располагать в нескольких строках редактора. Допускаются пустые строки. Завершаться любая программа должна словом END с точкой на конце.
1.5. Основные части Pascal программ
Практически все Pascal программы состоят из двух основных частей: описательной и исполнительной.

Исполнительная часть располагается за описательной и охватывается двумя зарезервированными словами BEGIN ... END. Она содержит конкретные предписания ЭВМ, определяющие её действия при работе по программе.

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

PROGRAM <идентификатор>;

После заголовка могут располагаться следующие разделы:

USES - описания библиотек;

TYPES - типов;

CONST - констант;

LABELS - меток;

VAR - переменных.

Описание переменных производится следующим образом:

VAR <идентификатор>:<указатель типа переменной>;

Например - VAR x, y, z : Real;

i, k : Integer;


1.6. Стандартные типы данных Pascal
Так называется набор типов данных, описанных первым международным стандартом языка Pascal. Для настоящего курса можно ограничиться этими данными, хотя современный Pascal имеет много больше типов. Каждый тип данных указывается в разделе описания переменных после имени переменной через двоеточие (см. предыдущий пример).



Обозначение типа

Указатель типа

Длина

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

Целочисленный

INTEGER

2b

-32768 ... +32767

Вещественный

REAL

6b

1E-38 ... 1E+38

Логический

BOOLEAN

1b

TRUE ... FALSE

Символьный

CHAR

1b

'A'...'z'

Байтовый

BYTE

1b

0 ... 255


1.7. Составной оператор. Пустой оператор
Составной оператор представляет собой специальную структуру, позволяющую объединять несколько операторов в одно действие. Лексическая схема (лексема) такого оператора представляет собой следующее:

( S1; S2; S3; ... ; Sn );

где

( - операторная скобка, зарезервированное слово BEGIN;



S1;S2;...;Sn - исполняемые операторы;

) - операторная скобка, зарезервированное слово END;

; - признак завершения оператора.

В программе составной оператор обычно записывается так:

BEGIN

< оператор 1 >;

< оператор 2 >;

< оператор 3 >;

..............



< оператор N >

END;


Как видно из лексемы, после открытой скобки ( слова BEGIN ) и перед закрывающейся ( слово END ) символ ";" не ставится. Но если после <оператор N> поставить ";" , то по синтаксическим правилам Pascal'я эта запись будет называться «пустой оператор». Пустой оператор не содержит никаких действий. Может использоваться для передачи управления в конец составного оператора.
1.7. Физический смысл имени переменной
Для ЭВМ имя переменной - адрес (абсолютный номер) ячейки оперативной памяти. Анализируя описательную часть программы, транслятор закрепляет за каждой переменной, указанной там, конкретную ячейку памяти и запоминает её номер (адрес). В дальнейшем, по мере надобности, ЭВМ производит обращение к этой ячейке - записывает туда информацию или считывает её оттуда. Таким образом переменная будет менять своё значение. Но для ЭВМ это будет не переменная "Х" или "Y", а ячейка за номером N1 или N2.
1.8. Арифметическое выражение
Арифметическое выражение - совокупность констант, имён переменных, функций, объединённых знаками математических операций.
1.9. Таблица арифметических функций языка Pascal


Обозначение

Функции


Тип

результата



Тип

аргумента



Реализуемое

Действие


ABS(x)

Real,Integer

Real,Integer

Модуль аргумента.

ArcTan(x)

Real

Real

Арктангенс (радианы).

COS(x)

Real

Real

Косинус (радианы).

EXP(x)

Real

Real

Экспонента.

FRAC(x)

Real

Real

Дробная часть числа.

INT(x)

Real

Real

Целая часть числа.

LN(x)

Real

Real

Натуральный логарифм.

PI

Real

Real

Число ПИ 3,14159...

Random(x)

Integer

Integer

Генератор случайных

чисел 0 <= n < x .



SIN(x)

Real

Real

Синус (радианы).

SQR(x)

Real

Real

Квадрат аргумента.

SQRT(x)

Real

Real

Квадратный корень.



1.10. Правила составления и вычисления арифметических выражений
Арифметическое выражение (АВ) вычисляется слева направо с учётом приоритета арифметических действий и наличия скобок. АВ записывается в одну строку - многоэтажные записи не допускаются. Не допускается употребление квадратных и фигурных скобок. Основное требование к скобкам - их парность: Каждой открытой скобке должна соответствовать закрытая. Количество скобок и их вложенность не ограничена. Все знаки арифметических действий должны проставляться в явном виде. При переносе АВ на новую строку знаки математических действий не дублируются. Употребление специальных знаков - радикалов, сумматоров, интегралов и т.д. запрещено. При наличии в числителе или знаменателе дроби суммы или разности они должны быть охвачены скобками. При включении арифметических функций в АВ сначала записывается имя функции, затем аргумент, охваченный скобками.
1.11. Оператор присваивания
Формат оператора:

VAR := EXPR ;

где

VAR - имя переменной, получающей новое значение;



:= - символ присваивания, его можно читать как «становиться равным»;

EXPR- арифметическое выражение;

; - знак завершенности оператора.
Во время выполнения этого оператора в ЭВМ происходит следующее:

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

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

3. Вычисленный результат пересылается по адресу переменной VAR, получающей новое значение.


1.12. Согласование типов данных.

Паскаль требует соблюдения определённых правил совместимости типов переменных и значений справа и слева от оператора «:=». Так, типы являются совместимыми, если:



  • оба типа являются одинаковыми;

  • оба типа являются вещественными типами;

  • оба типа являются целочисленными;

  • один тип является поддиапазоном другого;

  • оба типа являются поддиапазонами одного и того же базового типа;

  • один тип является строковым, а другой строковым или символьным типом.


1.13. Способы ввода данных
А) Ввод данных из текста программы.

1. Через типизированные константы (константы с начальными значениями):


...................................

CONST a=3.78; b=8.9;

Yes_No=TRUE; Kon=' Конец !';

...................................

2. С помощью оператора присваивания:

...................................

BEGIN

A:=3.78; B:=8.9;



Yes_No:=TRUE; Kon:=' Конец !';

..............................

Б) Ввод данных с клавиатуры.

1. Редактируемый ввод:

...................................

BEGIN


Write(' Вводите A, B =');

Read ( a, b );

.........................

2. Не редактируемый ввод:

...................................

BEGIN


.........................

Write(' Продолжим? ');

Yes_No:=ReadKey;

.........................

В) Считывание данных с внешних устройств.
( см. ниже ).
1.14. Операторы ввода - вывода
Форматы операторов:
READ ( <список> );

READLN ( <список> );

WRITE ( <список> );

WRITELN ( <список> );

где

READ, READLN - ключевые слова, в переводе означают «читать» и «читать строку»;



WRITE, WRITELN - ключевые слова, в переводе означают «писать» и «писать строку»;

<список> - перечень аргументов оператора;

; - знак, завершающий оператор.

Первые два оператора являются операторами ввода. Они работают следующим образом: встретив такой оператор в программе ЭВМ прекращает работу и переходит в режим ожидания ввода данных с клавиатуры. В этот момент необходимо напечатать на экране столько значений, сколько переменных содержится в списке оператора. Разделять значения нужно пробелом или нажимая на клавишу Enter после печати каждого числа. В тексте программы список этих операторов должен содержать только переменные, разделённые запятыми. Различия в действиях операторов проявляются только при работе с текстовыми файлами, о чём будет рассказано ниже. Операторы WRITE и WRITELN служат для вывода информации. Их списки могут содержать не только переменные, как у READ и READLN, но также константы, переменные и выражения, разделённые запятыми. Различия в действиях операторов проявляются в следующем:

После вывода информации оператором WRITE, курсор на экране остаётся в той же строке. Оператор WRITELN после вывода списка переводит курсор на новую строку.


1.15. Форматирование вывода данных
Если не давать особых распоряжений в операторах вывода, вещественные значения переменных будут печататься в экспоненциальной форме с выводом 16 разрядов мантиссы, даже если не все они содержат значения. Например:

- в программе a:=-1.25; WRITE ( a );

- на экране -1.250000000000000E+0000 .

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

- в программе a:=-1.25; WRITE ( a:5:2 );

- на экране -1.25

В общем виде формула подсчёта количества позиций в вещественных значениях, выводимых с фиксированным разделителем, выглядит так:

W >= K + D + 2

Где:

W - общая длина числа;



K - количество разрядов в целой части;

D - количество разрядов в дробной части;

2 - позиции под разделитель и знак числа;

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


2. АЛГОРИТМИЗАЦИЯ
2.1. Классификация алгоритмов
Алгоритмом называется определённая последовательность действий, позволяющая получить из исходных данных однозначный результат. Говоря проще, алгоритм - ход решения какой-либо задачи. Несмотря на то, что задачи, решаемые с помощью ЭВМ, могут иметь неограниченную сложность, любой алгоритм всегда разлагается на три основные структуры:

- линейный вычислительный процесс;

- разветвляющийся вычислительный процесс;

- циклический вычислительный процесс.



2.2.Линейный вычислительный процесс
Линейным вычислительным процессом называется однократно выполняемая последовательность действий. Например:
Program Line;

VAR a,b,c : Real;

BEGIN

Write( ' Ввести A, B =' );



Read ( a,b );

C:= A + B ;

Write ( ' Сумма =', C:7:3 )

END.
2.3. Способы описания алгоритмов


Существует несколько способов описания алгоритмов - словесный, формульный, с помощью операторов программ, графический и т.д. Наиболее наглядным является графический способ.
2.4. Блок - схемы алгоритмов. Правила составления
Основной принцип графического способа заключается в следующем: каждое действие в программе описывается символом особой формы. Символы располагаются в определённой последовательности на бумаге и соединяются линиями связи. Внутри символов делаются поясняющие записи произвольной формы. Если не хватает места для пояснений внутри блока, они выносятся на бумагу рядом. Основным направлением линий связи являются сверху вниз и слева направо. Если направление линии совпадает с основным, стрелка на ней не проставляется. Блоки могут иметь нумерацию в соответствии с основными направлениями линий. Если линии связи имеют много пересечений, блок-схема теряет свою наглядность. В этом случае принято линии разрывать, а в концах разрыва проставлять соединители с указанием номера блока, к которому направлена данная линия. При больших размерах схем они располагаются на нескольких листах. В этом случае на концах разрыва линий связи проставляют межстраничные соединители.
2.5. Символы блок-схем



  • логическое начало или логический

конец алгоритма:


  • вычислительный процесс:








  • предопределённый процесс

( подпрограмма ):



  • ввод-вывод данных :


  • выбор, развилка, условие:





  • внутри страничный соединитель:

- цикл с известным числом повторений:




- соединитель:








  • межстраничный соединитель:


2.6. Разветвляющийся вычислительный процесс
Разветвляющимся вычислительным процессом называется алгоритм, содержащий хотя бы одно условие, в зависимости от выполнения или нарушения которого будет выполняться та или другая последовательность действий, называемая ветвями алгоритма. Количество ветвей и условий в разветвляющихся алгоритмах не ограничено.
2.7. Логическое выражение
Логическим выражением называется совокупность констант, переменных, арифметических и логических функций, знаков математических и логических операций, а также операций отношений. Данным курсом предусмотрено изучение следующих логических операций Pascal'я:
- AND - логическое умножение, логическое " И ";

- OR - логическое сложение, логическое " ИЛИ ";

- NOT - логическое отрицание, логическое " НЕ ".

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

IF ( x<=4 ) AND ( x>= 2 ) Then ........

2.8. Оператор условного перехода
Формат оператора:
IF THEN ( S1; S2;...;Sn) ELSE (S'1;S'2;...;S'n);

где:


  • IF - первое ключевое слово, в переводе означает "если";

  • LOG-EXPR - логическое выражение;

  • THEN - второе ключевое слово, в переводе означает "тогда";

  • (S1;...;Sn) - составной оператор, выполняемый в случае, если

  • LOG-EXPR имеет значение TRUE, т.е. "истинно";

  • ELSE - третье ключевое слово, в переводе означает "иначе";

  • (S'1;S'2;...;S'n) - составной оператор, выполняемый в случае, если LOG - EXPR имеет значение TRUE, т.е. "истинно".

Первый составной оператор (S1; S2;...; Sn) называется веткой «ДА» или "Действие 1". Второй составной оператор ( S'1; S'2;...; S'n) называется веткой «НЕТ» или "Действие 2". В Pascal'е существует ещё одна форма оператора условного перехода, без ветки «НЕТ»:
IF THEN ( S1; S2;...;Sn) ;

Составной оператор ветки «ДА» включается в программу, если условие, записанное в операторе, выполняется. Если условие нарушается, то после оператора IF выполняется следующий по программе.


2.9. Блок-схема операторов условного перехода

а) вход


Да Нет


Оператор 1



Оператор 2








выход
Рис. 2.1. Оператор IF...THEN...ELSE...

б) вход

Да Нет


Оператор








выход
Рис. 2.2. Оператор IF...THEN...


2.10. Оператор-переключатель

Формат оператора:

CASE <параметр> OF

C1,C2,...,Cn : ( S1; S2; S3;...;Sn);

C'1,C'2,...,C'n: (S'1; S'2; ...; S'n);

......................................

[ ELSE ( S''1; S''2; ... ; S''n ) ]

END;


где

  • CASE - первое ключевое слово, в переводе означает "выбрать";

  • <параметр> - переменная порядкового (целого) типа;

  • - OF - второе ключевое слово, в переводе означает "из";

  • C1, C2, C'1, C'2...Cn, C'n - возможные значения величины " параметр";

  • S1, S2, S'1, S'2...Sn, S'n - операторы, выполняемые в случае совпадения текущего значения «параметр» с одним из С1,С2...;

  • ELSE - третье ключевое слово, в переводе означает "иначе";

  • S''1, S''2,..., S''n - операторы, выполняемые в случае не совпадения текущего значения «параметр» ни с одним из С1,С2...;

  • [ ] - указатель необязательности данного атрибута;

  • END - завершающее слово оператора CASE.

Оператор работает следующим образом: «параметр» получает своё значение любым способом. Если оно совпадает с одной из констант С1, С2,... то выполняются операторы, упомянутые в той же строке через двоеточие. Если значение параметра не совпадает ни с одной из указанных констант, то выполняются операторы, идущие за ELSE, при наличии этого слова в данном операторе.

2.11. Блок-схема переключателя
вход







1 …2 … 3…



Рис. 2.3. Блок-схема переключателя



2.12. Циклический вычислительный процесс. Определения
Циклическим вычислительным процессом называется многократно повторяемая последовательность действий. Все циклические процессы подразделяются на два основных типа:

- циклы с известным числом повторений;

- итерационные циклы.

Существует формула для подсчёта количества шагов в цикле:



где

- N - число повторений;

- Хкон, Хнач - начальное, конечное значение переменной цикла;

- X - шаг изменения переменной цикла;

- [ ]- указание на необходимость округления дроби до целого значения.
Управляющей переменной цикла (параметром) называется переменная, значениями которой определяется естественное окончание цикла. Группа операторов, повторяющаяся в цикле, называется телом цикла или областью действия цикла. Если по условиям задачи не хватает данных для использования вышеприведённой формулы, то такой цикл относится к итерационным, т.е. с неизвестным числом повторений. Если в теле одного цикла содержится другой, то такая конструкция называется вложенным циклом. Цикл, находящийся в теле другого, называется внутренним циклом, а охватывающий его - внешним. Число вложений циклов неограниченно. Основное требование к группе вложенных циклов - отсутствие пересечений областей действия циклов.
2.13. Циклы с известным числом повторений
Формат оператора:

FOR VAR:=EXPR1 TO {DOWNTO} EXPR2 DO ( S1; S2; ... ; Sn);

где

- FOR - первое ключевое слово, в переводе означает "от";



- VAR - управляющая переменная (параметр) цикла;

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



  • TO - второе ключевое слово, в переводе означает "до";

  • DOWNTO - второе ключевое слово, в переводе означает "до";

  • EXPR2 - конечное значение управляющей переменной, может быть

  • записано в виде константы, переменной или выражения порядкового (целого) типа;

  • DO - третье ключевое слово, в переводе означает "выполнить";

  • ( S1; S2; ... ; Sn ) - составной оператор, тело цикла.

Когда в операторе фигурирует в качестве второго ключевого слова "ТО", переменная цикла изменяется с шагом +1, а если "DOWNTO", то шаг становится равным -1.

Оператор работает следующим образом: прочитав заголовок цикла( строку FOR...DO), машина присваивает переменной цикла начальное значение EXPR1 и запоминает конечное - EXPR2. Потом сразу производит сравнение текущего значения параметра цикла с конечным.

Если условие выхода из цикла ещё не достигнуто, начинают исполняться операторы тела цикла S1,S2 и т.д. После обработки этих строк переменная цикла изменяется на шаг, и компьютер передаёт управление на начало цикла, где происходит проверка условия окончания цикла. Так будет происходить до тех пор, пока условие окончания цикла не будет достигнуто.
2.14. Блок-схема цикла с известным числом повторений.








Тело цикла








2.15. Операторы итерационных циклов
Формат оператора итерационного цикла с предусловием:
WHILE <усл> DO ( S1; S2; ... ; Sn );

где


  • WHILE - первое ключевое слово, в переводе означает "пока";

  • <усл> - условие естественного окончания цикла, записанное в

  • виде логического выражения или операции отношения;

  • DO - второе ключевое слово, в переводе означает "выполняем";

  • (S1;S2;...;Sn) - составной оператор, тело цикла.

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

Формат оператора итерационного цикла с постусловием:


REPEAT S1; S2; ... ; Sn UNTIL <усл>;

где


  • REPEAT - первое ключевое слово, в переводе означает "повторять";

  • S1; S2; ... ; Sn - составной оператор, тело цикла. В этом составном операторе слова BEGIN ... END не нужны, поскольку считается, что слова REPEAT ...UNTIL сами являются операторными скобками;

  • UNTIL - второе ключевое слово, в переводе означает "до тех пор, пока";

  • <усл> - условие естественного окончания цикла, записанное в виде логического выражения или операции отношения.

Оператор работает следующим образом: после первого выполнения операторов тела цикла происходит проверка условия окончания цикла (отсюда взято название цикла-" с последующей проверкой условия"). Если оно не выполняется, управление передаётся на начало цикла и работа продолжается до выполнения <усл>.

При всей несхожести этих операторов они выдвигают одни и те же требования к организации вычислительного процесса:



  • перед началом работы цикла управляющая переменная должна получить нужное начальное значение;

  • условие естественного окончания цикла - " <усл> " - необходимо составить таким образом, чтобы оно обеспечивало многократное его повторение;

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








Тело цикла

нет




да


Тело цикла


нет



да

а) б)
Рис.2.4. а) цикл WHILE-DO ; б) цикл REPEAT-UNTIL

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

В таких ситуациях принято применять специальные операторы, называемые счётчик, сумматор, накопитель произведения. Рассмотрим работу счётчика. Условимся о таком допущении: введём индексацию переменных, которая будет обозначать текущее её значение на соответствующем шаге цикла. Формула счётчика выглядит так:

N:=N+1;

C точки зрения алгебры это сплошной абсурд - переменная не может равняться себе самой плюс ещё какая-то константа. Чтобы понять, в чём тут дело, необходимо вспомнить, как выполняется оператор присваивания. Символ ":=" не означает равенства левой и правой частей уравнения. При обработке этого оператора транслятором сначала в процессор будет отослана информация, уже записанная в ячейку, отведённую под переменную N, т.е. "старое", (предыдущее) значение N. Затем туда будет послана константа "1" и т.д. После вычисления суммы "старое" значение + 1 - этот результат будет записан туда же, т.е. в ячейку переменной N.


Счётчик располагается на циклическом участке

................... программы. До начала цикла он инициализирует-

................... ся нулевым значением (N0=0).Подсчитаем, какое

N:=0; значение он получит на первом шаге:

................... I N1 = N0 + 1 = 0 + 1 = 1

{Начало цикла} Второе значение будет вычислено также, но с

................... учётом значения N, полученного после первого

N:=N+1; шага:

................... II N2 = N1 + 1 = 1 + 1 = 2

{Конец цикла} Третье значение вычисляется по уже известной

................... схеме:

III N3 = N2 + 1 = 2 + 1 = 3 и т.д.

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

S := S + Y;

Переменная S до начала цикла, как и N у счётчика, обнуляется. Затем к начальному значению последовательно, на каждом шаге цикла, вместо единицы, как у счётчика, добавляются значения суммируемой переменной. В нашем примере - рассчитываемой функции Y. Для нормальной работы накопителя произведения его начальное значение должно быть равным 1. В противном случае конечное значение произведения будет искажено начальной величиной. Совершенно недопустимым является присваивание накопителю произведения в качестве начального значения нуля. Вычисления производятся оператором:

P := P*Y ;


3. МАССИВЫ
3.1. Определения
В задачах, предусматривающих обработку больших объёмов информации, применяется специальный тип структурированных данных - массивы. Массивы обозначаются одним именем, так называемой индексной переменной. Поэтому каждый набор данных отличается от другого именем, а его компоненты между собой - индексами. Имена массивов составляются по обычным правилам составления идентификаторов ( см.п. 1.2.). После имени массива указывается его индекс в квадратных скобках. Индекс можно записать в виде константы, переменной или выражения перечислимого типа ( например целого ). Если индексов несколько, то они должны быть упомянуты через запятую. Количество индексов определяет размерность массива. Массивы могут быть одно-, двух-, трёх- и более мерные. Основное требование к данным, объединённых именем одного массива - их однородность: все они должны быть только целыми, вещественными, логическими и т.д. При описании массивов после его имени через двоеточие указывается слово ARRAY, затем в квадратных скобках нижний и верхний пределы изменения индексов по каждому измерению, после чего со словом OF - тип массива. Например:

...................................

VAR X, Y : ARRAY [1..50] OF REAL;

Z : ARRAY [1..5, 1..10] OF INTEGER;

...................................

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

Пример:

...............



CONST N = 5;

VAR X, Y : ARRAY [1..N*10] OF REAL;

Z : ARRAY [1..N, 1..N*2] OF INTEGER;

....................................



3.2. Способы обработки одномерных массивов
ЭВМ получает доступ к элементам массива только тогда, когда численное значение индекса элемента определено. С целью достижения компактности программы обычно используется следующий приём: операторы последовательной обработки элементов массива располагаются на циклическом участке программы. В качестве управляющей переменной цикла здесь участвует та же переменная, которая используется внутри цикла как индекс массива. Параметр цикла изменяется от 1 до N с шагом, равном единице. Таким же образом изменяется индекс массива, что обеспечивает последовательный доступ ЭВМ ко всем элементам автоматически.
3.3. Ввод - вывод одномерных массивов
Как и в случае с простыми ( неиндексированными ) переменными, ввод значений элементов массивов может быть произведён тремя основными способами: из текста программ, с клавиатуры и с внешних устройств.

Наиболее простой и наглядный способ ввода элементов массива можно проиллюстрировать следующим образом :

...........................

BEGIN


A[1]:=2.46; A[2]:=8.51; A[3]:=0.97;

...................................

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

Почти таким же по сложности использования является возможность задания значений элементов массива через раздел описания констант:

.............................

CONST


X : ARRAY [1..4] OF REAL = ( 2.34, 4.73, 5.77, 1.09);

.....................................................

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

Далее рассмотрим организацию ввода с клавиатуры. Вводить массив поэлементно с клавиатуры по примеру:

Read(X[1]); Read(X[2]); ...

ещё более сложно, чем из текста программы.

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

...............................

For i:=1 To 10 Do Read( X[i] );

...............................

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

.....................................

For i:=1 To 10 Do

begin


Write('Ввести Х(','i,')=');

Read( X[i] );

end;

.....................................



На каждом шаге работы такого участка программы на экране будет возникать приглашение с указанием имени и индекса элемента массива. В ответ на это пользователю необходимо печатать значение очередного элемента и нажать на Enter.

Когда потребуется отпечатать значения всех элементов массива подряд, с указанием имён элементов и их индексов, следует прибегнуть к такому варианту программы :

For i:=1 To 10 Do

Write(' Х(','i,')=', x[i]);


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

For i:=1 To 5 Do

begin

For j:=1 To 5 Do



begin

Y [i,j] := Sin( X[i,j] );

end

end;


После того, как внешний цикл сделает первый шаг, управляющая переменная i примет значение i=1 и зафиксируется. Управление будет передано внутреннему циклу, где переменная j пробежит все положенные ей значения от 1 до 5. Когда внутренний цикл завершится, управление перейдёт к внешнему, где параметр i изменится на шаг, станет равным i = 2 и зафиксируется, после чего внутренний цикл начнётся сначала, j изменится от 1 до 5 и т.д. Таким образом взаимодействие двух циклов For i... и For j... позволяет автоматически формировать все сочетания индексов матриц X(5,5) и Y(5,5), обеспечивая тем самым доступ ко всем элементам - для чтения матрицы X и для записи матрицы Y.

При вводе данных из текста программы применяются те же два способа:

- присваиванием

....................................

BEGIN

A[1,1]:=4.67; A[1,2]:=6.0; ....



...............................

- через раздел описания констант

....................................

CONST


A : Array [1..2,1..2] Of Real =

( ( 2.3, 4.9 ) , ( 4.1, 6.1 ) );

....................................
Значения элементов по каждому отдельному измерению (строки или столбцы) отделяются друг от друга дополнительными скобками. В приведённом примере значения элементов располагаются в следующем порядке: (( A[1,1], A[1,2] ), ( A[2,1], A[2,2] )), т.е. по строкам.

Массивы также могут считываться с внешних устройств файловой структуры, о чём будет рассказано ниже.


4. ТИПЫ ДАННЫХ TURBO-PASCAL
4.1. Простые типы
К простым типам относятся порядковые и вещественные типы. К порядковым относятся целые типы, логический, символьный перечисляемый и тип - диапазон. Порядковые типы отличаются тем, что значения этого типа можно каким-либо образом упорядочить и каждому из них можно сопоставить некоторое целое число – порядковый номер значения.
4.2. Целые типы Turbo - Pascal
Таблица целых типов:


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

Указатель типа

Длина

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

Байтовый

BYTE

1b

0...255

Короткое целое

SHORTINТ

1b

-128...127

Слово

WORD

2b

0...65 535

Целочисленный

INTEGER

2b

-32768...32 767

Длинное целое

LONGINT

4b

-2E+9...2E+9



4.3. Вещественные типы
Таблица вещественных типов:


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

Указатель типа

Длина

Диапазон порядка

Одинарной точности

SINGLE

4b

-45... +38

Вещественный

REAL

6b

-38... +38

Удвоенной точности

DOUBLE

8b

-324... +308

Расширенной точности

EXTENDED-

20b-

-4 951... +4 932

-


Уплотнённый

COMP

8b

-2E+63...+2E+63



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

....................

TYPE

DAYS_OF_WEEK = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);



MONTH = ( Jan, Feb, Mar, Apr, May, Jun, Jul,

Aug, Sep, Oct, Nov, Dec );

COLORS = ( Red, Blue, White, Green, Black );

..................................................


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

TYPE Level = 30..160;

Diapazon = 0 ..100;

Bukva = 'A'..'Z';

DAYS_OF_WEEK = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

WORK_DAYS = (Mon..Fri);

WEEK_END = (Sat..Sun);

MONTH = ( Jan, Feb, Mar, Apr, May, Jun,

Jul, Aug, Sep, Oct, Nov, Dec );

I_Kvartal = ( Jan..Mar);

II_Kvartal = ( Apr..Jun);

III_Kvartal = ( Jul..Sep);

IY_Kvartal = ( Oct..Dec);

.........................


5. ПОДРОГРАММЫ
Pascal имеет возможность обрабатывать подпрограммы двух видов:

  • подпрограмма типа FUNCTION;

  • подпрограмма типа PROCEDURE.

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

- заголовок;

- описательную часть со всеми требующимися разделами;

- исполнительную часть, охваченную словами BEGIN ... END

и завершающуюся знаком ";" .

Заголовок FUNCTION записывается так:


FUNCTION <имя>( V1:<тип параметра1>[;V2:<тип параметра2>;...]) : <тип функции>;
где

  • <имя> - имя функции, составленное по правилам для идентификаторов;

  • V1,V2 - формальные параметры функции;

  • [] - указание на необязательность атрибута.

Например:

FUNCTION Sum( X, Y : Real ) : Real;

где:


  • Sum - имя функции вещественного типа;

  • X,Y - формальные аргументы функции вещественного типа.

Описательная часть подпрограммы, если она требуется, может содержать все присущие ей разделы: библиотек - USES, констант - CONST, переменных - VAR и т.д. Исполнительная часть в качестве последнего оператора должна содержать оператор, присваивающий имени функции конечный результат её работы. Например:

...............................

Function tg( X : Real ) : Real;

Begin


TG:= Sin(X)/Cos(X);

End;


....

5.2. Подпрограмма типа PROCEDURE
При всей похожести, два вида подпрограмм Pascal'я имеют свои различия. Так, любой алгоритм, реализованный Function, можно записать как Procedure, но не наоборот. Function всегда имеет один результат. Procedure может иметь несколько результатов или не иметь их вообще. Function вызывается в основную программу как встроенная функция - в выражении записывается её имя и фактические аргументы, охваченные скобками. Для вызова Procedure используется самостоятельная командная строка, как у встроенных процедур Read и Write, где записывается имя процедуры и фактические параметры, охваченные скобками. Результатом работы Function неможет быть массив, множество или файл, а Procedure позволяет это делать.

Заголовок Procedure записывается так:

PROCEDURE <имя> [( V1 : < тип1 > [; V2 : < тип2 > ;...; ] [ VAR V3 : <тип3> [; V4 : <тип4> ;...; ]])];

где


  • PROCEDURE - слово, начинающее заголовок этого вида подпрограммы;

  • <имя> - название процедуры, составленное программистом по правилам составления идентификаторов;

  • V1,V2 - параметры - значения ( аргументы процедуры, через которые в процедуру из основной программы передаются значения, служащие исходными данными для расчётов). Они не должны менять своё значение в процедуре;

  • VAR - ключевое слово, разделяющее два типа параметров процедуры;

  • V3,V4 - параметры - переменные ( аргументы процедуры, через которые подпрограмма передаёт выработанные ей результаты в основную программу );

  • [ ] - указание на необязательность атрибута.

Пример PROCEDURE:

...........................................

PROCEDURE Sum ( A, B : Real; VAR S : Real);

Begin

S := A + B ;



End;

....


Здесь переменные A и B являются исходными данными для подпрограммы, а S - результатом. Поэтому перед S в описании стоит слово VAR.

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


Program Proc_Sum;

Var X, Y, Z, T, S1, S2 : Real;

PROCEDURE Sum ( A, B : Real; VAR S : Real);

Begin


S := A + B ;

End;


BEGIN

Write ( ‘ Ввести исходные значения X, Y, Z, T = ‘);

Read ( x, y, z, t );

Sum ( x, y, s1 );

Sum ( z, t, s2 );

WriteLn ( ' Первая сумма = ‘, S1 );

WriteLn ( ' Вторая сумма = ‘, S2 );

END.





База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка