Лекция 11 Програмен език Psacal



Дата25.07.2016
Размер168.08 Kb.
#5573
ТипЛекция
Лекция 11

Програмен език Psacal

Програмният език Psacal е разработен от швейцареца Никлаус Вирт. Първоначално е развиван като средство за обучение по програмиране, но скоро става доста популярен и извън сферата на образованието.

В отличие от разговорния език, програмните езици не допускат двусмислие, защото компютърните системи, за които са предназначени, изпълняват точно определени инструкции и не могат да ‘тълкуват’ информацията, с която разполагат. Затова всеки програмен език има строго определени граматически правила, които се наричат синтаксис на езика. Ако някой фрагмент от програмата (оператор) не съответства на синтаксиса на езика, той няма смисъл и не се изпълнява от компютърната система.

Алгоритъмът и програмата за решаване на дадена задача, могат да бъде разработени по различен начин. Програмистите използват различни подходи при разработването на дадена програма. Някои се стремят, програмата да съдържа минимално количество оператори или да се изпълнява за минимално време. Представеният в настоящото описание подход е основан на изискването програмите да са ясни и разбираеми за останалите програмисти (не само за съставителя на програмата). Този подход изглежда на пръв поглед очевиден, но в практиката той е трудно достижим. При разработката на програми много често възниква изкушението да се жертва яснотата и прегледността за постигане на по-добра ефективност. Езикът Psacal е един от езиците, който позволява написването на разбираеми и в същото време достатъчно ефективни програми. Неговата систематизирана структура налага сериозни ограничения и дисциплина при програмирането, но в същото време позволява разширение на езика посредством въвеждане на нови възможности за някои специфични изисквания.


1 Азбука на езика Psacal

Както и в обикновения разговорен език, преди да започне изучаването на синтактическите правила на езика трябва да се въведат основните средства, с които се изгражда – графичните символи (азбуката) и основни конструкции (речника) , така и в програмните езици е необходимо да се специфицират тези елементи. Азбуката на езика Psacal съдържа следните основни символи:



  • Главните и малки букви от английската азбука

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

  • Цифрите 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

  • Специалните знаци +, -, *, /, #, $, %, ^, &, (, ), _, [, ], {, }, \, |, “, ‘, .,

В езика Psacal съществуват група думи, които имат специално предназначение и се наричат запазени думи. Посредством тях се записват основните конструкции на операторите, използвани в езика. Към запазените думи в езика Psacal се отнасят:

Запазени (ключови) думи в Pascal

and

array

begin

case

const

div

do

downto

else

end

file

for

function

goto

if

implementation

in

inline

interface

label

mod

not

of

or

packed

procedure

program

record

repeat

set

set

*string

then

to

type

*unit

until

*uses

var

while

with

*xor

alfa

boolean

char

false

input

integer

maxint

nil

output

real

text

true

Характерно за езика Psacal е че, символите за малките и големи букви са неразличими в синтаксиса на езика. Това означава, че служебните и стандартните думи и наименованията на променливите могат да се записват с малки и големи букви, като значението им се запазва. Например, end, End и END означават едно и също нещо за програма, написана на Psacal. Трябва да отбележим, че в други програмни езици (С, С++, Java), това не е така. В тези езици малките и големи букви са различими и горните думи означават различни неща.


2 Структура на програма на Pascal

Всяка програма, написана на програмния език Psacal, има точно определена структура, разбираема за компилаторите, които преобразуват първичния код (текста на програмата) в двоични команди. Програмата има три основни раздела: заглавие на програмата, част за декларации и описания и тяло на програмата. На фиг. 9.5 е представена елементарна програма на Psacal, поясняваща структурната организация на програмата.




program First ;

Var im, jm : integer ;

X, y : real ;



begin

im:=5 ; jm:=9 ; y:=2.5 ;

X:=y*im/jm ;

writeln (‘Hello, this is my first program’, X) ;



end.

Фиг. 9.5 Структура на програма на Psacal


Трябва да се отбележи, че подреждането на редовете при записа на програмата не е съществено от синтактична гледна точка. Програмата може да бъде написана и на един ред, но възприетият подход за ясен и разбираем стил изисква да бъдат отделени различните логически части на програмата. Първият ред от текста на програмата представлява заглавие на програмата. То съдържа запазената дума program, следвана от наименованието на програмата. Наименованието на програмата се задава от програмиста и може да бъде произволна комбинация от символи и цифри, допустими от синтактичните правила на Psacal. В случая, наименованието на програмата е ‘First’. Обикновено се подбира наименование, което да е свързано с предназначението на програмата – тук е използвано наименование First, за да се отбележи, че това е първа програма, която създава програмистът.

Втората логическа част на програмата е разделът за обявяване (деклариране) на величини, които се използват в програмата или някои други поясняващи декларации и коментари. Те не генерират изпълними операции, но осигуряват важна информация за обработката на текста на програмата и изпълнението й. В случая, това е частта след служебната дума var, която определя така наречената секция за деклариране на използваните величини (променливи и константи). В горната програма са декларирани две променливи im и jm като целочислени величини и x и y – като реални величини. Те са използвани по-нататък за изчисляване на стойността на аритметичен израз.

Третата част се нарича тяло на програмата и в нея се съдържат основните изпълними оператори. Тя започва със служебната дума begin и завършва с end и точка ‘.’. Между тези две служебни думи се разполагат изпълнимите оператори, включително и обръщения към подпрограми и функции, описани извън тялото на програмата. В горната програма се задават стойности на променливите im, jm и y, а стойността на x се определя от аритметичен израз. Накрая се извежда текст, в който се съобщава, че това е първа програма на програмиста ‘Hello, this is my first program’ и след този текст се извежда стойността на променливата x.

Основно правило при изпълнение на компютърните програми е, че операторите се изпълняват в последователността, в която се срещат в програмата. За промяна на тази последователност се използват специални синтактични конструкции (оператори). Промяна на последователността се налага, когато трябва да се избира между две или повече възможности за изпълнение на операции или когато трябва определен брой команди да се изпълняват повторно или циклично. В някои случаи се използва групиране на операторите в блокове, като в даден блок операторите се изпълняват в последователността, в която са записани.


3. Коментари.

Коментарите се смятат за елементи на добрия стил на програмиране. Те са текстове, които се използват в програмите за описание на алгоритъма и значението на използваните променливи. Те не са задължителни, но са изключително полезни, особено при съставяне на големи програмни приложения. Те улесняват четенето на програмите от други програмисти, а също така помагат и на съставителите на програмата да извършват редакции и промяна в програмния текст. Коментарите могат да бъдат произволно дълги. Те могат да бъдат вмъквани в синтактичната конструкция на операторите или изразите, но не могат да бъдат разположени между символите на ключови думи или идентификатори на променливи.

Коментарите се игнорират от компилатора при компилиране на програмите. Те могат да съдържат свободен текст, написан дори и на кирилица, стига текстовият редактор, на който се записва програмата, да го позволява.

Коментарите в Pascal започват с отваряща фигурна скоба ‘{‘, и завършват със затваряща фигурна скоба ‘}’. В първите версии на езика Pascal за обозначаване на коментари се използваше отваряща комбинация от символи ‘(*’ и затваряща комбинация ‘*)’, която е допустима и в следващите версии. В текста на коментарите не могат да се използват горните символи и комбинации от символи. Не се допускат вложени коментари. Ето как би изглеждала програмата, записана по-горе, с използване на коментари (фиг. 9.6):



frame2

9.6. Програма на Pascal с коментари



4. Обявяване (деклариране) на данни

Както беше отбелязано по-горе, в структурата на програмите на Psacal има специален раздел, в който се обявяват всички величини (променливи и константи), които се използват в програмата. Посредством обявяването на величините, програмистът съобщава на компилатора какви данни се използват в програмата и какво количество памет трябва да бъде резервирано за разполагането на тези данни.


Константи

Някои елементи от данните остават неизменни в процеса на обработка на информацията. Те се наричат константи. В езика Psacal могат да се използват два типа константи: неименовани и именовани константи. Неименованите константи са директно записани стойности на величини. Например, числото 3.14159 (стойност на p), числото 100 (сто), символът ‘А’, текстовият низ ‘това е текст’ са неименовани константи. Те задават велични, които нямат наименование, но определят стойности, оставащи неизменни в процеса на работа на програмата. Неименованите константи не се обявяват (декларират) предварително, защото те учавстват в операторите и изразите директно като стойности. В следващия аритметичен израз се използва неименована константа (стойността на p=3.14159):



Тук се налага следното уточнение. В азбуката на езика Psacal не фигурират символите от българската азбука (кирилица), а в горните примери се разглеждат като константа текст, написан с кирилица. Това няма да предизвика грешка, защото текстът ограден с апострофи, е стойност на величина (константа), а стойностите не се третират като елементи от синтаксиса на езика. Те се отнасят към данните, които се обработват, а като такива могат да се разглеждат различни видове информация – числова, текстова, графична, звукова и.т.н. В случая, текстовата константа се разглежда от компилатора като поредица от ASCII кодове, които се интерпретират в зависимост от съществуващите кодови таблици, използвани от операционната система.

Именованите константи са величини, които имат наименование, но има специално указание, че в процеса на работа на програмата тяхната стойност не се променя. За тази цел при декларирането на величината се използва запазената дума const:

const pi = 3.14159 ; const gravity = 9.81 ;

В примера величините pi и gravity са декларирани като константи и могат да се използват, където и да е в програмата. При деклариране на константи е задължително задаването на начална стойност, тъй като в програмата не е допустимо изменение на стойността.

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

Типът на константите се определя от стойността, която им се присвоява. Ако се присвоява числова стойност, то констатата е числова, а ако е символна – символна константа и т.н. Ако при числовите константи числото е цяло, то константата е целочислена, а ако има десетична точка – реална константа.


Променливи величини

Променливите величини представляват елементи от данните, чиято стойност може да се променя в процеса на изпълнение на програмата. Всяка променлива, използвана в програмата, трябва да се обяви преди използването й. При обявяването на променливите трябва да се зададе наименование (идентификатор) и тип на променливата. Като идентификатор на променлива може да се използва всяка комбинация от символи и цифри, която не започва с цифра. Като идентификатор на променлива не може да се използва комбинация от символи, която съвпада с някоя от запазените думи в езика. В някои версии на езика значещи в наименованието на променливите са само първите 8 символа. Самата променлива може да бъде с произволна дължина, но ако първите 8 символа са еднакви, се смята, че това е една и съща променлива. Освен букви и цифри, в наименованието на променливите могат да се използват и символите: ‘_’ (смвол за подчертаване), ....

За предпочитане е имената на променливите да се подбират по такъв начин, че да имат някаква смислена връзка със стойността, която представят. Например, за означаване на размера на някакъв обект може да се използва идентификатор Dimension, за скорост Velocity и т.н. Това разбира се не е задължително, но използването на смислени имена прави програмата по-лесна за разбиране (четима).

Понятието променлива е много важно в програмирането. За да се изясни това понятие, може да се сравни променливата с някакво устройство, което може да съхранява информация. При изпълнение на дадена програма съдържанието на това устройство (стойността на променливата) може да се променя. Така може да се направи разлика между наименованието на променливата и стойността, която приема. Наименованието на променливата можем да свържем със самото устройство, а стойността на променливата – със съдържанието му. Когато се присвои нова стойност на променливата, се променя съдържанието на това устройство, а старата стойност се загубва.

В езика Psacal за обявяване на променливи се използва запазената дума var (variableпроменлива). Тази дума определя началото на раздел за деклариране на променливите в програмата. Разделът за деклариране на променливите се разполага преди тялото на програмата (или процедурата) и след заглавието й.
Основни (вградени) типове данни

Типът на данните определя съвкупността от стойности, които може да приема дадена величина и операциите, които могат да се извършват с тях. Всяка променлива в езика Psacal трябва да има специфициран тип.



Целочислени типове данни.

В езика Pascal, за деклариране на целочислени данни се използва ключовата дума integer, която се явява спецификатор на типа данни. Например:

Var ii : integer ;

j : integer ;

Наименованието на променливите се отделя от спецификатора на тип с двуеточие ‘:’. Когато се декларират повече от една променлива от един и същи тип, те могат да се запишат само с един спецификатор за типа, като се отделят помежду си със запетая:

Var j, i, m, n : integer ;

ix, jx : integer ;

Целочислените променливи заемат два байта в паметта (16 бита), което определя диапазона на стойности, които могат да се присвояват на променливите от този тип - 216=64536. Ако се отчете, че един бит се използва за знак на числото, то интервалът на стойностите на целочислените данни от типа integer е от -32768 до 32767.

Тъй като това е ограничен диапазон на стойности, в Pascal се използват и други спецификации за целочислени данни. Те са дадени в таблицата:

Tип Обхват Format (бр. Цифри) Памет (В)

Integer -32768.. 32767 със знак 2

LongInt –2147483648..2147483647 със знак 4

Byte 0 .. 255 без знак 1

Word 0 .. 65535 без знак 2

С целочислените данни могат да се извършват различни аритметични операции. Допустими са следните операции с целочислени данни:

+ унарна ; сумиране (+); - унарна; изваждане (-); умножение (*);

Тук не е включена операция деление (/), тъй като резултатът от нея е реално число (не е цяло). Въпреки това тази операция е допустима, но преди да се изпълни, в машината се извършва вътрешно преобразуване на числата (от цели в реални).

Освен горните операции за целочислени данни, са въведени и операциите:


  • div (целочислено деление).

a div b - цялото число a се дели на b и резултатът е цялата част от делението.

  • mod (остатък от деление)

a mod b - резултатът от тази операция е остатък от целочисленото деление.

Примери:


15 div 5 = 3 ;

15 mod 5 = 0 ;

15 div 4 = 3 ;

17 mod 5 = 2 ;

С целочислени данни се използват множество стандартни функции:

abs (a) - абсолютна стойност на цяло число;

sqr (a) - изчислява а2 ;

succ (a) - число с единица по-голямо ;

pred (a) - число с единица по-малко.
Реални типове данни

В Pascal реалните типове данни могат да се предствят по три начина:



  • само с десетична точка ;

  • само с експонента;

  • с десетична точка и експонента.

Примери:

354.12; -0.1412; 15.0; 57 Е-4; 42 Е5 ;

-25 Е-2; 28.42 Е+2; -8.546Е-2;

Символът Е в тези записи трябва да се възприема като десетична основа за степенния показател, следващ този символ. Така например, записът 8.24 Е-2 може да се представи като:

8.24 Е-2 = 8.24 10-2 = 0.0824

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

.001 ; 6,24 ; Е-4 ;
Реални константи се дефинират с използване на ключовата дума const:

const One = 1.0 ;

e = 2.71 ;

eps = 0.0001 ;

Типовете Реални величини са стандартен тип в Pascal. За деклариране на реални променливи се използва ключовата дума real.



Var x, u : real ;

y, xy, temperature : real ;

С реалните данни могат да се извършват множество операции:

+ унарна ; сумиране (+); - унарна; изваждане (-); умножение (*); деление (/).

При всички операции резултатът е реално число.

За реалните данни са дефинирани стандартни функции:

abs (x) - абсолютна стойност на цяло число;

sqr (x) - изчислява x2 ;

sqrt (x) - квадратен корен от х;

sin (x) - тригонометрична функция;

cos (x) - тригонометрична функция;

ln (x) - натурален логаритъм от х и други.

Съществуват и някои специфични функции за реалния тип данни:



trunc (x) - резултатът от тази функция е цяло число, което се получава чрез отрязване на дробната част от числото;

round (x) - резултатът е цяло число, получено чрез закръгляване на реалното число:

round (x) =

Примери: trunk (28.15) = 28 ;

trunk (-12.3) = -12 ;

round (13.56) = 14 ;

round (-12.4) = -12.

frac (x) - резултатът е дробната част на реално число:

frac (17.12) = 0.12 ;

Освен с real, реални данни могат да се декларират с double и extended. Заеманата памет и обхватът на тези типове са дадени в таблицата:



Tип Обхват Format (бр. Цифри) Памет (В)

Real 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8

Double 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8

Extended 3.6 x 10^–4951 .. 1.1 x 10^4932 19–20 10

В по-ранните варианти на Pascal реалният тип данни (real) заемаше 4 байта памет, а типът double - 8 байта, затова сега съществуват и двата типа въпреки че са еднакви.
Логически тип данни

Един от нечисловите типове данни е типът BOOLEAN. Булевите (логически) променливи могат да приемат като стойности една от двете константи True ( истина) и False (лъжа). Те могат да учавствуват в различни операции, като стойности могат да им се присвояват чрез оператор за присвояване:



const pi=3.14159 ;

e=2.71 ;


Var bool1, bool2 : Boolean ;

….

bool1:=true ;



bool2:=pi>e ;

В този фрагмент на булевата променлива bool1 се присвоява стойност true, а на bool2 - логическата стойност от операцията сравнение (pi>e). Резултатът от операциите за сравнение е логическа стойност (истина или лъжа) и може да се присвоява на логически тип променливи. Операциите за сравнение в езика Pascal са:



= - равно;

> - по-голямо от;

< - по-малко от

>= - по-голямо или равно

<= - по-малко или равно

<> - не равно.

Булевите операции, както и операциите с цели и реални числа, могат да се използват за образуване на по-сложни изрази. За целта се използват и стандартните булеви операции - and (конюнкция ‘И’), or (дезюнкция ‘ИЛИ”) и not (отрицание ‘НЕ’):

Var a, ix, j: integer;

IsFound, Error, Ok : Boolean ;

….

IsFound := a = ix ;



Error := (a<0) and (a>9) ;

Ok := not Error and (IsFound or (a<>5));

Булевите променливи могат да се сравняват, като се приема че false
true = false резултат - false;

true>false резултат - true;

false>true резултат - false.
Стандартни функции, използващи логически тип данни.


  • функция odd(N) - резултатът от тази функция е логическа стойност, която определя четността на числото N:

odd (N) =

  • функция KeyPressed (от библиотека Crt) - тази функция се използва за да се установи дали по време на изпълнение на програмата е натиснат клавиш от клавиатурата.

KeyPressed =
Знаков тип данни (символни данни).

В езика Pascal се използва естествената подредба на символите в кодовата таблица за представяне на символна информация. По тази причина номерата на десетичните цифрите и буквите от латинската азбука са последователни естествени числа, така че може да се извършва подредба на символите. В програмните езици се използва кодовата таблица ASCII (‘ас-кии код’ таблица). В тях цифрите са номерирани с числа от 48 до 57, главните букви от латинската азбука с номера от 65 до 90 и малките букви - с номера от 97 до 122.

Всеки знак, ограден в апострофи, представлява знакова константа в Pascal. Ето няколко знакови константи: ‘А’, ‘Q’, ‘3’, ‘%’, ‘+’, ‘w’. Друг начин за записване на знакова константа е с използване на специалния знак #: #65, #48, #97, ... Тук са зададени констаните ‘А’, ‘1’, ‘а’. Константите от знаков тип могат да имат наименование (идентификатор).

const Character = ‘A’;

blank = ‘ ‘ ;

CR = #13 ; Plus = ‘+’ ;

Знакът апостроф (‘) също е символ и за да се използва в програмите се записва двоен апостроф (‘’) или #39. За записване на един символ в паметта се използва 1 байт. Броят на всички символи в стандартната ASCII таблица е 256 (поредни номера от 0 до 255).


Деклариране на променливи от знаков (символен) тип:

Var Ch : Char ;

Symb, Letter : char ;

Знаковият тип променлива може да се използва в някои оператори и операции с целочислени данни (например в операторите за цикъл). Там символната променлива се разглежда като цяло число със стойности от 0 до 255.



Операции със знакови променливи:

  • функция ord - връща като резултат поредния номер на символ. Пример: ord(‘0’)=48 ; ord(‘A’) = 65.

  • функция char - съпоставя на цяло число съответен знак от знаковата таблица. Пример: char (48) = ‘0’ ; char (90) = ‘Z’; char (ord (‘c’)) = ‘c’.

  • функциите pred и succ, използвани при целите числа могат да се използват и при символните променливи. Пример: succ(‘0’) = ‘1’; pred(‘W’) = ‘V’; succ(predd(‘f’))=’f’.


Отношения от знаков тип.

За две променливи от знаков тип a и b се казва че a>b,ако поредният номер на знака a в кодовата таблица е по-голям от поредния номер на b, т.е ord (a) >ord(b) . Тогава са в сила следните отношения:

А’ > ‘B’ e false ;

9’>’A’ e false;



p’>’p’ e false;

p’>’A e true.
Каталог: Informatics
Informatics -> Търсене и предлагане – основа на пазарния механизъм
Informatics -> Тема: Дж. Р. Р. Толкин
Informatics -> Достоверността на един летопис и на един роман
Informatics -> Бизнес план за развитие на интернет клуб „The Net”
Informatics -> Лекция 12 Стандартни подпрограми за въвеждане и извеждане на информация
Informatics -> 2 Математически основи на компютърните системи
Informatics -> Лекция 9 Компютърно програмиране Програмни езици
Informatics -> Курсова работа
Informatics -> 1 задача за: Василена Николова, Йоанна Николова, Филип Маринов


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница