Sunteți pe pagina 1din 29

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. ).


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.
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
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


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.


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ã.
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 )
= , > , < ,<= , >= , <> , ş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`);


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.
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
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
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.
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,
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 :
- 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,


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

begin
writeln('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;
begin
clrscr;
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


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ă 1234567890
Write(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.
WriteLn('Vornicescu Silviu'); Afişează textul dintre apostroafe şi mută
cursorul la începutul liniei următoare.
Textul este aliniat la stînga.
Listingul programului Prg_0001
program 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}
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
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
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;

Var
c:Char;

Begin
ClrScr; {Ş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');
End
End.

Program Prg_0005_ReadKey;
Uses Crt;
Var
c:Char; {Variabila "c" este de tip caracter}
Begin
ClrScr; {Ş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)
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 0
Blue Albastru 1 0 0 0 1
Green Verde 2 0 0 1 0
Cyan Turcoaz 3 0 0 1 1
Red Roşu 4 0 1 0 0
Magenta Mov 5 0 1 0 1
Brown Maro 6 0 1 1 0
LightGray Gri Deschis 7 0 1 1 1
DarkGray Gri Închis 8 1 0 0 0
LightBlue AlbastruDeschis 9 1 0 0 1
LightGreen VerdeDeschis 10 1 0 1 0
LightCyan Albast.Desc.Str 11 1 0 1 1
LightRed RoşuDeschis 12 1 1 0 0
LightMagenta MovDeschis 13 1 1 0 1
Yellow Galben 14 1 1 1 0
White Alb 15 1 1 1 1
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;
Var
c: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}
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;

Begin
TextBackGround(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 ');
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

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;

Uses Crt;
Begin
ClrScr; {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;
Begin
ClrScr; {Se şterge ecranul}
Write('Turbo Pascal 7.0'); {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}
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;
Begin
ClrScr; {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}
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;

Uses Crt;
Begin
ClrScr; {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.

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.

S-ar putea să vă placă și