С использованием специальных алгоритмических языков

 

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

 

Популярность языков программирования в 2017 году

2017 Язык программирования Рейтинг
1 Java 17.278%
2 C 9.349%
3 C++ 6.301%
4 C# 4.039%
5 Python 3.465%
6 Visual Basic.NET 2.960%
7 JavaScript 2.850%
8 Perl 2.750%
9 Assembly language 2.701%
10 PHP 2.564%
11 Delphi/Object Pascal 2.561%
12 Ruby 2.546%
13 Go 2.325%
14 Swift 1.932%

 

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

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

 

СОСТАВ ЯЗЫКА.

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

 

ОПИСАНИЕ ЯЗЫКА

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

Описание выражений-это правила образования любых выражений, имеющих смысл в данном языке. Описание операторов состоит из рассмотрения всех типов операторов, допустимых в языке. Описание каждого элемента языка задается его СИНТАКСИСОМ и СЕМАНТИКОЙ. Синтаксические определения устанавливают правила построения элементов языка. Семантика определяет смысл и правила использования тех элементов языка, для которых были даны синтаксические определения.

СИМВОЛЫ языка-это основные неделимые знаки, в терминах которых пишутся все тексты на языке.

ЭЛЕМЕНТАРНЫЕ КОНСТРУКЦИИ -это минимальные единицы языка, имеющие самостоятельный смысл. Они образуются из основных символов языка.

ВЫРАЖЕНИЕ в алгоритмическом языке состоит из элементарных конструкций и символов, оно задает правило вычисления некоторого значения.

ОПЕРАТОР задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия может потребоваться группа операторов. В этом случае операторы объединяются в СОСТАВНОЙ ОПЕРАТОР или БЛОК.

Действия, заданные операторами, выполняются над ДАННЫМИ. Предложения алгоритмического языка, в которых даются сведения о типах данных, называются ОПИСАНИЯМИ или неисполняемыми операторами.

Объединенная единым алгоритмом совокупность описаний и операторов образует ПРОГРАММУ на алгоритмическом языке.

В процессе изучения алгоритмического языка необходимо отличать алгоритмический язык от того языка, с помощью которого осуществляется описание изучаемого алгоритмического языка. Обычно изучаемый язык называют просто языком, а язык, в терминах которого дается описание изучаемого языка - МЕТАЯЗЫКОМ.

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

-металингвистическая символика, называемая Бэкуса-Наура формулами;

-синтаксические диаграммы;

-скобочные конструкции.

Мы в последующем изложении будем пользоваться неформальным способом.

 

 

О С Н О В Н Ы Е С И М В О Л Ы

 

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

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      SET

ASSEMBLER    EXTERNAL     MOD          SHL

AND          FAR          NAME         SHR

ARRAY        FILE         NIL          STRING

ASM          FOR          NEAR         THEN

ASSEMBLER    FORWARD      NOT          TO

BEGIN        FUNCTION     OBJECT       TYPE

CASE         GOTO         OF           UNIT

CONST        IF           OR           UNTIL

CONSTRUCTOR  IMPLEMENTATION PACKED       USES

DESTRUCTOR   IN           PRIVATE      VAR

DIV          INDEX        PROCEDURE    VIRTUAL

DO           INHERITED    PROGRAM      WHILE

DOWNTO       INLINE       PUBLIC       WITH

ELSE         INTERFACE    RECORD       XOR

END          INTERRUPT    REPEAT

EXPORT       LABEL        RESIDENT

 

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

   

Э Л Е М Е Н Т А Р Н Ы Е К О Н С Т Р У К Ц И И

   

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

Имена (идентификаторы) называют элементы языка - константы, метки, типы, переменные, процедуры, функции, модули, объекты. Имя — это последовательность букв и цифр, начинающаяся с буквы. В именах может использоваться символ _ подчеркивание. Имя может содержать произвольное количество символов, но значащими являются 63 символа.

Не разрешается в языке ПАСКАЛЬ использовать в качестве имен служебные слова и стандартные имена, которыми названы стандартные константы, типы, процедуры, функции и файлы.

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

Примеры имен языка ПАСКАЛЬ:

A b12 r1m SIGMA gamma I80_86

 

Числа в языке ПАСКАЛЬ обычно записываются в десятичной  системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например:

217 -45 8954 +483

 

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

28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16

   

ПАСКАЛЬ допускает запись целых чисел и фрагментов действительных чисел в форме с порядком в шестнадцатиричной системе счисления:   

$7F $40 $ABC0

 

Строки в языке ПАСКАЛЬ - это последовательность символов, записанная между апострофами. Если в строке в качестве содержательного символа необходимо употребить сам апостроф, то следует записать два апострофа. Примеры строк:

'СТРОКА' 'STRING' 'ПРОГРАММА' 'АД''ЮТАНТ'

             

К О Н Ц Е П Ц И Я Т И П А Д Л Я Д А Н Н Ы Х

 

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

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

В языке ПАСКАЛЬ существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языка ПАСКАЛЬ имеет следующие основные свойства:

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

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

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

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

Тип определяет:

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

-внутреннюю форму представления данных в ЭВМ;

-операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.

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

К cкалярным типам относятся стандартные типы и типы, определяемые пользователем.

Стандартные типы включают целые, действительные, символьный, логические и адресный типы. Типы, определяемые пользователем, - перечисляемый и интервальный.

Структурированные типы имеют четыре разновидности: массивы, множества, записи и файлы.

Кроме перечисленных, PASCAL включает еще два типа - процедурный и объектный.

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

-все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;

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

-к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;

-к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа.

В языке ПАСКАЛЬ введены понятия эквивалентности и совместимости типов.

Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется

одно из двух условий:

-Т1 и Т2 представляют собой одно и то же имя типа;

- тип Т2 описан с использованием типа Т1 с помощью равенства или последовательности равенств. Например:

type

T1 = Integer;

T2 = T1;

T3 = T2;

 

Менее строгие ограничения определены совместимостью типов. Например, типы являются совместимыми, если:

-они эквивалентны;

-являются оба либо целыми, либо действительными;

-один тип - интервальный, другой - его базовый;

-оба интервальные с общим базовым;

один тип - строковый, другой - символьный.

В ПАСКАЛЬ ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция

Имя_Типа(переменная или значение).

 

Напрмер,

Integer('Z')

представляет собой значение кода символа 'Z' в двухбайтном представлении целого числа, а

Byte(534)

даст значение 22, поскольку целое число 534 имеет тип Word и занимает два байта, а тип Byte занимает один байт, и в процессе приведения старший байт будет отброшен.

 

С Т А Н Д А Р Т Н Ы Е Т И П Ы Д А Н Н Ы Х

 

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

ЦЕЛЫЕ типы определяют константы, переменные и функции, значения которых реализуются множеством целых чисел, допустимых в данной ЭВМ.

 

 тип       диапазон значений  требуемая память

__________________________________________________________

Shortint       -128.. 127      1 байт

Integer      -32768.. 32767    2 байта

Longint -2147483648.. 2147483647 4 байта

Byte              0.. 255      1 байт

Word              0.. 65535    2 байта

__________________________________________________________

   

Над целыми операндами можно выполнять следующие арифметические операции: сложение, вычитание, умножение, деление, получение остатка от деления. Знаки этих операций:

      + - * div mod

   

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

      17 div 2 = 8, 3 div 5 = 0.

   17 mod 2 = 1, 3 mod 5 = 3.

  

Операции отношения, примененные к целым операндам, дают результат логического типа TRUE или FALSE (истина или ложь).

В языке ПАСКАЛЬ имеются следующие операции отношения: равенство =, неравенство <>, больше или равно >=, меньше или равно <=, больше >, меньше <.

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

      Abs(X), Sqr(X), Succ(X), Pred(X),

и которые определяют соответственно абсолютное значение Х, Х в квадрате, Х+1, Х-1.

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

      Sin(X), Cos(X), ArcTan(X), Ln(X), Exp(X), Sqrt(X).

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

Результат выполнения функции проверки целой величины на нечетность Odd(X) имеет значение истина, если аргумент нечетный, и значение ложь, если аргумент четный:

      X=5 Odd(X)=TRUE, X=4 Odd(X)=FALSE.

  

Для быстрой работы с целыми числами определены процедуры:    

  Inc(X) X:=X+1

Inc(X,N) X:=X+N

Dec(X) X:=X-1

Dec(X,N) X:=X-N

 

ДЕЙСТВИТЕЛЬНЫЕ типы определяет те данные, которые реализуются подмножеством действительных чисел, допустимых в данной ЭВМ.

Тип      Диапазон   Количество цифр Требуемая

            значений       мантиссы память (байт)

---------------------------------------------------------------

Real    2.9e-39.. 1.7e+38   11           6

Single  1.5e-45.. 3.4e+38    7           4

Double 5.0e-324.. 1.7e+308  15           8

Extended 3.4e-4932.. 1.1e+4932 19          10

Comp   -9.2e+18.. 9.2e+18   19           8

---------------------------------------------------------------

  

Тип Real определен в стандартном ПАСКАЛЕ и математическим сопроцессором не поддерживается.

 Тип Comp хотя и относится к действительным типам, хранит только длинные целые значения.

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

сложение +, вычитание -, умножение *, деление /.

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

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

Abs(X), Sqr(X), Sin(X), Cos(X), ArcTan(X), Ln(X), Exp(X), Sqrt(X), Frac(X), Int(X), Pi.

Функция Frac(X) возвращает дробную часть X, функция Int(X) – целую часть X.

Безаргументная функция Pi возвращает значение числа Пи действительного типа.

К аргументам действительного типа применимы также функции

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

 

ЛОГИЧЕСКИЙ тип (Boolean) определяет те данные, которые могут принимать логические значения TRUE и FALSE.    К булевским операндам применимы следующие логические операции:

not and or xor.

Логический тип определен таким образом, что FALSE < TRUE. Это позволяет применять к булевским операндам все операции отношения.

 

СИМВОЛЬНЫЙ тип (Char) определяет упорядоченную совокупность символов, допустимых в данной ЭВМ. Значение символьной переменной или константы - это один символ из допустимого набора.

Символьная константа может записываться в тексте программы тремя способами:

-как один символ, заключенный в апострофы, например:

     'A' 'a' 'Ю' 'ю';

-с помощью конструкции вида #K, где K - код соответствующего символа, при этом значение K должно находиться в пределах 0..255;

-с помощью конструкции вида ^C, где C - код соответствующего управляющего символа, при этом значение C должно быть на 64 больше кода управляющего символа.

К величинам символьного типа применимы все операции отношения.

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

       Ord(C) Chr(K).

Первая функция определяет порядковый номер символа С в наборе символов, вторая определяет по порядковому номеру К символ, стоящий на К-ом месте в наборе символов. Порядковый номер имеет целый тип.

К аргументам символьного типа применяются функции, которые определяют предыдущий и последующий символы:

     Pred(C) Succ(C). Pred('F') = 'E'; Succ('Y') = 'Z'.

При отсутствии предыдущего или последующего символов значение соответствующих функций не определено.

Для литер из интервала 'a'..'z' применима функция UpCase(C), которая переводит эти литеры в верхний регистр 'A'..'Z'.

АДРЕСНЫЙ тип (Pointer) определяет переменные, которые могут содержать значения адресов данных или фрагментов программы. Для хранения адреса требуются два слова (4 байта), одно из них определяет сегмент, второе - смещение.

Работа с адресными переменными (указателями) будет рассмотрена позже, сейчас отметим, что для получения значения адреса какой-либо переменной введена унарная операция @.

 

К О Н С Т А Н Т Ы

   

Тип констант в языке ПАСКАЛЬ определяется по их виду: константы целого типа - это целые числа, не содержащие десятичной точки, константы действительного типа - действительные числа, логические константы - логические значения TRUE и FALSE, символьные константы – либо строки длиной в один символ, либо конструкции вида #K или ^K.

Язык ПАСКАЛЬ допускает использовать синонимы для обозначения констант, в этом случае текст программы содержит раздел описания констант, например: {}

 

П Е Р Е М Е Н Н Ы Е. И Н И Ц И А Л И З А Ц И Я П Е Р Е М Е Н Н Ы Х

 

Тип переменных определяется пользователем в разделе описания переменных:{}

В настоящее время в профессиональном программировании принято записывать имена переменных с использованием так называемой венгерской нотации. Венгерская нотация - это соглашение о наименованиях переменных и функций. Соглашение широко используется при программировании на языках PASCAL, C и в среде WINDOWS.

Венгерская нотация основывается на следующих принципах:

-имена переменных и функций должны содержать префикс, описывающий их тип;

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

Префиксы записываются малыми буквами, первая буква каждого слова - заглавная, префиксы и слова записываются либо слитно, либо через символ _ (подчеркивание).

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

Префикс Тип

---------------------

by   Byte

sh   Shortint

i    Integer

w    Word

l    Longint

r    Real

si   Single

d    Double

e    Extended

c    Comp

ch   Char

b    Boolean

p    Pointer

x,у  координаты символа или точки на экране

 

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

a    Array

s    String

sz   Stringz

se   Set

re   Record

f    File

t    Text

 

Например:

rV, arVector[1..20], sName, iCount.

 

В откомпилированной программе для всех переменных отведено место в памяти, и всем переменным присвоены нулевые значения. Для задания начальных значений переменным (инициализации переменных) PASCAL позволяет присваивать начальные значения переменным одновременно с их описанием. Для этого используется конструкция

имя переменной: тип = значение;

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

const rWeight: Real = 0.4;

 

 

В Ы Р А Ж Е Н И Я

 

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

1. унарная операция not, унарный минус -, взятие адреса @

2. операции типа умножения * / div mod and shl shr

3. операции типа сложения + - or xor

4. операции отношения = <> < > <= >= in

{}

Выражения входят в состав многих операторов языка ПАСКАЛЬ, а также могут быть аргументами встроенных функций.

 

О П Е Р А Т О Р П Р И С В А И В А Н И Я

 

     переменная:= выражение;

 

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

 

О П Е Р А Т О Р Ы В В О Д А И В Ы В О Д А

 

Рассмотрим организацию ввода и вывода данных с терминального устройства. Терминальное устройство - это устройство, с которым работает пользователь, обычно это экран (дисплей) и клавиатура.

Для ввода и вывода данных используются стандартные процедуры ввода и вывода Read и Write, оперирующие стандартными последовательными файлами INPUT и OUTPUT.

Эти файлы разбиваются на строки переменной длины, отделяемые друг от друга признаком конца строки. Конец строки задается нажатием клавиши ENTER.

Для ввода исходных данных используются операторы процедур ввода:

 

    Read(A1,A2,...AK);

    ReadLn(A1,A2,...AK);

    ReadLn;

 

Первый из них реализует чтение К значений исходных данных и присваивание этих значений переменным А1, А2,..., АК. Второй оператор реализует чтение К значений исходных данных, пропуск остальных значений до начала следующей строки, присваивание считанных значений переменным А1, А2,..., АК. Третий оператор реализует пропуск строки исходных данных.

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

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

 

    var rV, rS: Real;

        iW, iJ: Integer;

        chC, chD: Char;

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

    Read(rV, rS, iW, iJ);

    Read(chC, chD);

 

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

 

    Write(A1,A2,...AK);

    WriteLn(A1,A2,...AK);

    WriteLn;

 

Первый из этих операторов реализует вывод значений переменных А1, А2,...,АК в строку экрана. Второй оператор реализует вывод значений переменных А1, А2,..., АК и переход к началу следующей строки. Третий оператор реализует пропуск строки и переход к началу следующей строки.

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

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

 

С Т Р У К Т У Р А П Р О Г Р А М М Ы

 

Программа на языке ПАСКАЛЬ состоит из заголовка, разделов описаний и раздела операторов.

Заголовок программы содержит имя программы, например:

Program PRIM;

 

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

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

uses CRT, Graph;

 

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

label 3, 471, 29, Quit;

 

Описание констант позволяет использовать имена как синонимы констант, их необходимо определить в разделе описаний констант:

const K= 1024; MAX= 16384;

 

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

var P,Q,R: Integer;

     A,B: Char;

     F1,F2: Boolean;

 

Раздел операторов представляет собой составной оператор, который содержит между служебными словами

begin.......end

последовательность операторов. Операторы отделяются друг от друга символом;.

Текст программы заканчивается символом точка.

 

Кроме описаний и операторов ПАСКАЛЬ - программа может содержать комментарии, которые представляют собой произвольную последовательность символов, расположенную между открывающей скобкой комментариев { и закрывающей скобкой комментариев }.

Текст ПАСКАЛЬ - программы может содержать ключи компиляции, которые позволяют управлять режимом компиляции. Синтаксически ключи компиляции записываются как комментарии. Ключ компиляции содержит символ $ и букву-ключ с последующим знаком + (включить режим) или - (выключить режим). Например:

 

{$E+} - эмулировать математический сопроцессор;

{$F+} - формировать дальний тип вызова процедур и функций;

{$N+} - использовать математический сопроцессор;

{$R+} - проверять выход за границы диапазонов.

 

Пример записи простой программы:

 

    Program TRIANG;

     var A, B, C, S, P: Real;

     begin

      Read(A,B,C);

      WriteLn(A,B,C);

       P:=(A+B+C)/2;

       S:=Sqrt(P*(P-A)*(P-B)*(P-C));

      WriteLn('S=',S:8:3)

     end.

 

 

О П Е Р А Т О Р П Е Р Е Х О Д А

 

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

 

   goto 218;

 

О П Е Р А Т О Р Ы В Е Т В Л Е Н И Я

 

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

Оператор IF можно представить в общей форме записи как

IF <Условие> THEN <Оператор 1> ELSE <Оператор 2>,

где конструкция «Условие» есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно). Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE. Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:

Высший: ()

NOT *, /, DIV, MOD

AND

OR +, -

Низший: >, =, <, >=, <>, <=

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

I and J or K ---> (I and J) or K;

not X and Y ---> (not X) and Y, где I, J, K, X, Y – переменные типа BOOLEAN;

(A < B) or (B = 0), где A, B – переменные простого типа.

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

П р и м е р:

IF <условие1> THEN <ветвь 1>

ELSE IF <условие2>THEN <ветвь 2>

ELSE <ветвь 3>;

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

Оператор варианта CASE состоит из выражения и списка операторов, каждому из которых предшествует одна или более констант, называемых константами выбора.

 

Общая форма записи

CASE <выражение> OF

константы: оператор;

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

Константы: оператор

ELSE <оператор>

END;

Выражение, стоящее между CASE и OF, называется селектором. Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора: сначала вычисляется значение селектора, затем выполняется оператор, одна из меток которого совпадает со значением селектора. Все остальные операторы не выполняются, и управление передается следующему после END оператору. В случае короткой формы оператора CASE при несовпадении значения селектора (ключа) ни с одной из констант из списка никакой оператор не подлежит исполнению. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.

Выражение «селектор» может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор.

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

 

О П Е Р А Т О Р Ы Ц И К Л А

 

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

Вложенным называется цикл, находящийся внутри тела другого цикла. Различают циклы с предусловием (ПОКА) и постусловием (ПОВТОРЯТЬ ДО).

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

Алгоритм сложной программы представляет собой всевозможные комбинации рассмотренных трех типов.

В Delphi алгоритмическая конструкция цикла может быть реализована с помощью трех структурных операторов – WHILE, REPEAT и FOR.

 

Оператор цикла с параметром FOR. Если количество повторений заранее известно, то цикл называют арифметическим и в программе используют оператор FOR.

Оператор FOR может быть представлен в двух форматах:

FOR <параметр цикла>:=<S1> to <S2> do <оператор>;

FOR <параметр цикла>:=<S1> downto <S2> do <оператор>;

S1 - начальное значение;                  S2 - конечное значение;

<оператор> - тело цикла.

Параметр цикла (переменная цикла), его начальное и конечное значение могут быть любого упорядоченного типа (обычно - типа integer и ни в коем случае не real), обязательно все одного и того же. При каждом повторе значение параметра цикла увеличивается на 1 (при FOR... TO) или уменьшается на 1 (при FOR... DOWNTO).

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

For i:=1 to 20 do s:=s+i;

For i:=14 downto 10 do p:=p*i;         

Выражения S1 и S2 вычисляются перед выполнением операторов цикла; впоследствии они не перевычисляются. Если эти выражения отвечают невозможной последовательности, то цикл вообще не выполняется.

Оператор цикла с постусловием REPEAT. В практических задачах, как правило, число повторений заранее неизвестно, а определяется по ходу реализации этого циклического процесса. (Если условием окончания вычислений достижение заданной точности, то такие циклы называют итерационными.)

Такие циклы можно построить при помощи оператора повтора с предусловием Repeat.

Формат:     repeat                {повторить}

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

  ........

     <оператор N>

until <условие>;        { пока}

 

Условие - выражение булевского типа. При наличии условия допустимы булевские операции и операции отношения. Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат булевского выражения FALSE, тело цикла активизируется еще раз, если результат TRUE - происходит выход из цикла.

Оператор REPEAT имеет три характерные особенности:

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

- тело цикла выполняется, пока условие равно FALSE;

- в теле может находиться произвольное число операторов без операторных скобок begin...end, т.к. два зарезервированных слова Repeat и Until уже играют роль скобок.

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

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

 

Формат: WHILE <условие> DO <тело цикла>;

 

Условие - булевское выражение, а тело цикла - простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен TRUE, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен FALSE, происходит выход из цикла и переход к первому после WHILE оператору. Если перед первым выполнением цикла значение выражения было FALSE, тело цикла вообще не выполняется и происходит переход на следующий оператор.

Пример: i:=30;

while i<0 do i:=i+1;

write (i);

В данном случае наращивания i не произойдет, т.к. условие с самого начала имеет значение false.

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

Пример  

While i<100 do

  begin

   ...

    i:=i+1; { Изменение переменной управления циклом}

   ...

    read (k,t);

    if t>1000 then i:=100+1 { Установка признака выхода}

  end;

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

while true do showmessage('Бесконечный цикл').


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: