pascal

Download Pascal

If you can't read please download the document

Upload: tigrex22

Post on 20-Dec-2015

10 views

Category:

Documents


3 download

DESCRIPTION

Turbo Pascal lucrare de laborator

TRANSCRIPT

LUCRAREA DE LABORATOR NR. 2 I. Scopul lucrarii: Limbajul Turbo Pascal. Structura unui program. Elementele de baza ale limbajului. Identificatori, cuvinte cheie sau rezervate, cuvinte utilizator, separatori. Tipuri de date standard si operatii asupra acestor tipuri de date. II. Continutul lucrarii: 1. Caracteristicile generale ale Limbajului Turbo Pascal (LTP). Structura generala a unui program in LTP. 2. Elementele de baza ale limbajului. Identificatori, cuvinte cheie sau rezervate, cuvinte utilizator, separatori. Tipuri de date standard si operatii asupra acestor tipuri de date.. 3. Probleme propuse pentru rezolvare. 4. Continutul referatului. III.Desfasurarea lucrarii: 1. Limbajul de programare Turbo Pascal (LTP) 1.1. Caracteristici generale Limbajul Turbo Pascal este un limbaj de programare evoluat, zis si de nivel inalt, deoarece programele scrise in acest limbaj sunt independente de calculatorul sau de masina pe care se vor executa. Limbajul Turbo Pascal este usor de invatat si permite scrierea de programe usor de citit si structurate dispunand de noi facilitati de manipulare a datelor. Dintre caracteristicile de baza ale Limbajului Turbo Pascal amintim: - LTP este un limbaj universal care poate fi utilizat in rezolvarea tuturor tipurilor de probleme (tehnico-stiintifice, economice, educationale, prelucrarea textelor etc.) - LTP este un limbaj structurat care permite scrierea modulara a programelor. Din acest punct de vedere orice program este compus dintr-un antet care defineste numele programului si corpul programului. Corpul programului este compus din sectiuni declarative si din sectiunea instructiunilor executabile. - LTP este un limbaj algoritmic care permite transcrierea directa a algoritmilor executabili pe o masina data. 1.2. Structura generala a unui program in LTP PROGRAM NumeDeProgram; [USES NumeUnit1[,NumeUnit2]...;] [LABEL {declaratii de etichete} etic1[,etic2]...;] [CONST {declaratii de constante}] [TYPE {declaratii de tipuri de date utilizator} [VAR {declaratii de variabile}] {definirea procedurilor utilizate de program} [PROCEDURE NumeDeProcedura1(ListaParamFormali1) ............................................................................................. BEGIN {descrierea subalgoritmului procedurii in LTP= instructiunile executabile ale procedurii} END;] ........................................................................... {definirea functiilor utilizate de program} [FUNCTION NumeDeFunctie11(ListaParamFormali1):TipFunctie; ............................................................................................. BEGIN {descrierea subalgoritmului functiei in LTP= instructiunile executabile ale functiei} NumeFunctie1:=Expresie; END;] ........................................................................... BEGIN {inceputul programul principal} {descrierea algoritmului programului principal = instructiunile executabile ale programului principal} END. {sfarsitul programului principal}unde: - PROGRAM NumeDeProgram; reprezinta antetul programului in care se atribuie un nume acestuia ales arbitrar de programator NumeDeProgram; - Blocul sau corpul programului este alcatuit din sase sectiuni care trebuie sa apara in urmatoarea ordine: .. Sectiunea USES. In aceasta sectiune, daca este prezenta, se precizeaza toate structurile externe de program numite si unituri (NumeUnit1,NumeUnit2,...) ce vor fi incluse in timpul compilarii si folosite ulterior in program. Aceste unituri pot fi unituri predefinite ale LTP (DOS, SYSTEM, CRT, GRAPH etc.) sau pot fi unituri definite anterior de utilizator. Exemplu: USES DOS, GRAPH; {precizarea uniturilor predefinite DOS (care contine comenzi DOS) si GRAPH (care contine constante, variabile, proceduri si functii necesare realizarii de desne, animatii etc) .. Sectiunea de etichete LABEL. O eticheta este un numar de la 1 la 9999 sau un identificator ales de utilizator care se poate plasa inaintea oricarei instructiuni executabile in vedrea ramificarii executiei programului spre aceasta instructiune cu ajutorul instructiunii de salt neconditionat "GOTO eticheta" din alte zone ale sectiunii executabile a programului. Daca sunt utilizate etichete in program atunci acestea trebuie declarate obligatoriu in sectiunea LABEL etic1,etic2,etic3... Orice eticheta folsita in program trebuie sa fie declarat in sectiunea LABEL, in sectiunea executabila a programului inaintea unei instructiuni executabile si cel putin intr-o instructiune de salt neconditionat GOTO. Principiile programarii structurate exclud folosirea etichetelor si deci implicit a instructiunilor de salt neconditionat GOTO. Exemplu: ...................... LABEL 10,20,etfin; ............................ BEGIN ............................ 10: s:=a+b; GOTO etfin; ............................. 20: p:=a*b; GOTO etfin; .............................. etfin: END. .. Sectiunea CONST. In aceasta sectiune se definesc toate constantele utilizate pe parcursul programului. O constanta in LTP este un identificator a carui valoare ramane neschimbata pe parcursul executarii programului. O constanta poate fi simbolica (propriu-zisa) sau cu tip, caz in care nu este altceva decat o variabila initializata. Valoarea atribuita unei constante depinde de tipul acesteia, de domeniul sau de definitie. Forma generala a declaratiei unei constante sinbolice este: CONST NumeConstantaSimbolica=ExpresieConstanta;unde: - NumeConstantaSimbolica este un identificator ales de programator care denumeste o constanta simbolica; - ExpresieConstanta este o expresie care poate fi evaluata la compilarea programului. ExpresieConstanta este o multime de literali numerici (valori numerice), constante simbolice definite anterior sau functii predefinite (ABS, LENGTH, ORT, ROUND, SWAP, CHR, LO, PRED, SIZEOF, TRUNC, HI, ODD, PTR sau SUCC) legate prin operatori adecvati. Exemplu: CONST c1=200; c2=-123.45; c3=-1.3456e-2; char1='+'; enter=#13; max=150; ind12=max DIV 2 + c1; Fiecare declaratie de constanta simbolica are ca efect atribuirea valorii expresiei din drapta semnului egal la constanta simbolica din partea stanga a semnului egal. Forma generala a declaratiei unei constante cu tip este: CONST NumeConstantaCuTip:TipConstanta/DescriereTip=ExpresieConstanta;unde: - NumeConstantaCuTip este un identificator ales de programator care denumeste o constanta cu tip respectiva; - TipConstanta este tipul de data, standard sau utilizator, la care apartine constanta cu tip definita (variabila initializata); - DescriereTip - reprezinta o descriere a tipului constantei avand aceeasi sintaxa ca si in sectiunea TYPE; - ExpresieConstanta - este o expresie de tipul TipConstanta sau de forma descrierii tipului respectiv a carei valoare se va atribui constantei definite (NumeConstantaCuTip) si poate fi o expresie constanta propriu-zisa corespunzatoare unui tip standard simplu (intreg, real, logic, caracter etc) sau o constanta corespunzatoare unui tip structurat definit de utilizator (constanta ARRAY (tablou), RECORD (inregistrare), SET (multime) NIL (referinta sau pointer)) Exemple: CONST maxval:INTEGER=1500; ZileDePost:ARRAY[0..2] OF STRING[8]=('luni','miercuri','vineri'); MatriceUnitate:ARRAY[1..3,1..3] OF REAL=((1,0,0),(0,1.0),(0,0,1)); In lectiile urmatoare va fi detaliat si exemplificat modul de declarare al constantelor pentru fiecare tip de data. .. Sectiunea TYPE. Aceasta sectiune permite declararea tipurilor de date definite de utilizator, altele decat tipurile standard ale limbajului (intreg, real, logic, caracter, emumerare, interval, multime) Sintaxa generala este: TYPE NumeTip1=tip1; NumeTip2=tip2; .............................. Exemplu: TYPE {declarare tip sir de lungime 80} TipSir=STRING[80]; {declarare tip vector de 20 elemente intregi} TipVector=ARRAY[1..20] OF INTEGER;...................................................................................... In lectiile urmatoare vor fi prezentate mai multe amanunte despre declararea diverselor tipuri de date definite de utilizator .. Sectiunea VAR. Variabilele sunt identificatorii utilizator care denumesc valorile diverselor tipuri de date (standard sau utilizator). In LTP este obligatorie declararea tuturor variabilelor structurii de program (program principal, procedura sau functie) inaintea utilizarii lor. Aceasta declaratie trebuie sa contina numele variabilei si tipul de date (domeniul de definitie) la care vor apartine valorile variabilei. La lansarea in executie a unui program o variabila care nu a facut obiectul unei initializari in sectiunea CONST va avea o valoare oarecare, aleatoare, necontrolabila. Variabilele, ca si tipurile de date, pot fi simple sau structurate. Variabilele simple sunt utilizate pentru a memora cate o singura valoare, la un anumit moment dat iar variabilele structurate (de tip RECORD sau ARRAY) pot reprezenta liste de inregistrari, tabele sau alte aranjamente de valori, sub un acelasi nume. Declararea variabilelor se face in sectiunea VAR, astfel: VAR NumeVar1[,NumeVar2]...:NumeTip/DescriereTip; [ABSOLUTE segment:deplasament/NumeVar]unde: - NumeVar1,NumeVar2,... sunt identificatori utilizator care denumesc niste variabile; - NumeTip - este un tip standard sau definit de utilizator care precizeaza tipul (domeniul de definitie) varabilelor; - DescriereTip - descrierea tipului variabilelor, daca acesta nu a fost declarat in sectiunea TYPE; - segment:deplasament - adresa de memorie la care se va depune variabila definita; - NumeVar - identificatorul altei variabile la a carei adresa se va depune variabila declarata. Exemple: VAR a,b100,ab3:INTEGER; {declararea de variabile de tip intreg} s,p,suma1,produs20:REAL; {declararea de variabile reale} v1,v20,pa:ARRAY[1..4,1..5] OF BYTE; {declararea de matrice bidimensionala de numere intregi reprezentate pe cate un octet fara semn} .. Sectiunea procedurilor (PROCEDURE). O procedura este un subprogram, asociat unui subalgoritm, care prelucreaza 0,1, sau mai multi parametri de intrare si furnizeaza dupa apelul si executia sa 0,1, sau mai multi parametri de iesire numite rezultate, pe care ii returneaza in structura de program care a apelat procedura; .. Sectiunea functiilor (FUNCTION). O functie este un subprogram, asociat unui subalgoritm, care prelucreaza 1,2 sau mai multi parametri de intrare numiti si argumentele functiei si furnizeaza, dupa apelul si executia sa, o singura valoare de iesire numita rezultat asociat numelui functiei, inaintea revenirii in structura de program care a apelat functia; Detalii referitoare la definirea si apelul procedurilor si functiilor se vor da la lectia care trateaza aceste structuri de program. .. Sectiunea executabila a programului principal. Aceasta sectiune conduce toate actiunile programului, descriind, cu ajutorul instructiunilor executabile si apeland la procedurile si functiile descrise in program respectiv continute in uniturile declarate in sectiunea USES, algoritmul problemei de rezolvat. 2. Elementele de baza ale limbajului. Identificatori, cuvinte cheie sau rezervate, cuvinte utilizator, separatori, literali. Tipuri de date standard si operatii asupra acestor tipuri de date. 2.1. Elementele de baza ale limbajului. Elementele de baza ale LTP sau alfabetul limbajului se compune din: - cifrele de la 0 la 9; - literele mari si mici ale alfabetului latin de la (A la Z si a la z); - caracterele speciale:+ - * / = ^ < > ( ) [ ] { } . , : ; _ ' " ? ! @ # $ % & - simbolurile speciale: . operatorul de atribuire :+; . operatorii de relationali: .. operatorul de egalitate =; .. operatorul diferit ; .. operatorul strict mai mic =; . delimitatorul de domeniu .. (exemplu TipInterval=1..100); . delimitatorii de comentariu {text comentariu} sau (*text comentariu*); Pentru anumite caractere speciale exista si reprezentari echivalente: - pentru [ exista (. - pentru ] exista .) 2.2. Identificatori, cuvinte cheie sau rezervate, cuvinte utilizator Un identificator este format dintr-un sir de de maximum 63 de caractere alfanumerice, din care primul trebuie sa fie o litera, iar urmatoarele pot fi litere, cifre si liniuta de subliniere (_). Literele pot fi mar sau mici, compilatorul Turbo Pascal considerandu-le identice. Un identificator poate fi format din caractere fara o semantica anume sau poate fi format din cuvinte cu o semantica inspirata din limbajul natural. In cazul in care un identificator este format din doua sau mai multe cuvinte, pentru o mai buna lizibilitate, se pot folosi literele mari pentru primele litere din cuvinte sau liniuta de subliniere(exemplu:SumaPrimelorNumereNaturale sau suma_primelor_numere_naturale, ColtulDreaptaSus sau coltul_dreapta_sus etc.) Lungimea identificatorilor influenteaza numai lungimea textului sursa al programului, nefectand lungimea programului obiect (rezultat dupa compilare). In practica programarii se prefera folosirea identificatorilor cu semnificatie semantica in limbajul natural de vorbire pentru a mari lizibilitatea programelor neavand efect asupra lungimii programului obiect sau asupra timpului de executie al programului. Lungimea identificatorilor influenteaza timpul de scriere al programelor sursa si de introducere (tastare) putand fi o sursa suplimentara de erori in compilare. Din acest motiv trebuie facute compromisuri intre lungime si lizibilitate. Identificatorii LTP sunt de doua feluri: identificatori predefiniti, standard ai limbajului si identificatori alesi de programatori numiti si identificatori utilizator. Identificatorii standard ai LTP sunt cuvintele cheie sau rezervate care identifica parti ale programului cum ar fi:PROGRAM, USES, LABEL, CONST, TYPE, VAR, FUNCTION ,PROCEDURE, BEGIN si END sau care au semnificatii bine stabilite: - ABSOLUTE - precizarea unei adrese absolute de memorie; - AND - operatorul SI logic sau aritmetic; - ARRAY - declararea unui tip de data tablou; - BEGIN - declararea inceputului unui bloc de instructiuni executabile - CASE - descrierea instructiunii conditionale cu mai mult de doua alternative; - CONST - identificarea sectiunii declarative de constante; - DIV - operatorul impartirii intregi; - DO - utilizat la instructiunilor WHILE, FOR si la calificarea datelor de tip RECORD - DOWNTO - utilizat la instructiunea for cu decrementare; - ELSE - utilizat la instructiunile IF si CASE; - END - declararea sfarsitului unui bloc de instructiuni; - EXTERNAL - declararea si apelarea unei proceduri externe scrisa in limbaj de asamblare si tradusa in cod obiect; - FILE - declararea fisierelor fisierelor text, cu tip sau fara tip; - FOR - instructiunea de ciclare cu un numar cunoscut de pasi; - FORWARD - referirea la proceduri si functii definite ulerior; - FUNCTION - definirea unei functii utilizator;\ - GOTO - instructiunea de salt neconditionat; - IF - instructiunea conditionala cu doua alternative; - IMPLEMENTATION - - IN - apartenenta unui element la o multime data; - INLINE - includerea in program a unor secvente scrise in cod masina; - INTERFACE - INTERRUPT - declararea unor proceduri de intreruperi care nu se pot apela direct din LTP - LABEL - identificarea sectiunii de etchete; - MOD - operatorul intreg MODULO (restul impartirii a 2 numere intregi); - NIL - valoarea unei variabile referinta care nu refera nici o variabila dinamica; - NOT - operatorul de negatie aritmetica sau logica; - OF - la precizarea tipului componentelor unui tablou si la instructiunea Case; - OR - operatorul sau inclusiv aritmetic sau logic; - PACKED - declararea datelor impachetate; - PROCEDURE - definirea unei proceduri; - PROGRAM - definirea antetului unui program; - RECORD - definirea datelor de tip inregistare (articol); - REPEAT - instructiunea de ciclarea cu testarea la sfarsitul ciclului a conditiei de ciclare; - SET - declararea datelor de tip multime; - SHL - instructiunea de deplasare aritmetica la stanga cu un numar de biti; - SHR - instructiunea de deplasare aritmetica la dreapta cu un numar de biti; - STRING - declararea tipului de date de tip sir de caractere; - THEN - la instructiunea conditionala if cu doua alternative; - TO - la instructiunea de ciclare cu un numar cunoscut de pasi; - TYPE - identificarea sectiunii de definire a tipurilor utilizator de date; - UNIT - definirea unei colectii de constante predefinite, declararea unor tipuri de date, variabile, functii si proceduri in forma compilata utilizate la linkeditarea programelor - UNTIL - la instructiunea de ciclarea cu testarea la sfarsitul ciclului a conditiei de ciclare (REPEAT ); - USES - identificarea sectiunii de declarare a unit-urilor de inclus in program; - VAR - identificarea sectiunii de declarare a variabileor si a tipurilor acestora; - WHILE - instructiunea de ciclarea cu testarea la inceputul ciclului a conditiei de ciclare ; - WITH - la calificarea datelor din variabilele de tip inregistrare (RECORD) - XOR - operatorul sau exclusiv aritmetic si logic; Exista si alte nume predefinite in LTP care pot fi considerate identificatori standard cum ar fi: - numele unit-urilor standard (SYSTEM, DOS, CRT, GRAPH,...); - numele functiilor si procedurilor definite in aceste unituri (RESET, REWRITE, READ, READLN, WRITE, WRITELN, SEEK, CLOSE, EOF, EOLN, FILEPOS, FILESIZE..) Identificatorii utilizator sunt alesi de programator si sunt folositi pentru a identifica constante, tipuri de date, variabile, proceduri, functii si unit-uri proprii. 2.3. Sepatarorii Limbajului Turbo Pascal (LTP). Separatorii servesc la separarea simbolurilor limbajului si sunt: - blancul (spatiul) - sfirsitul de linie (EOLN=End Of LiNe); - caracterul ";" care serveste pentru separarea instructiunilor; - comentariul; Un comentariu incepe fie cu caracterul "{" sau cu "(*" si se incheie cu caracterul "}" sau cu "*)", avand sintaxa: - {text pentru intregirea intelegerii programului sursa} sau - (*text pentru intregirea intelegerii programului sursa*) Un comentariu poate sa contina orice secventa de caractere sau separatori de linii cu exceptia caracterelor "{", "}", "(*", "*)". Comentariul poate fi inlocuit printr-un spatiu fara a altera continutul logic al programului. Lisibilitatea programului este marita prin inserarea in text a comentariilor, a blancurilor si a liniilor goale. 2.4. Literali ai Limbajului Turbo Pascal (LTP). Prin literali se inteleg acele valori concrete corespunzatoare unor tipuri de date cum ar fi: valorile intregi sau reale numite si numere, caracterele ASCII, sirurile de caractere, valorile logice etc Literalii numerici desemneaza numere in LTP - valori intregi sau reale si sunt scrise folosind exprimarea zecimala. Orice numar poate fi precedat de semn (+ sau -). Un literal intreg sau un numar intreg este un sir de cifre zecimale sau hexazecimale , precedate eventual de + sau -. Exemplu: 19375, 0, -125, 175, +12567, $4FCD, $7A9DC; Literalii reali sau numerele reale ce se pot reprezenta sub forma zecimala, expomnentiala sau combinata. Formatul zecimal presupune un semn (+,-), o parte interaga, un punct zecimal si o parte fractionara. Exemplu: 185.75, -1235.175, +0,175 etc. Formatul exponential consta dintr-un numar intreg sau in format real zecimal urmat de litera e sau E urmata de un exponent intreg pozitiv sau negativ (litera E reprezinta baza 10). Exemple: 0.0725E-10, 271E2, -150.E-10 etc. Un literal caracter consta dintr-un caracter ASCII incadrat de apostrofuri ('A', '+', , '?','$','%'). Un literal sir sau un sir de caractere este o secventa de caractere delimitata de apostrofuri. Prezenta in sir a unui apostrof se marcheaza prin dublarea acestuia. Exemplu: 'alfa10', 'ALFA-beta', '-125**15' Literele mari si mici au valori diferite in codul sirurilor. 2.5. Tipuri de date standard si operatii asupra acestor tipuri de date. 2.5.1. Conceptul de data. Clasificarea tipurilor de date in LTP. Prin data se poate intelege orice informatie asupra careia poate opera calculatorul. La nivel hardware o data este reprezentata de o succesiune de cifre binare. Un tip de data precizeaza, la nivelul limbajelor evoluate, valorile pe care le poate lua o variabila precum si operatiile care se pot efectua asupra acesteia. Orice variabila dintr-un program Pascal trebuie sa fie asociata unui tip de data si numai unuia. Limbajul Turbo Pascal cunoaste urmatoarele tipuri de date: - tipuri simple de date din care fac parte tipurile ordinale si tipul real. . tipuri ordinale (scalare). Un tip ordinal precizeaza o multime de valori finita si ordonata ale carei valori pot fi puse in corespondenta cu multimea N a numerelor naturale {0,1,2,3,...,n,...} Fiecare tip ordinal are o valoare maxima si una minima. Intr-o asemenea multime, cu exceptia valorii minime, fiecare element are un predecesor, iar cu exceptia valorii maxime fiecare element are un succesor. Pe multime tipurilor ordinale de date sint aplicabile trei functii predefinite:- y:=succ(x) - furnizeaza , daca exista, valoarea urmatoare (y) a unei valori ordinale x.- y:=pred(x) - furnizeaza, daca exista, valoarea anterioara valorii ordinale x.- y:=ord(x) - furnizeaza rangul (y) ocupat de variabila ordinala x. Rezultatul y este de tip Integer. Prin aplicarea opratorilor relationali (=,,=) asupra valorilor ordinale se poate verifica relatia de ordine intre acestea. Rezultatul aplicarii unui operator relational este o valoarea logica. Referitor la functiile asupra tipurilor ordinale avem adevarate relatiile: succ(x)>x si ord(succ(x)):=ord(x)+1 pred(x)