proiect pascal

40
Un limbaj de programare este un ansamblu de simboluri, cuvinte, instrucţiuni şi semnificaţii atribuite acestora, utilizat pentru descrierea algoritmilor. Limbajul de programare este astfel un mijloc prin care programatorul comunicã cu calculatorul. Programul este o succesiune de intrucţiuni aparţinând unui limbaj de programare, prin care se descriu operaţiile la care sunt supuse datele şi ordinea de execuţie a acestora, pentru rezolvarea automatã a unei probleme date. Un program reprezintã o alta modalitate de descriere a unui algoritm de rezolvare a unei probleme date. Pentru a înlãtura acest mare dezavantaj au apãrut limbajele simbolice şi apoi limbajele de programare evoluate care prin intermediul ansambloarelor şi compilatoarelor de care dispun, permit traducerea automatã a instrucţiunilor scrise într-un limbaj apropiat de limbajul curent de limbajul binar. Limbajele de programare reprezinta principalele mijloace de comunicare om- masina, evolutia lor fiind nemijlocit legatã de cea a calculatoarelor electronice, a caror era a inceput prin anii 1944. Dintre limbajele de programare evoluate utilizate pe toata gama sistemelor de calcul menţionãm: - Basic - Algol - Fortram - Cobol - Pascal - C - PL/1

Upload: dinulescu-marius

Post on 04-Jul-2015

264 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Proiect Pascal

Un limbaj de programare este un ansamblu de simboluri, cuvinte, instrucţiuni şi semnificaţii atribuite acestora, utilizat pentru descrierea algoritmilor. Limbajul de programare este astfel un mijloc prin care programatorul comunicã cu calculatorul.

Programul este o succesiune de intrucţiuni aparţinând unui limbaj de programare, prin care se descriu operaţiile la care sunt supuse datele şi ordinea de execuţie a acestora, pentru rezolvarea automatã a unei probleme date. Un program reprezintã o alta modalitate de descriere a unui algoritm de rezolvare a unei probleme date.

Pentru a înlãtura acest mare dezavantaj au apãrut limbajele simbolice şi apoi limbajele de programare evoluate care prin intermediul ansambloarelor şi compilatoarelor de care dispun, permit traducerea automatã a instrucţiunilor scrise într-un limbaj apropiat de limbajul curent de limbajul binar. Limbajele de programare reprezinta principalele mijloace de comunicare om-masina, evolutia lor fiind nemijlocit legatã de cea a calculatoarelor electronice, a caror era a inceput prin anii 1944.

Dintre limbajele de programare evoluate utilizate pe toata gama sistemelor de calcul menţionãm:

-         Basic

-         Algol

-         Fortram

-         Cobol

-         Pascal

-         C

-         PL/1

 

În ultimul timp s-au impus tot mai multe limbaje de inteligenţã artificialã şi sisteme expert cum sunt:

-         C++

-         Lisp

-         Prolog

precum şi programarea pe obiecte ( Basic, C, etc. ).

Page 2: Proiect Pascal

 

Orice limbaj de programare presupune definirea urmatoarelor elemente componente:

  §  alfabetul

§  vocabularul

§  gramatica

§  punctuatia

§  semantica

 

Rezultatul activitãţii de programare îl constituie programul scris ca text într-un limbaj de programare. Un astfel de program se numeşte program sursa. El este scris printr-un editor de texte acceptat de limbajul de programare respectiv.

Fiind scris ca format text, programul sursã nu este înţeles de cãtre şistemul electronic de calcul. Pentru aceasta este necesara traducerea lui intr-un cod intern, accesibil calculatorului. Aceastã operaţie se realizeazã cu un program translator numit compilator. Compilatorul este componenta software care realizeazã traducerea programului sursa în cod intern, rezultand aşa numitul program cod obiect. Lucrul cu un anumit limbaj de programare presupune existenta compilatorului pentru acel limbaj. Ansamblul format din limbajul de programare şi programul translator asociat, formeaza sistemul de programare.

 

Limbajul de programare pascal face parte din categoria limbajelor de programare evoluate de nivel inalt. Un program structurat este constituit din unitati functionale bine definite, ierarhizate conform naturii specifice a problemei de rezolvat. În interiorul unei astfel de unitati functionale, structurarea se manifesta atât la nivelul operaţiilor de executat cât şi la cel al datelor de prelucrat.

 Programarea structurata este o metoda independenta de limbajul de programare utilizat. Limbajul Pascal include conceptele programarii structurate în ambele sensuri ale efortului de abstractizare presupus de realizarea unui program: ogranizarea datelor şi conceperea succesiunii de operaţii.Limbajul Pascal a fost implementat pânã în prezent pe o mare varietate de calculatoare, având un inalt grad de portabilitate comparativ cu implementarea altor limbaje de programare.

Page 3: Proiect Pascal

Un program reprezintã o mulţime ordonatã de instrucţiuni, asociatã unui algoritm de rezolvare a unei probleme care comandã operaţiile de prelucrare a datelor.

         

Instrucţiunea reprezintã exprimarea intr-o forma riguroasa a unei operatii şi precizeaza functia şi adresele operanzilor.Relaţia dintre cele 3 elemente: algoritm, limbaj şi program poate fi exprimatã astfel:

 

 

 

 

          Blocul executabil constituie lanţul de instructiuni prin care este codificat programul în limbajul pascal, deci prin care se descrie algoritmul de prelucrare. Acestea sunt cuprinse între Begin şi End.

Este interzis sa dam nume diverselor obiecte care sa coincida cu acele cuvinte rezervate. În partea declarativa orice declaratie careia nu i se asociaza obiectele legate de programul în cauza se poate omite.

          Toate obiectele manipulate în pascal poarta un nume. Acest nume se numeste identificator. Identificatorii sunt denumiri prin care se desemneaza datele, procedurile, functiile, programele.

          Un tip de date reprezintã setul de valori pe care le poate lua elementul respectiv, împreunã cu mulţimea operaţiilor care se aplica asupra acestora. Orice variabila utilizata în program trebuie sa apartina unui tip. Tipul de date poate fi: predefinit şi construit pe baza celor predefinite.

 

 

Din punct de vedere al posibilitatii de modificare a valorii în faza de executie a programului, datele se pot clasifica în:

-         date variabile

-         date constante

 

Page 4: Proiect Pascal

Tipurile intregi de date sunt:

-         Byte

-         Word

-         Shortint

-         Integer

-         Longint

 

Tipul real reprezintã un numãr real cuprins între douã limite care diferã de la un compilator la altul şi de la un tip la altul.

Astfel tipurile reale pot fi:

-         real

-         single

-         double

-         extended

-         comp

 

Funcţiile SUCC şi PRED nu functioneazã, tipul REAL nefiind ordinal.

 

Tipul Caracter ( CHAR )

O variabilã de tip caracter poate avea drept valoare un caracter. O constanta de tip caracter poate fi:

`a` `:` literele mari au alte valori decat cele mici

x:char   se reprezinta în memorie pe un octet, adica 255 coduri.

x:=`a` sau x:=a

Page 5: Proiect Pascal

Existã funcţii care permit trecerea de la caracter la codul ASCII şi invers.

CHR ( cod ) este o funcţie care intoarce ca rezultat caracterul respectiv.

x:=chr(64)

ORD ( caracter ) este o funcţie care intoarce codul ASCII al caracterului respectiv.

 

Tipul Boolean este un tip ordinal, enumerativ, care ocupã un octet memorie şi poate lua 2 valori logice: adevarat şi fals.

 

Declaraţia de tip se face :

Type boolean = ( True, False )

 

Tipul Declarat ( Enumerativ ) este definit de utilizator ca o lista ordonatã, prin enumerarea valorilor posibile astfel:

TYPE identif  tip = ( lista elemente )

TYPE zi-sapt= ( luni, marti, … , duminica )

 

Tipul Subdomeniu se mai numeste tip interval şi se defineste ca submultime a unui tip ordinal prin precizarea intervalului inchis de valori. Toate caracteristicile tipului parinte ( Integer , Char ) se regasesc în tipul subdomeniului, singura deosebire dintre ele constand în multimea valorilor pe care le poate lua.

 

Declararea constantelor:

CONST ident = valoare;

Pot fi numai de tip standard ( scalar ) şi se declarã în sectiunea CONST

            Valoarea constantei nu poate fi modificatã în timpul rulãrii programelor.  

Page 6: Proiect Pascal

            Orice încercare de a atribui constantelor o valoare, chiar dacã este egalã cu cea iniţialã, va genera un mesaj de eroare.

Se asigurã astfel protecţia valorilor.

 

Declaraţia de tip

TYPE Identif_tip=definiţie tip;

 

Declaraţia de variabile

Var identif var: spaţiu tip var

 

Dacã sunt mai multe variabile de acelasi tip, se inşirã separate cu `,`

 

Declaraţia de funcţii şi proceduri

function nume_funcţie (declaraţie de var): tip rez;

function fact (n: integer):integer;

 

Mai multe variabile se separã prin `;`

 

Instrucţiuni pascal: Limbajul pascal este puternic orientat spre programarea structuratã, fiind conceput astfel încât sa implementeze corect conceptele proiectãrii şi realizãrii structurate şi modularizate a programelor. Progamul scris într-un limbaj de programare evoluat deci în pascal, se numeste progream sursã.

 

 

 

Page 7: Proiect Pascal

Instrucţiuni simple:

 

·                    de atribuire

·                    apeluri de procedura

·                    instrucţiunea de salt necondiţionat(goto)

·                    instrucţiunea vidã

 

Instrucţiuni simple

          Prin instructiuni simple se realizeazã o mare parte din operatiile de bazã a algoritmilor de prelucrare. Instructiunea vidã descrie acţiunea vidã, ea este definitã prin lipsa în contextul unor construcţii pascal, fãrã a avea o mnemonica explicitã.

Se prezintã ca o linie goala urmatã de `;`

i:=1 ;  2 instrucţiuni vide

If x>0 then

x:=x+1

else;

Instrucţiunea de atribuire evalueazã o expresie şi atribuie rezultatul obtinut unei variabile sau functii.

          Are formatul general:

Identificator:=valoare;

 

Prioritatea operanzilor în Pascal:

 

NOT*   /   DIV    MOD    AND+ – OR ( *, +, -, pe multimi )

Page 8: Proiect Pascal

= ,   > ,   < ,<= , >= , <> , şi operatori relationali pe multimi

 

Expresii logice sunt cele care în urma evaluarii produc un rezultat logic de TRUE sau FALSE ( Boolean ). Ele se prezintã fie sub forma unor condiţii simple, fie sub forma unor conditii compuse, formate din mai multe conditii simple legate prin operatorii logici: AND, OR, NOT.

 

Dacã nu suntem siguri de prioritatea anumitor operatori este necesara utilizarea parantezelor.

 

Apelul de procedurã:

Orice rutinã scrisã de noi, pentru a efectua anumite operaţii, se numeşte procedurã.

Procedurile întâlnite în program ca simple instrucţiuni genereazã o serie de operaţii:

-                     compilatorul cautã numele de procedurã în biblioteca sa; dacã nu este gãsit acolo procedura e cautatã în lista de declaraţii de proceduri a programului; dacã nu este nici acolo se afiseazã un mesaj de eroare.

-                     dacã este gãsitã procedura e apelatâ.

 

Instructiunea de salt neconditionat GOTO

Format : GOTO eticheta;

La intalnirea ei se executa un salt la linia care este precedata de eticheta urmata de `:`

IF delta >= 0 THEN

GOTO 30

ELSE

WRITE (` ecuatia nu are solutii`);

Page 9: Proiect Pascal

30: x1:=(-b+sqrt(delta))/(2*a);

      x2:=(-b-sqrt(delta))/(2*a);

write ( x1, x2 );

end.

 

Instructiuni structurate

Instructiunea compusa este o secventa de instructiuni delimitata de cuvintele rezervate BEGIN, END.

Format :

BEGIN lista-instr END;

 

Efectul executiei instructiunii IF:

Se evalueaza conditia specificata.

 

Instructiuni pentru realizarea structurilor repetitive

Instructiunea WHILE realizeaza structura repetitiva conditionata anterior.

Format:

        WHILE conditie DO instructiune; este echivalenta cu o constructie formata din urmatoarele instructiuni:

IF conditie THEN

BEGIN

instructiune

GOTO 1

end.

Page 10: Proiect Pascal

Instructiunea WHILE se mai numeste instructiune cu test initial.

 

Instructiunea Repeat

Realizeaza „structura repetitiva conditionata posterior”.

Format:

        REPEAT instructiune UNTIL conditie ;

 

REPEAT

  instructiune

UNTIL

  conditie;

 

Ca şi ELSE, inainte de UNTIL mi se pune `;`.

Instructiunea FOR ( ciclu cu contor )

Realizeaza structura repetitiva cu numarator ( contor de numarare ).

Format:

     1)  FOR contor:=val initiala TO val finala

          DO instructiunea;

      2) FOR contor:=val initiala DOWNTO val finala

          DO instructiunea

 

 

 

Page 11: Proiect Pascal

Instructiuni de citire şi scriere a datelor

În pascal, citirea şi scrierea nu se realizeaza prin instructiuni, ci prin proceduri specializate în acest sens, proceduri standard ale limbajului.

Aceste fişiere în Turbo Pascal sunt asociate tastaturii şi respectiv ecranului.

Fisierele INPUT şi OUTPUT conţin excusiv şiruri de caractere organizate pe linii. Liniile sunt încheiate de caracterul special standard EOL introdus automat la apasarea tastei ENTER.

Citirea datelor din fişierul INPUT

Existã doua proceduri standard predefinite în Pascal:

-Read

-Readln

Procedura READ

Format:

READ ( variabila{,variabila});

-         variabilele pot fi doar de tip CHAR, INTEGER, REAL sau STRING.

 

Procedura READLN

Format:

READLN ( variabila{,variabila});

 

Scrierea datelor:

-Write

-Writeln

 

 

Page 12: Proiect Pascal

 

Instrucţiuni     de selectie multiplã ( CASE )

Format:

CASE expresie OF

   lista etichete CASE:instructiune;

END;

 

Structura de tablou (Vector, Matrice): structura de tablou în Pascal este mai flexibilã decât în alte limbaje de programare, fiind rezultatul compunerii a douã tipuri:

-         tipul de baza al tabloului

-         tipul de indexare al tabloului

 

Setul de caractere : Acestea sunt entităţi formate din caractere :

·        Literele mari şi mici ale alfabetului limbii române: A-Z, a-z;

·        Cifrele sistemului de numerotaţie  zecimal: 0-9;

·        Caractere speciale: =-/^(){}[].,;:_!@#$%&etc;

·        Caractere speciale perechi: <=,>=,=,<>;

·        Separatorii : spaţiu, tab, Enter.

 

Identificatorii : Pot fi o variabilă, o contantă, un tip definit de utilizator, o enumerare, o procedură, o funcţie, un obiect, o metodă, o proprietate, un control, o formă, un modul sau chiar proiectul însuşi. Un proiect Basic poate să conţină maxim 32000 identificatori.

Comentariile sunt şiruri de caractere care au în faţă caracterul apostrof (‘) şi servesc pentru a face mai lizibil textul programului , pntru a documenta programul.

Page 13: Proiect Pascal

Fiecare tip de dată permite o serie de operaţii. Astfel pentru valorile unui tip întreg se pot face următoarele operaţii : +, -, *, împărţirea întreagă, împărtirea reală, restul împărţirii întregi, ridicarea la putere.

Constantele : reprezintă o valoare fixă care nu se schimbă în timpul execuţiei programului sau de la o execuţie la alta. Pot fi de 2 tipuri : intrinseci şi simbolice.

Variabilele : reprezintă o locaţie de memorie internă care serveşte pentru stocarea temporară a datelor şi care se identifică printr-un nume. Tipul variabilelor din Basic sunt : variant, byte, boolean, integer, long, single, double, currency, date şi object.

Variabilele din Basic sunt caracterizate prin :

-         nume

-         tip de data

-         domeniu.

 

Utilizatorul poate defini în  cadrul modulului său şi tipuri de date proprii, deci tipuri de date predefinite. Pentru aceasta, declaraţia de tip se face de către programatori în prima parte a modului de cod cu ajutorul instrucţiunii :

·                    TYPE – definire variabilă

·                    END TYPE

 

Operatorii : Reprezintă comenzi speciale pentru operaţiile ce pot fi executate cu datele din program. Basic pune la dispoziţie 4 tipuri de operatori : aritmetici, logici, de comparare şi de concatenare.

O funcţie este o procedură care efectuează o anumită sarcină într-un program.

1.                 Dialogul standard cu utilizatorul

Funcţia INPUT- apelul funcţiei INPUT permite preluarea de date de la tastatură.

2.                 Funcţii matematice şi statistice : ABS, EXP, INT, LOG, RND, SQR, ATN, SIN, COS, TAN ;

3.                 Funcţii pentru şiruri de caractere : LCASE$, UCASE$, LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$, INSTR,

Page 14: Proiect Pascal

4.                 Funcţii pentru conversia întregilor : INT, CINT ;

5.                 Funcţii pentru conversia tipului de dată : CDBL, CLNG.

6.                 Funcţii pentru lucrul cu date calendaristice : TIME$, DATE$ ;

O procedură este o secvenţă de instrucţiuni executate ca un tot unitar sau partajabile. Există trei tipuri de proceduri : SUB, FUNCTION, Tip de proprietate. Sintaxa generală a unei proceduri este : Private/Public/Static/Sub

                                                          …………………………….

                                                          End Sub.

 

 

Instrucţiuni de atribuire – atribuirea se poate efectua prin instrucţiunile :

          Let – pentru valori atribuite variabilelor şi proprietăţilor ;

          Set – pentru atribuirea de obiecte la o variabilă de tip obiect ;

          Lset şi Rset – pentru atribuiri speciale de şiruri sau tipuri definite de utilizator

Terminarea execuţiei unui program sau oprirea temporară a acestuia sepot realiza prin instrucţiunile : DoEvents, End, Exit, Stop.

 

Se ştie că în cadrul algoritmilor de rezolvare a problemelor se întâlnesc, în afara unor secvenţe de operaţii care se execută liniar, în mod necondiţionat, o serie de operaţii care necesită testarea unor condiţii, funcţie de care se o succesiune de operaţii  sau alta, sau o serie de operaţii care se execută în mod repetat. Avem de a face cu cele trei tipuri de structuri fundamentale :

-         secvenţială /liniară ;

-         alternativă/de decizie ;

-         repetitivă.

Limbajul de programare Basic implementează aceste structuri de control ale programului prin comenzi corespunzătoare, deci :

Page 15: Proiect Pascal

-         comenzi pentru structuri alternative ;

-         comenzi pentru structuri repetitive.

Comenzile pentru structurile alternative : If…. Then, If…Then…Else, Select Case.

Comenzile pentru structurile repetitive : While…Wend, Do….Loop, For….Next, For Each… Next.

Fişierele conţin colecţii de date omogene ca natură şi criterii de prelucrare, 

Page 16: Proiect Pascal

Unul din cele mai simple programe, este acela de a afişa un text pe ecran, ca în exemplul următor :

beginwriteln('Vornicescu Silviu');writeln('Programator al firmei Delphin Software');end.

În acest caz programul cuprinde :Un antet, adică cuvîntul rezervat Program, urmat de numele

programului. În Pascal folosirea antetului este obligatorie, dar în Turbo Pascal antetul nu mai este obligatoriu, dar e bine să îl folosim pentru o mai mare claritate a programelor.

Ø Blocul programului, singurul care este obligatoriu. În interiorul blocului se pot face declaraţii de variabile sau constante şi pot fi scrise instrucţiuni. Un bloc poate să conţină la rîndul său alte blocuri.

Următorul program este asemănător cu primul, dar conţine elemente noi în structura sa.

uses crt;beginclrscr;writeln('Salut');end.În acest caz, programul conţine în plus cuvîntul rezervat Uses, urmat de

numele unit-ului care se va utiliza, crt;În acest exemplu este utilizată subrutina clrscr (clear screen) din

unitul crt , care este folosită pentru ştergerea ferestrei curente cu culoarea fondului. Implicit, culoarea fondului este neagră, iar a scrisului este albă. Scrierea datelor

  

Orice operaţie de scriere a datelor se execută începînd din poziţia curentă a cursorului (liniuţa care clipeşte) şi lasă cursorul după ultimul caracter scris.

 Procedurile Write şi WriteLn

  

Page 17: Proiect Pascal

Sintaxa : Write (argument1, argument2, …, argument n) 

Numărul minim de argumente este unu. Un argument poate fi afişat cu sau fără format. O afişare cu format are forma :  e:w:f în careØ e reprezintă expresia a cărei valoare se afişeazăØ pe w poziţii sau pe mai multe, dacă valoarea de afişat depăşeşte wpoziţiiØ valoarea expresiei f se referă la numărul zecimalelor cu care se va scrie

valoarea expresiei e de tip real, în reprezentare fără exponent.Valoarea argumentelor se scrie pe linia curentă, fără spaţii între ele. În

funcţie de tipul expresiei, formele admise ale argumentului pot fi cu sau fără format special.

Argumentul “e” poate fi de tip CHAR (caracter), STRING (şir de caractere), BOOLEAN (logic) sau INTEGER (Număr întreg). Formele posibile sînt : e sau e:w

Argumentul “e” poate fi şi de tip REAL. Formele posibile sînt : esau e:w sau e:w:f. 

Exemple de afişare date cu Write

Write('1234567890'); Afişează 1234567890Write(1969:10); Afişează numărul 1969 începind cu

coloana 10 spre coloana 7, pentru că numarul este aliniat la dreapta.

Write(9.752:7:2); Afişează 9.75 începind cu coloana 7 spre coloana 4. O coloană este ocupată de punctul zecimal, iar afişarea se face cu 2 zecimale.Numărul este aliniat la dreapta.

Write(9.999:7:2); Afişează 10.00 începind cu coloana 7 spre coloana 3. O coloană este ocupată de punctul zecimal, iar afişarea se face cu 2 zecimale. Se observă că numărul este rotunjit superior. Numărul este aliniat la dreapta.

Write(3.14:7); Afişează 3.1E+00 . Dacă nu se specifică numărul de zecimale pentru afişarea unui numar real, se afişează în format ştiinţific.

 Procedura WriteLn are apelul cu aceiaşi formă cu a proceduriiWrite.

Dacă este apelată fără parametri, are ca efect trecerea cursorului la începutul liniei următoare. Dacă există o listă de parametri, efectul este identic cu al procedurii Write, urmată de apelul procedurii WriteLn fără argumente. 

Exemple de afişare date cu WriteLn

WriteLn; Afişează un rînd gol şi mută cursorul la începutul liniei următoare.

Page 18: Proiect Pascal

WriteLn('Vornicescu Silviu'); Afişează textul dintre apostroafe şi mută cursorul la începutul liniei următoare. Textul este aliniat la stînga.

Page 19: Proiect Pascal

 Listingul programului Prg_0001program inceput_Prg_0001;var a,b : integer;                   {Se declară variabilele "a" şi "b" ca nr. întregi}begin                                     {Începutul programului}WriteLn('Vornicescu Silviu');        {Afişează textul dintre apostroafe şi mută                                               cursorul la începutul liniei următoare}WriteLn('Programator al firmei Delphin Software'); {Afişeaza textul dintre                                               apostroafe şi mută cursorul la inceputul liniei                                               următoare}WriteLn;                                 {Afişează un rînd gol şi mută cursorul la începutul                                               liniei următoare}Write('1234567890');           {Afişează 1234567890}WriteLn;Write(1969:10);      {Trece cursorul pe rîndul următor şi apoi                                               afişează numărul 1969 începînd cu coloana 10                                               spre coloana 7, pentru că numărul este aliniat                                               la dreapta.}WriteLn;Write(1969:9);        {Trece cursorul pe rîndul următor şi apoi                                               afişează numărul 1969 începînd cu coloana 9                                               spre coloana 6, pentru că numărul este aliniat                                               la dreapta.}WriteLn;Write(1969:8);        {Trece cursorul pe rîndul următor şi apoi                                               afişează numărul 1969 începînd cu coloana 8                                               spre coloana 5, pentru că numărul este aliniat                                               la dreapta.}WriteLn;Write(9.752:7:2);    {Afişează 9.75 începînd cu coloana 7 spre coloana                                               4. O coloană este ocupată de punctul zecimal, iar                                               afişarea se face cu 2 zecimale. Numărul este                                               aliniat la dreapta.}WriteLn;Write(9.999:7:2);    {Afişează 10.00 începînd cu coloana 7 spre coloana                                               3. O coloană este ocupată de punctul zecimal, iar                                               afişarea se face cu 2 zecimale. Se observă că                                               numărul este rotunjit superior. Numărul este                                               aliniat la dreapta.}WriteLn;Write(7.2569:7:3); {Afişează 7.257 începînd cu coloana 7 spre coloana                                               3. O coloană este ocupată de punctul zecimal, iar                                               afişarea se face cu 3 zecimale. Se observă ca                                               numărul este rotunjit superior. Numărul este                                               aliniat la dreapta.}WriteLn;Write(3.14:7);         {Afişează 3.1E+00 . Dacă nu se specifică numărul                                               de zecimale pentru afişarea unui numar real, se                                               afişează în format ştiinţific.}a:=5;                                      {Se atribuie valoarea 5, variabilei "a"}WriteLn;WriteLn(a);              {Se afişeazâ valoarea variabilei "a"}WriteLn(a:2);                         {Se afişează valoarea variabilei "a" începînd cu                                               coloana 2}

Page 20: Proiect Pascal

b:=111;                                  {Se atribuie valoarea 111, variabilei "b"}WriteLn;WriteLn(a,b);          {Se afişează valorile variabilelor "a" şi "b"                                               una dupa alta, de apare "5111"}WriteLn;WriteLn('a = ',a);    {Se afişează şirul de caractere "a = ",urmat de                                               valoarea variabilei "a"}WriteLn;WriteLn('a = ',a,' ','b = ',b); {Se afişează două şiruri de caractere                                               şi valorile celor două variabile, despărţite                                               printr-un caracter "spaţiu"}WriteLn;end. Citirea datelor 

Citirea datelor se face începînd din poziţia curentă a cursorului şi lasă cursorul după ultimul caracter citit. Procedurile Read şi ReadLn Sintaxa : Read (variabila1, variabila2, …, variabila n) 

Numărul minim de parametri este unu. Datele citite de la tastatură,se transferă într-o zonă tampon de memorie (bufer). Program Citire_Scriere_Prg_0002; VAR                                                {Declarare variabile}Raza : Integer;                               {Raza cercului} Begin                                              {Începutul programului}WriteLn;                                          {Afişează un rînd gol}WriteLn('Introduceti raza cercului');   {Afişează textul dintre apostroafe}ReadLn(Raza);WriteLn('Raza = ',Raza);   {Citeşte valoarea introdusă  de  la                                                        tastatură pentru variabila “raza” şi                                                        apoi tipăreşte această valoare}WriteLn('Aria     cercului este ',3.14*Raza*Raza:10:3); {Tipăreşte textul                                                        dintre apostroafe şi apoi valoarea                                                        rezultată, prin calculare directă, începînd cu                                                        coloana 10, spre stînga}WriteLn('Lungimea cercului este ',2*3.14*Raza:10:3); {La fel deasupra}WriteLn;                                          {Afişează un rînd gol}End.                                                {Sfirşitul programului}  Unit-ul Crt  

Page 21: Proiect Pascal

Unit-ul standard Crt (prescurtare de la Cathode Ray Tube) implementează un număr de subprograme axate spre aplicaţii în care ecranul este utilizat în mod caracter. Programele care utilizează aceste subprograme, trebuie să conţină directiva uses Crt .

Subprogramele unit-ului Crt pot fi clasificate astfel :Ø De interes generalØ Subprograme destinate gestiunii ferestrelorØ Subprograme orientate spre culoriØ Subprograme destinate generatorului de sunet şi a intensitaţii videoÎn accepţiunea unit-ului Crt, valorile “x” sau coloanele sînt numerotate

crescător, de la stînga la dreapta, iar valorile “y” sau liniilesînt numerotate crescător, de sus în jos. Un ecran cu coordonate normale are 80 de coloane şi 25 de linii. Citiri speciale de la tastatură Funcţia KeyPressed   

Funcţia “KeyPressed” returnează valoarea “True” dacă pe claviatură s-a apăsat o tastă sau “False” în caz contrar. Funcţia nu sesizează apăsarea tastelor “Shift, Alt, NumLock”. Se foloseşte în situaţiile în care se rulează o secvenţă de instrucţiuni pînă cînd este apăsată o tastă. În cazul în care această funcţie este reapelată, trebuie golit buffer-ul, utilizînd funcţia “ReadLn” fără parametri, altfel funcţia returnează “True” fără ca vreo tastă să fie apăsată. Programul următor (Prg_0003) aşteaptă apăsarea unei taste pentru a se opri. Program Functia_KeyPressed_Prg_0003;Uses Crt; Begin                                     {Începe programul}ClrScr;                                   {Şterge ecranul}Repeat                                  {Repetă secvenţa de instrucţiuni                                               cuprinsă între "Repeat" şi "Until"                                               cît timp "KeyPressed" este "True"}Write('Turbo Pascal');Until KeyPressed; {Afişează textul dintre apostroafe}End.    Funcţia ReadKey  

Page 22: Proiect Pascal

Funcţia “ReadKey” este de tip caracter, fără parametri formali şi returnează un caracter care s-a apăsat la tastatură. Caracterul tastat nu apare la ecran. Dacă în timpul funcţionării unui program, se ajunge la această instrucţiune, programul aşteaptă un timp nedeterminat, pînă se apasă o tastă. Program ReadKey_Prg_0004;Uses Crt; Varc:Char; BeginClrScr;                                             {Ştergerea ecranului}c:=ReadKey;                                  {Citirea caracterului tastat}If c=#0 Then c:=ReadKey;Case c Of                                       {Instrucţiune de selecţie multiplă}     #72:Write('Am apasat sageata sus');     #80:Write('Am apasat sageata jos');     #75:Write('Am apasat sageata stinga');     #77:Write('Am apasat sageata dreapta');Else Write('Nu am apasat tastele cu sageti');EndEnd. Program Prg_0005_ReadKey;Uses Crt;Varc:Char;                                            {Variabila "c" este de tip caracter}BeginClrScr;                                             {Şterge ecranul}c:=ReadKey;                                  {Aşteaptă să se apese o tastă}Write('Ai apasat o tasta');              {Afişează textul dintre apostroafe}End. Ferestre ecran  

O fereastră reprezintă o porţiune dreptunghiulară din ecran, în care se fac citiri şi scrieri de date. Dacă nu se declară nici o fereastră, atunci tot ecranul este fereastra implicită. În momentul în care avem declarate mai multe ferestre, numai una poate fi activă la un moment dat.

Deschiderea unei ferestre se face cu procedura :Window(C1,L1,C2,L2)

Page 23: Proiect Pascal

Perechile (C1,L1) şi (C2,L2) reprezintă coordonatele colţurilor din stînga sus şi dreapta jos. C1 şi C2 reprezintă coloanele iar L1 şi L2reprezintă liniile. Colţul din stînga sus al unei ferestre are coordonatele(1,1). Nu există o procedură prin care se închide o fereastră. Prin deschiderea unei ferestre, se închide fereastra anterioară, adică nu mai este activă. Pentru a activa din nou o fereastră, se folosesc iar procedurile Window, TextBackGround şi TextColor. Despre culori  

Culorile sînt obţinute prin amestecul a trei culori : Red (Roşu),Green (Verde) şi Blue (Albastru). Ele sînt codificate cu numere de la 0 la 15 sau cu constante simbolice reprezentînd denumirile în engleză a culorilor.

Unit-ul Crt lucrează în mod text. Ecranul văzut de noi dispune de 25 de linii şi 80 de coloane. Un caracter se afişează la intersecţia dintre o linie şi o coloană. În memoria video pentru fiecare caracter se utilizează doi octeţi, unul pentru a reţine codul caracterului şi unul pentru a reţineatributele grafice, adică culoarea fondului, culoarea caracterului şipîlpîirea.

Spaţiul de afişare a unui caracter are o culoare de fond (F), caracterul are o culoare de afişare (C) şi afişarea este continuă sau intermitentă (B = Blink). Informaţiile referitoare la atributele caracterului sînt reţinute într-un octet. Structura acestuia pe biţi este următoarea :BFFFCCCC. Cei patru biţi notaţi cu C reţin culoarea de afişare a caracterului. De aici rezultă că avem la dispoziţie 24 culori  adică 16, codificate de la 0 la 15. Culoarea de fond se reprezintă pe 3 biţi notaţi cuF, deci aem la dispoziţie 23 culori, adică 8, notate de la 0 la 7. Bitul Bindică afişarea continuă (valoarea 0) sau intermitentă (valoarea 1). 

Culorile Valoare Intensitate Roşu Verde Albastru

Black Negru 0 0 0 0 0Blue Albastru 1 0 0 0 1Green Verde 2 0 0 1 0Cyan Turcoaz 3 0 0 1 1Red Roşu 4 0 1 0 0Magenta Mov 5 0 1 0 1Brown Maro 6 0 1 1 0LightGray Gri Deschis 7 0 1 1 1

DarkGray Gri Închis 8 1 0 0 0LightBlue AlbastruDeschis 9 1 0 0 1LightGreen VerdeDeschis 10 1 0 1 0LightCyan Albast.Desc.Str 11 1 0 1 1LightRed RoşuDeschis 12 1 1 0 0LightMagenta MovDeschis 13 1 1 0 1Yellow Galben 14 1 1 1 0White Alb 15 1 1 1 1

Page 24: Proiect Pascal

  Procedura TextBackGround(culoare)  

Această procedură are un singur parametru formal şi anume culoarea. Culoarea poate fi dată în două moduri, şi anume : printr-o cifră de la 0 la 7 sau printr-un cuvînt în engleză, din tabelul de mai sus. Această formă de adresare a culorii este posibilă, deoarece în unit-ul Crt, numele culorilor sînt declarate drept constante cu valorile codurilor respective. Totuşi simpla ei apelare nu schimbă culoarea fondului. Culoarea fondului devine vizibilă în două cazuri :Ø După rularea procedurii ClrScrØ După scrierea efectivă în fereastră

Există posibilitatea ca fiecare text scris într-o fereastră să fie identificat prin propriile culori de fond şi de scriere a caracterelor. Din acest motiv, după execuţia acestei proceduri, fereastra activă nu capătă culoarea adresată. Procedura ClearScreen (ClrScr)  

Această procedură nu are parametri şi are următoarele efete :Ø Curăţă fereastra prin umplere cu spaţii goale (blancuri)Ø Atribuie întregii ferestre culoarea fondului declarată cu“TextBackGround”Ø Poziţionează cursorul în colţul din stînga sus. Procedura TextColor(culoare)  

Parametrul trebuie să conţină un număr cuprins între 0 şi 15 sau un cuvînt care exprimă această culoare, din tabelul de mai sus. Prin adăugarea constantei “Blink = 128” la culoarea scrisului, afişarea caracterelor este clipitoare. Program Prg_0006_Ferestre;Uses Crt;Varc:Char;                                            {Se declară variabila C pentru                                                        aşteptare} Begin                                              {Începutul programului}     TextBackGround(0);                          {Culoarea fondului este negru}     ClrScr;                                        {Se şterge ecranul}     Window(1,1,40,10);                  {Coordonatele ferestrei}     TextBackGround(1);                          {Culoarea fondului este albastru}     ClrScr;                                        {Se şterge ecranul}     TextColor(14);                           {Culoarea scrisului este galben}

Page 25: Proiect Pascal

     Write(' Fereastra nr. 1');         {Se afişează textul dintre apostroafe}     C:=ReadKey;                            {Se aşteaptă apăsarea unei taste}      Window(41,1,80,10);               {Coordonatele ferestrei}     TextBackGround(2);                {Culoarea fondului este verde}     ClrScr;                                        {Se şterge ecranul}     TextColor(4);                             {Culoarea scrisului este roşu}     Write(' Fereastra nr. 2');           {Se afişează textul dintre apostroafe}     C:=ReadKey;                            {Se aşteaptă apăsarea unei taste}      Window(1,11,80,25);               {Coordonatele ferestrei}     TextBackGround(3);                {Culoarea fondului este albastru deschis}     ClrScr;                                        {Se şterge ecranul}     TextColor(14);                           {Culoarea scrisului este galben}     Write(' Fereastra nr. 3');           {Se afişează textul dintre apostroafe}     C:=ReadKey;                            {Se aşteaptă apăsarea unei taste}End.                                                {Sfirşitul programului}  Program Prg_0007_Culorile_Fondului_si_Caracterelor;Uses Crt; BeginTextBackGround(0);TextColor(15);ClrScr;TextBackGround(0);TextColor(15);WriteLn(' Cod Fond = 0 (Black)       - Cod Culoare Caracter = 15 (White) ');�TextBackGround(1);TextColor(14);WriteLn(' Cod Fond = 1 (Blue)        - Cod Culoare Caracter = 14 (Yellow) ');�TextBackGround(2);TextColor(13);WriteLn(' Cod Fond = 2 (Green)   - Cod Culoare Caracter = 13 (LightMagenta) ');�TextBackGround(3);TextColor(12);WriteLn(' Cod Fond = 3 (Cyan)        - Cod Culoare Caracter = 12 (LightRed)');�TextBackGround(4);TextColor(11);WriteLn(' Cod Fond = 4 (Red)         - Cod Culoare Caracter = 11 (LightCyan)');�TextBackGround(5);TextColor(10);WriteLn(' Cod Fond = 5 (Magenta) - Cod Culoare Caracter = 10 (LightGreen) ');�TextBackGround(6);TextColor(9);WriteLn(' Cod Fond = 6 (Brown)       - Cod Culoare Caracter =  9 (LightBlue     ');�TextBackGround(7);TextColor(8);WriteLn(' Cod Fond = 7 (LightGray) - Cod Culoare Caracter =  8 (DarkGray      ');�

Page 26: Proiect Pascal

TextBackGround(0);TextColor(7);WriteLn(' Cod Fond = 0 (Black)       - Cod Culoare Caracter =  7 (LightGray     ');�TextBackGround(1);TextColor(6);WriteLn(' Cod Fond = 1 (Blue)        - Cod Culoare Caracter =  6 (Brown        ');�TextBackGround(2);TextColor(5);WriteLn(' Cod Fond = 2 (Green)       - Cod Culoare Caracter =  5 (Magenta       ');�TextBackGround(3);TextColor(4);WriteLn(' Cod Fond = 3 (Cyan)        - Cod Culoare Caracter =  4 (Red          ');�TextBackGround(4);TextColor(3);WriteLn(' Cod Fond = 4 (Red)         - Cod Culoare Caracter =  3 (Cyan         ');�TextBackGround(5);TextColor(2);WriteLn(' Cod Fond = 5 (Magenta)     - Cod Culoare Caracter =  2 (Green         ');�TextBackGround(6);TextColor(1);WriteLn(' Cod Fond = 6 (Brown)       - Cod Culoare Caracter =  1 (Blue         ');�TextBackGround(7);TextColor(0);WriteLn(' Cod Fond = 7 (LightGray)   - Cod Culoare Caracter =  0 (Black         ');�TextBackGround(11);TextColor(1+Blink);{Se adaugă la culoarea scrisului                                                                  constanta "Blink" = 128}WriteLn('Text Clipitor'); End. Variabila TextAttr 

Page 27: Proiect Pascal

 Variabila “TextAttr” este de tip “byte” şi memorează atributele

caracterelor. Informaţiile de culoare sînt codificate în felul următor :BFFFCCCC. De aceea formula de calcul a atributelor unui caracter este următoarea :TextAttr:=CulScris+16*CulFond+Blink   Procedura GoToXY   

Este folosită la poziţionarea cursorului în interiorul ferestrei active.GoToXY(C,L);C şi L reprezintă coordonatele relative la fereastra activă, adică coloana şi linia. În cazul coordonatelor care nu se încadrează în mărimea ferestrei, procedura nu are efect.GoToXY(5,7); - Poziţionează cursorul pe coloana 5 din linia 7. Procedurile WhereX şi WhereY  

Aceste proceduri sînt folosite pentru a determina poziţia curentă a cursorului.WhereX – returnează abcisa    cursorului curent, adică numărul coloanei.WhereY – returnează ordonata cursorului curent, adică numărul liniei. Program Prg_0008_GoToXY_si_Where; 

Page 28: Proiect Pascal

Uses Crt;BeginClrScr;                                             {Se şterge ecranul}GoToXY(10,5);                              {Se mută cursorul pe col. 10 şi Lin.5}Write(' � Coloana 10,Linia 5');         {Se afişează textul dintre apostroafe}WriteLn;                                          {Se afişează un rînd gol}WhereX;WhereY;                          {Se află coordonatele X şi Y ale                                                        cursorului}WriteLn(WhereX);WriteLn(WhereY);       {Se afişează coordonatele cursorului}End.  Procedura ClrEol  

Pornind de la poziţia actuală a cursorului, procedura “ClrEol”şterge toate caracterele pînă la sfîrşitul liniei. Poziţia cursorului nu este modificată. Program Prg_0009_ClrEol; Uses Crt;BeginClrScr;                                             {Se şterge ecranul}Write('Turbo Pascal 7.0');                      {Se afişează textul dintre apostroafe}ReadKey;                                       {Se aşteaptă apăsarea unei taste}

Page 29: Proiect Pascal

GoToXY(18,1);                              {Se mută cursorul pe col. 18 si Lin. 1}Write('este un limbaj de programare'); {Se afişează textul dintre apostroafe}ReadKey;                                       {Se aşteaptă apăsarea unei taste}GoToXy(18,1);                               {Se mută cursorul pe col. 18 si Lin. 1}ReadKey;                                       {Se aşteaptă apăsarea unei taste}ClrEol;                                             {Se şterg caracterele de la dreapta                                                        cursorului}ReadKey;                                       {Se aşteaptă apăsarea unei taste}End. Procedura InsLine   

Procedura “InsLine” inserează o linie goală la poziţia cursorului. Liniile situate dedesuptul cursorului vor defila în jos cu o linie şi ultima linie iese de pe ecran. Program Prg_0010_InsLine; Uses Crt;BeginClrScr;                                             {Se şterge ecranul}WriteLn;                                          {Se afişează un rînd gol}WriteLn('Turbo Pascal 7.0');           {Se afişează textul dintre apostroafe}GoToXY(1,1);                                {Se mută cursorul pe col. 1 si Lin. 1}

Page 30: Proiect Pascal

ReadKey;                                       {Se aşteaptă apăsarea unei taste}InsLine;                                           {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}InsLine;                                           {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}InsLine;                                           {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}End. Procedura DelLine  

Procedura “DelLine” şterge toată linia la care se află cursorul. Liniile situate dedesuptul cursorului, vor defila în sus cu o linie. Linia aflată la bază, va fi vidă. Program Prg_0011_DelLine;

Page 31: Proiect Pascal

 Uses Crt;BeginClrScr;                                             {Se sterge ecranul}GoToXY(1,25);                              {Se mută cursorul pe col. 1 şi Lin. 25}WriteLn('Turbo Pascal 7.0');           {Se afişează textul dintre apostroafe}GoToXY(1,1);                                {Se mută cursorul pe col. 1 şi Lin. 1}ReadKey;                                       {Se aşteaptă apăsarea unei taste}DelLine;                                          {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}DelLine;                                          {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}DelLine;                                          {Se inserează un rînd gol}ReadKey;                                       {Se aşteaptă apăsarea unei taste}End.

Page 32: Proiect Pascal

 Variabila CheckBreak 

Variabila predefinită CheckBreak este de tip boolean şi validează sau invalidează testarea întreruperii Ctrl-Break. Dacă variabila este iniţialiată cu true, atunci prin apăsarea simultană a tastelor Ctrl-Break se opreşte programul. Dacă variabila este iniţializată cu false, atunci apăsarea simultană a tastelor Ctrl-Break nu are nici un efect. Valoarea implicită a variabilei este true.Exemplu : CheckBreak:=True; Variabila CheckEof 

Variabila predefinită CheckEof este de tip boolean şi validează sau invalidează caracterul de sfîrşit de fişier. Dacă variabila este iniţializată cu true, atunci prin apăsarea simultană a tastelor Ctrl-Z, se generează un caracter sfîrşit de fişier în timpul citirii dintr-un fişier asignat ecranului. Dacă variabila este iniţializată cu false, apăsarea simultană a tastelor Ctrl-Z nu are nici un efect. Valoarea implicită a variabilei este true.Exemplu : CheckEof:=True; Variabila DirectVideo 

Variabila predefinită DirectVideo este de tip boolean şi validează sau invalidează accesul direct la ecran pentru operaţiile Write şi WriteLncare afişează pe ecran. Dacă variabila este iniţializată cu true, procedurileWrite şi WriteLn, la fişierele asociate cu Crt, vor memora caracterele direct în memoria video, şi nu vor apela BIOS-ul pentru această afişare. Dacă variabila este iniţializată cu false, toate caracterele vor fi scrise prin apelul BIOS-ului şi deci procesul va fi mult mai lent.