Sunteți pe pagina 1din 367

Fundamentele

limbajelor de
programare
Suport de curs:
Autor: Lect. univ. dr. Horea Oros
Universitatea din Oradea
Departamentul de Matematic i Informatic
PP - Definiie
n PP este o paradigm de programare
bazat pe conceptul de apel de procedur.
(rutin, subrutin, metod,funcie)
n P = o serie de pai computaionali care
trebuie parcuri.
n Orice P poate fi apelat oriunde n timpul
execuiei unui program inclusiv din
interiorul ei (apel recursiv).
Beneficii PP
n Refolosirea codului
n Controlul execuiei este mai simplu (nu e
nevoie de GOTO, JUMP care duc la
spaghetti code)
n Programul devine modular i structurat
Definiii
n Limbaj de programare: notaie sistematic
prin care este descris un proces de calcul
n Procesul de calcul este constituit dintr-o
mulime de pai pe care o main i
execut pentru a rezolva o problem
n Limbaj main: limbajul nativ al unui
computer
Limbaj main
n Operaii aritmetice i logice,
n Operaii de intrare-ieire
n Funcii speciale, funcii de control
n Strns legat de arhitectur
0000101011110000
0010111111111111
0010000000000101
Limbaj de asamblare
n Atribuie nume simbolice (mnemonici)
codificrilor operaiilor mainii i locaiilor de
memorie asociate
LOAD I
ADD J
STORE K

K := I + J
Niveluri ale limbajelor
n Limbaje de nivel sczut (lb. main, asm)
n Limbaje de nivel nalt (C, C++, C# etc.)
n Traducerea este realizat de translatoare
(compilator, asamblor)
n Traducerea duce la scderea performanei
n Lb. nivel nalt portabilitate
Paradigme de programare
n Colecii individualizate de caracteristici de
evaluare i criterii de abstractizare care
determin i difereniaz clasele de
limbaje de programare
n Criterii:
structuraprogramului
noiunea de stare a execuiei
metodologia programrii
Paradigme de programare
1. Programare nestructurat (GOTO)
2. Programare structurat
3. Programarea procedural (ALGOL60)
4. Programare funcional (Lisp, Miranda,
ML, Haskell)
5. Programare imperativ
Paradigme de programare
6. Programare declarativ (Prolog, Haskell, SQL,
WSDL)
7. Programare logic (Prolog)
8. Programare bazat pe obiecte i orientat pe
obiecte (Smalltalk, C++, Java, C#)
9. Programare concurent i distribuit
10. Programare la nivelul bazelor de date (SQL)
Generaii de limbaje
n 1954-1958 Limbajele de programare de
prima generaie (FORTRAN I, ALGOL 58).
n Acestea au fcut pasul decisiv de la asm
la lb de nivel nalt.
n Rolul lor primordial a constat n
promovarea i dezvoltarea conceptelor ce
stau la baza limbajelor de programare de
nivel nalt precum i a implementrii lor.
Generaii de limbaje (cont.)
n 1959-1961 Limbaje de generaia a doua
(ALGOL60, FORTRAN II, Cobol, Lisp)
n Sunt considerate limbaje stabile, durabile,
ALGOL60 a avut o influen imens n
dezvoltarea limbajelor Pascal, PL/1,
Simula i Ada.
Generaii de limbaje (cont.)
n 1962-1971 Limbaje de generaia a treia (PL/1,
ALGOL68, Pascal, Simula)
n au reprezentat un pas nainte,
n succesul lor nu se poate compara cu cel al limbajelor de
generaia a doua.
n C.A.R. Hoare ALGOL60 reprezint un pas nainte fa
de succesorii(!) si.
n Limbajul PL/1 a combinat elemente de FORTRAN,
ALGOL i Cobol rezultnd un limbaj puternic, dar mult
prea complex, dificil de nvat i de implementat.
n Limbajul Pascal, succes din punct de vedere didactic, nu
a fost considerat suficient de robust pentru utilizarea la
scar industrial. (Delphi)
Generaii de limbaje (cont.)
n 1972-1979 Limbaje de generaia a patra (CLU, CSP,
Ada, Smalltalk)
n Au avut o rspndire i mai redus dect cele de
generaia a treia, justificnd pe bun dreptate denumirea
acestei perioade drept gol de generaie (generation
gap).
n accentul cade pe structurare.
La nivel micro acest lucru s-a fcut prin eliminarea instruciunilor
goto
la nivel macro s-a pus mare accent pe modularizare,
abstractizarea datelor
Generaii de limbaje (cont.)
n 1980-1990 Paradigme ale limbajelor de
programare
n Aceast perioad se caracterizeaz printr-
o intens activitate de cercetare,
concentrat pe studiul paradigmelor
asociate claselor de limbaje.
n limbaje funcionale, logice, orientate obiect
i distribuite
Istoria lb. de programare
n Primul limbaj
Ada Lovelace scrie programe pentru proiectul
motor diferenial al lui Charles Babbage iar
mai apoi pentru motorul analitic. n 1945,
germanul K. Zuse, inventatorul calculatorului
Z3 a definit un limbaj evoluat pentru acest
motor (folosind tablouri i nregistrri)
Istorie (cont.)
n Asamblare
Asambloarele au aprut o dat cu primele
calculatoare. Acestea asociaz un nume simbolic
codului la nivel main, de ex: Add bx, 4
cmp [adr], 3
jmp address
n Programarea n limbaj de asamblare nu se mai
practic pe scar larg, nici mcar pentru rutine
ce trebuie s ruleze foarte rapid.
Istorie (cont.)
n FOTRAN FORmula TRANslator
1954-1958John Backus i ali cercettori de la
IBM
Limbaj dedicat calculelor matematice
n Fortran II (1958) introduce subrutine,
funcii, bucle, o structur de control
primitiv de tip FOR. Identificatorii sunt
limitai la ase caractere
Istorie (cont.)
n LISP LISt Processing
1958-1960 Mac Carthy
Limbaj funcional pentru procesarea listelor.
Este recursiv, nu este iterativ.
Nu exist diferen ntre cod i date.
Istorie (cont.)
n ALGOL - 1960 / Algol W - 1966 / Algol 68
ALGOrithmic Language
limbaj universal independent de main
Introduce utilizarea gramaticilor BNF (Backus Naur
Form)
blocurile de instruciuni i variabilele locale n cadrul
unui bloc
Recursivitatea, tablouri dinamice
instruciunea IF THEN ELSE, FOR, simbolul := pentru
atribuire (folosit mai apoi n Pascal), instruciunea
SWITCH cu GOTO, indicatori BEGIN, END i ciclu
WHILE
Istorie (cont.)
n Cobol - 1960
COmmon Business Oriented Langage.
Definit de CODASYL,
COnference on DAta SYsystems Languages.
Istorie (cont.)
n Basic 1964
Beginners All-purpose Symbolic Instruction Code
John Kemeny, Thomas Kurtz
Uor de nvat
Bill Gates, Paul Allen, QuickBasic Altair (4KB)
Microcomputerele au fost furnizate cu Basic n ROM
pn la sfritul anilor 80.
n 1977, Appel II se vindea cu Basic
Primul PC de la IBM (1981) folosea sistemul de
operare MS-DOS de la Microsoft i Basic interpretat
(Basica).
n 1982 Microsoft a produs primul Basic compilat
(Quick Basic)
Istorie (cont.)
n Logo 66
W Fuerzeig, S Papert,
Folosit pentru a-i nva pe copii programare.
Asemntor cu Lisp
Se bazeaz pe micarea unei broate
estoase pe ecran.
Istorie (cont.)
n Pascal 1970 Niklaus Wirth.
A fost proiectat pentru a simplifica crearea
compilatoarelor i pentru ndruma procesul de
nvare a programrii spre programarea structurat.
Includea un mediu pentru dezvoltare de aplicaii
complet, un principiu folosit cu succes mai trziu n
Turbo Pascal. n 1981, jocul Wizardry scris n Pascal
a avut un succes foarte mare pe Apple.
Turbo Pascal (proiectat de Anders Hejlsberg) a
aprut n 1983. Rapid, IDE complet -> succes
instantaneu.
Structurile de control asemntoare cu cele din C.
Istorie (cont.)
n C 1973 succesorul lui B, care la rndul lui este
succesorul lui BCPL (Dennis Ritchie).
n A fost destinat pentru programarea sistemului de
operare UNIX,
n Portabil i rapid
n Declaraiile int i, char b au fost create n C.
n Ulterior au aprut i alte tipuri.
n Limbajul C a simplificat scrierea prin folosirea acoldelor.
n ++ exista i n limbajul B.
n Cuvntul include venea din PL/1.
n Preprocesorul a fost implementat n 1973 i din acel
moment limbajul C a fost folosit pentru scrierea
sistemului de operare Unix. Limbajul a evoluat pn n
1980.
Istorie (cont.)
n Sql - 1970+
Standard Query Language
IBM Limbaj pentru interogarea bazelor de
date relaionale.
n SELECT * from table where ...
n INSERT INTO ....

n UPDATE ...
Istorie (cont.)
n C++ 1981-1986 Bjarne Stroustrup.
Versiune a limbajului C orientat pe obiecte.
Introduce suprancrcarea operatorilor.
Metodele pot fi inline.
Implementat motenirea i abloanele (clase
sau funcii generice).
Polimorfismul prin funcii virtuale
Istorie (cont.)
n Java 1994 James Gosling,
Sun Microsistems Proiectat n 1991 ca un limbaj
interactiv numit Oak.
La vremea respectiv nu a avut succes.
n 1994 a fost rescris pentru Internet i redenumit
Java.
n 1995 se puteau crea applet-uri.
n ianuarie 1996, Javasoft distribui JDK 1.0.
Se compileaz n bytecode JVM.
Este mai simplu dect C++: memoria este gestionat
automat,
nu exist pointeri, motenire multipl,
suprancrcarea operatorilor dar include multi-tasking.
Istorie (cont.)
n PHP 1995 Personal Home Pages Hypertext
Processor
Rasmus Lerdorf Limbaj script mutliplatform, ce se
include n HTML.
Asemntor cu C dar nu este tipizat.
Variabilele se prefixeaz cu $.
Interpretorul prelucreaz pagina html ce include
instruciuni php i o transform ntr-o pagin html
pur.
Biblioteca de funcii permite crearea de pagini web
dinamice.
Microsoft folosete ASP (asemntor cu Basic)
Istorie (cont.)
n UML - 1996 Unified Modeling Language
Standard (Object Management Group)
Grady Booch, Jim Rumbaugh, and Ivar Jacobson
Uml reprezint reunirea a trei limbaje de modelare
proiectate de cei trei autori.
folosete o notaie grafic pentru a proiecta software.
Se fac diagrame care exprim obiecte i interaciunile
dintre acestea.
Un model este realizat din vizualizri i combinarea
lor descriu un sistem complet.
Este limbaj pentru specificarea, vizualizarea,
construirea i documentarea proiectelor sotware
intense.
Istorie (cont.)
n C# - 2000(C-sharp), succesor al C++?
Anders Hejlsberg / Microsoft.
Principalul limbaj din platforma .NET
mbuntiri: garbage collector, nu are pointeri,
interfee, multi-tasking
Varietate de limbaje ce pot fi compilate n MSIL
Structurile sunt speciale fiind transmise prin valoare
Identificatorii sunt obiecte cu metode
Atributele sunt obiecte descriptive ataate
elementelor programului i folosite la execuie
Proprieti (get/set)
Foreach pentru parcurgerea unor liste de obiecte
Delegai (nlocuiesc pointerii la funcii din C)
Programare
procedural
Procesul de creare a software-ului

Curs 2
Procesul de creare a soft-ului

n Limbaj de programare = instrument pentru


scrierea de programe
n Limbaj de programare = component a
procesului de creare a software-ului
n Realizarea unui nou limbaj este structural
identic cu realizarea unei aplicaii
software complexe
Fazele procesului de creare a
software-ului
n Analiza i specificarea cerinelor
n Proiectarea i specificarea software-
ului
n Implementarea
n Certificarea
n ntreinerea
Analiza i specificarea cerinelor
n O aplicaie software este conceput pentru a veni n
sprijinul unui anumit grup de utilizatori poteniali.
n Cerinele - stabilite sub forma unui document ce
precizeaz CE trebuie s fac aplicaia i nu CUM.
n La elaborarea documentului particip att potenialii
utilizatori, ct i specialitii n dezvoltarea de software.
n Documentul conine specificaii privind manualele
utilizator, studii de cost i fezabilitate, cerine privind
performanele
Proiectarea i specificarea
software-ului
n De la cerinele specificate n faza precedent, echipa
care realizeaz aceast etap (proiectanii software)
realizeaz specificaiile de proiectare,
n Se identific
fiecare modul al sistemului,
interferenele dintre module.
n Metodologia de proiectare utilizat n aceast faz are o
mare importan pentru alegerea limbajului de
programare utilizat n faza imediat urmtoare.
Implementarea
n Singura faz n care se utilizeaz explicit un
limbaj de programare.
n Implementarea
scrierea de uniti de program corespunztoare
modulelor descrise n specificaiile de proiectare
editarea documentaiei corespunztoare.

n Rezult un sistem implementat i documentat


complet.
Certificarea
n Verificarea cerinelor impuse n prima etap
n Se realizeaz prin testarea sistemului n raport
cu fiecare cerin specificat, utilizndu-se o
baterie de teste,
n Din punctul de vedere al testrii, nu se poate
face o distincie clar ntre fazele 3 i 4.
n n faza de implementare se realizeaz testarea
la nivel de modul, efectuat de fiecare
programator i parial testarea interfeelor inter-
module (testare de integrare),
Certificarea (cont.)
n Se realizeaz testarea sistemului, care
verific sistemul n ansamblul su.
n Rezultatul acestei faze este un sistem
verificat i certificat complet, livrabil
utilizatorilor.
n n aceast faz se includ toate activitile
care sunt legate de verificarea
corectitudinii programelor scrise
ntreinerea
n Modificri, provocate fie de detectarea
unor erori care au scpat din faza 4,
n Adugarea de noi specificaii (cerine).
n Costul ntreinerii unei aplicaii ntrece
costul tuturor celorlalte faze luate
mpreun.
Cerine pentru un produs
software
n Fiabilitate
n ntreinere uoar
n Execuie eficient
Aspecte ale calitii software-ului

n Programele: fiabile, rapide, uor de


folosit, lizibile, modulare, structurate
n Calitatea produselor program se definete
ca o compunere a mai multor trsturi.
n Exist o serie de factori externi i factori
interni
Factori externi - interni
n Factorii externi de calitatea sunt sesizai
de cei care interacioneaz direct cu
produsul final i care cumpr produsul,
contracteaz dezvoltarea i ntreinerea
lui.
n Factorii interni de calitate se pot detecta
doar de ctre persoanele implicate n
procesul de dezvoltare de software.
Factorii externi
n Corectitudinea (abilitatea produsului de a
executa exact sarcinile sale, n
conformitate cu cerinele)
n Robusteea (abilitatea sistemului de a
funciona chiar i n condiii anormale)
n Fiabilitate = corectitudine+robustee
Factorii externi (cont.)
n Extensibilitatea (uurina cu care
produsele software se pot adapta la
schimbri ale specificaiilor) simplitate +
descentralizare
n Reutilizabilitatea
n Compatibilitatea (uurina cu care
produsele software pot fi combinate)
Factorii externi (cont.)
n Eficiena (folosirea raional a resurselor
hardware)
n Portabilitatea (uurina cu care se pot
transfera n diverse medii hard i soft)
n Verificabilitatea
Factorii externi (cont.)
n Integritatea (abilitatea produselor software
de a-i proteja componentele - programe,
date, documente - fa de accesri i
modificri neautorizate)
n Uurina n utilizare (nvarea utilizrii
sistemului, operarea, pregtirea datelor de
intrare, interpretarea rezultatelor i
recuperarea din situaii de eroare)
Factori interni
n Modularitatea: structural produsul program
trebuie s fie alctuit din module,
urmrindu-se principiul descentralizrii.
n Documentarea complet: presupune
existena unei documentaii clare i adus
la zi pentru fiecare faz din ciclul de via
al programului.
Caliti ale limbajelor de
programare
n S permit o descriere ct mai natural a
problemei care se rezolv, permind
programatorului s se concentreze asupra
problemei i nu asupra detaliilor de adresare,
indexare etc.
n S aib un grad de lizibilitate ct mai ridicat,
adic un program s poat fi uor de descifrat
(sintactic i semantic) de oricine l consult.
n S permit gestiunea excepiilor (depiri
aritmetice, erori de intrare-ieire etc.)
Microsoft Solutions Framework
(MSF)
n Un set de modele, principii i linii
directoare pentru proiectarea i
dezvoltarea aplicaiilor de dimensiuni mari
ntr-un mod care asigur faptul c toate
elementele unui proiect (oameni, procese,
unelte) pot fi gestionate corespunztor.
n Practici pentru planificarea, proiectarea,
dezvoltarea i lansarea soluiilor
Modele de proces
n Modelul Cascad
n Modelul Spiral
n Modelul MSF
Modelul cascad
n Exist puncte de tranziie i evaluare
n Trebuie terminat o faz nainte de a
trece la alta
n Cerinele trebuie s fie definite foarte
Milestone clar
n Se poate monitoriza evoluia
Milestone

Milestone

Milestone
Modelul Spiral
n Se bazeaz pe rafinarea continu a
cerinelor i a diferitelor estimri asupra
proiectului
n Util la aplicaii mici ce trebuie fcute
repede
n Nu exist puncte de control foarte clare
n Procesul de dezvoltarea poate deveni
haotic
Modelul MSF
n Bazat pe faze
n Are puncte de control i trecere
n Iterativ
n Poate fi folosit pentru dezvoltarea oricrui
tip de aplicaie
n Combinaie ntre modelul cascad i
spiral
Faze ale modelului de proces MSF

n Envisioning
n Planning
n Developing
n Stabilizing
n Deploying
Triunghiul compromisurilor

Resurse Deadline

Funcionalitate
Programare
procedural
Elemente lexicale i de sintax ale
limbajelor de programare

Curs 3

Programare procedural 1
Limbaj de programare,
program surs
n Un limbaj de programare = un instrument
cu care se poate exprima un proces de
calcul
n Program surs = nivelul virtual al
abstractizrii problemei de rezolvat

Programare procedural 2
Procesul de traducere
n Pentru ca maina (calculatorul) s poat
rezolva problema, aceasta trebuie
exprimat n termenii limbajului mainii
respective
n Nivelul fizic al abstractizrii va fi atins prin
intermediul unui proces de traducere.

Programare procedural 3
Rezolvarea unei probleme cu
calculatorul
n formalizarea problemei i exprimarea ei
ntr-un limbaj de programare. (definire,
specificare, analiz, proiectare i
implementare). Rezultatul obinut este
programul surs. (omul)
n traducerea programului surs ntr-un
program executabil pe calculator i
execuia acestuia. (maina)

Programare procedural 4
Limbaje de programare

n Setul de caractere
n Elementele lexicale i de sintax ale
unui limbaj
n Traducerea programelor (analiza
sintactic i semantic)

Programare procedural 5
Setul de caractere
n LP sunt bazate pe un anumit alfabet de
caractere
n Alfabetul este folosit pentru a construi cuvinte
sau simboluri, care formeaz vocabularul sau
lexicul limbajului
n Alfabet = a...z, A...Z, 0...9, caractere speciale
n ASCII, ASCII extins, EBCDIC, Unicode.

Programare procedural 6
Elementele lexicale ale unui
limbaj
n Program = secven de atomi lexicali (tokens) i
separatori
n Atom lexical = cea mai mic unitate sintactic ce
are un neles de sine stttor ntr-un context
precizat
n Analiza lexical =faz a procesului de analiz a
programului surs care are ca scop identificarea
atomilor lexicali din care este compus programul
respectiv

Programare procedural 7
Categorii de atomi lexicali
n simboluri speciale
n identificatori
n etichete
n literali
n (separatorii nu sunt considerai atomi lexicali)

Programare procedural 8
Exemplu
n i f ( a > b ) x= x+ 1 e ls e y = " He l lo !" ;
identificatori: i f , a , b , x , e l s e , y
simboluri speciale: ( , ) , > , = , +
literali: 1 , " H e l l o ! "

Programare procedural 9
Separatori
n Separatorii uzuali (spaiile albe)
n Comentariile:
Text /*...*/
Linie //
Alte limbaje { }
HTML <!-- ... -->
n (Sunt ignorate n procesul de analiz lexical )

Programare procedural 10
Identificatori, cuvinte cheie i rezervate

n Identificator = secven arbitrar de litere,


cifre i underscore din alfabetul limbajului,
din care primul caracter este liter sau
underscore
n Lungime a identificatorului = numrul de
caractere din secven (unele limbaje
stabilesc limite, altele depind de
implementare)

Programare procedural 11
Identificatori, cuvinte cheie i rezervate
(cont.)

n Case sensitive = se face diferena ntre


literele mari i mici (C, C++, Java)
n Case insensitive (Pascal, Modula-2,
FORTRAN)
n n C cuvintele rezervate se scriu numai cu
litere mici (if, else, while, for etc.)

Programare procedural 12
Identificatori
n Predefinii = precizai n definiia limbajului
cuvinte cheie (au un neles explicit ntr-un
context precizat. De ex. n FORTRAN
cuvintele cheie o anumit semnificaie doar
ntr-un anumit context)
cuvinte rezervate = se folosesc doar n scopul
pentru care au fost definite indiferent de
context
n Definii de utilizator
Programare procedural 13
Identificatori definii de utilizator

n Nume de variabile, Constante


n Proceduri, Funcii, Metode
n Clase, Tipuri de date definite de utilizator
n Obiecte, Proprieti
n Evenimente, Delegai

Programare procedural 14
Cuvinte cheie C
auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

Programare procedural 15
Simboluri speciale
n Simbolurile speciale (numite i operatori
sau semne de punctuaie, delimitatori) au
o semantic bine precizat.
n n unele limbaje se pot folosi doar conform
definiiei lor
n n alte limbaje semantica se poate extinde,
prin ceea ce se numete suprancrcarea
operatorilor.

Programare procedural 16
Simbolurile speciale n C
n Operatori sau semne de punctuaie: ! % ^
&*()-+={}|~[]\;:<>?,./
n Operatori (fiecare considerat un singur
token): -> ++ -- << >> <= >= == != && || *=
/= %= += -= <<= >>= &= ^= |=
n Tokeni folosii de preprocesor: #

Programare procedural 17
Literali (ad-litteram?)
n Literal = o valoare constant de tip
numeric sau caracter.
n Constante:
numerice (ntregi i reale)
caracter
ir de caractere
n Constante constante simbolice!

Programare procedural 18
Literali din limbajul C
n Literal::= constant ntreag | constant-
caracter | constant-flotant | literal ir de
caractere (BNF)
n Constant ntreag = iruri de cifre
Zecimal (123, -234, 1u, 1U)
Octal (0564)
Hexazecimal (0xFA2E, 0X1AB4)

Programare procedural 19
Literali din limbajul C (cont.)
n Constant caracter = unul sau mai multe
caractere incluse ntre apostroafe (a, 1)
Tipul= char
Valoarea = valoarea codului ASCII al
caracterului
n Constante caracter predefinite (secvene
escape)

Programare procedural 20
Secvene escape
Caracter ASCII secvena escape
NL new line \n
HT tab orizontal \t
VT tab vertical \v
BS backspace \b
CR carriage return \r
FF form feed \f
BEL bell \a
\ \\
? \?
\
nr. octal \ooo
nr. hexa \xhh
Programare procedural 21
Constante reale
n Constantele reale au
parte ntreag,
marc zecimal,
parte fracionar,
marc exponent (e sau E)
exponent ntreg cu semn.
n Tipul lor este implicit double, care poate fi modificat
printr-un sufix (F sau f float, L sau l long double).
n Partea ntreag sau partea fracionar pot lipsi (dar nu
ambele),
n Pot lipsi i marca zecimal sau marca exponenial (nu
ambele).

Programare procedural 22
Constantele ir de caractere
n Constantele ir de caractere = unul sau mai
multe caractere incluse ntre ghilimele.
n Tipul char[]
n Clasa de memorie static.
n Reprezentarea unui ir de caractere se face pe
n+1 octei, ultimul octet coninnd caracterul
NULL (cu codul ASCII 0).
n null-terminated strings.

Programare procedural 23
Elemente de sintax
n Succesiunile de cuvinte = propoziii sau
instruciuni
n Sintaxa unui LP = un ansamblu de reguli
prin care se determin dac o anumit
instruciune este corect alctuit sau nu.

Programare procedural 24
Elemente de sintax (cont.)
n Sintax abstract: identific rolul componentelor
fiecrei construcii; descrierile de limbaj i
implementrile sunt organizate n jurul sintaxei
abstracte.
n Sintaxa concret (lexical): prezint modul de
scriere a construciilor limbajului, coninnd
detalii relativ la plasarea cuvintelor cheie i a
semnelor de punctuaie.

Programare procedural 25
Elemente de sintax (cont.)
n La aceeai sintax abstract i corespund
sintaxele concrete:
WHI LE x < >A[ i] DO
i := i - 1
END
i
whi le (x != A[i ]) i = i - 1 ;

Programare procedural 26
Moduri de descriere a sintaxei
n BNF (Backus-Naur Form)
n grafele de sintax
n gramatici (limbaje formale)
n automate (limbaje formale)

Programare procedural 27
Programare
procedural
Traducerea programelor
Curs 4

Programare procedural 1
Limbaj de programare,
program surs
n Translator = program ce traduce un
program surs (PS), scris ntr-un anumit
limbaj de programare (LP) ntr-un program
echivalent exprimat ntr-un alt limbaj, pe
care l vom numi program destinaie (PD).

Programare procedural 2
Translatoare
n Compilatoarele,
n Asambloarele
n Interpretoarele

Programare procedural 3
Compilatoare - asambloare
n La compilator PD se numete program
obiect sau cod obiect (apropiat de codul
main)
n Asamblorul este compilatorul unui limbaj
de asamblare
n Traducerea este urmat de link-editare

Programare procedural 4
Link-editarea
n Faz n care se produce codul executabil
prin legarea codului obiect (rezultat din
traducere) cu alte module obiect (rezultate
din compilri anterioare sau existente n
biblioteci).

Programare procedural 5
Interpretor
n Realizeaz execuia instruciune cu
instruciune a programului surs

Programare procedural 6
Preprocesor - macroprocesor
n Traduc PS din limbaje de nivel nalt n PD
scrise tot n limbaje de nivel nalt,
compilabile.
n De ex. preprocesorul C #include...

Programare procedural 7
Cross-compilatoarele
Cross-asambloarele
n Se execut pe un calculator gazd i
genereaz cod obiect pentru o alt main
obiect
n Exemplu - maina gazd minicalculator
sau calculator mare, iar maina obiect
este un microcalculator cu memorie mic,
pe care nu se poate implementa
programul de traducere)

Programare procedural 8
Compilarea
n Compilatorul este un program complex, a
crui realizare presupune abordarea
sistematic a procesului de traducere.
n n procesul de compilare, PS sufer un ir
de transformri n cascad, din ce n ce
mai apropiate de codul obiect

Programare procedural 9
Operaii ale compilatorului
n Analiza textului surs
n Sinteza codului obiect

Programare procedural 10
Structura unui compilator
ANALIZ SINTEZ

Program Cod
ir de atomi Arbore Cod intermediar
surs intermediar
lexicali sintactic optimizat
Analiz Analiz Analiz Optimizare Generare Cod obiect
lexical sintactic semantic de cod de cod

Tratarea erorilor Gestiunea tabelelor

Programare procedural 11
Analiza lexical
n Realizeaz prima parcurgere a PS
(considerat ca ir de caractere), grupnd
aceste caractere n sub-iruri, numite
atomi lexicali: cuvinte cheie sau rezervate,
operatori, constante, identificatori,
separatori.

Programare procedural 12
Analiza sintactic
n Depisteaz n irul atomilor lexicali
structuri sintactice: expresii, liste,
instruciuni, proceduri, genernd arborele
sintactic (arborele de derivare), care
descrie relaiile dintre aceste structuri (de
incluziune, de separare).

Programare procedural 13
Analiza semantic
n folosete arborele sintactic pentru extragerea de
informaii privind apariiile obiectelor purttoare de date
din PS (tipuri de date, variabile, proceduri, funcii) i
pentru verificarea consistenei utilizrii lor.
n Pe msura parcurgerii arborelui sintactic, se genereaz
codul intermediar (ir de instruciuni simple, cu format
fix, n care: codurile operaiilor sunt asemntoare cu
codurile main corespunztoare, ordinea operaiilor
respect ordinea execuiei, iar operanzii sunt
reprezentai sub forma variabilelor din PS i nu sub
form de registre sau adrese de memorie.

Programare procedural 14
Optimizarea codului intermediar
n are ca obiectiv eliminarea redundanelor, a
calculelor inutile, pentru o execuie eficient a
codului obiect.
n Pentru realizarea se ncearc:
Realizarea tuturor calculelor posibile nc din faza de
compilare (de exemplu n expresii cu operanzi
constante)
Eliminarea subexpresiilor comune (prin evaluarea lor
o singur dat)
Factorizarea invariaiilor din cicluri.

Programare procedural 15
Generarea programului obiect
n Const n alocarea de locaii de memorie i registre ale
unitii centrale pentru variabilele programului i
nlocuirea codurilor de operaii din codul intermediar cu
cele main.
n Codul obiect rezultat poate fi:
absolut (direct executabil)
relocabil (care va face obiectul editrii de legturi, unde va fi
legat de alte module obiect
n limbaj de asamblare, lucru ce asigur un efort mic de
implementare a generatorului de cod.
n alt limbaj de programare, n cazul preprocesoarelor.

Programare procedural 16
Modulul de tratare a erorilor
n Proceduri care sunt activate la detectarea
erorilor n timpul operaiilor de analiz.
Traducerea se continu cu ignorarea
elementului ce conine eroarea;
Se ncearc corectarea erorii
Se abandoneaz procesul de traducere.

Programare procedural 17
Modulul de tratare a erorilor
n Dup momentul n care apar avem erori
lexicale,
sintactice
semantice.
n Dup gravitatea erorilor:
avertismente (de obicei omisiuni de programare),
erori care se pot corecta de ctre un compilator mai
inteligent
erori fatale, care provoac abandonarea procesului
de compilare.

Programare procedural 18
Gestionarul de tabele
n Colecie de proceduri care realizeaz crearea i
actualizarea bazei de date a compilatorului, care
conine dou categorii de informaii:
proprii compilatorului (generate la implementare i
constituite din mecanismele de descriere a analizei
lexicale, sintactice i semantice)
caracteristice programului surs (identificatori,
constante, cuvinte cheie), care de obicei se
memoreaz ntr-o tabel de simboluri.

Programare procedural 19
Gestionarul de tabele
n La ntlnirea unui nume nou, acesta este
introdus n tabela de simboluri, reinndu-se
adresa intrrii.
n Ori de cte ori numele este referit, informaia
prezent n tabel este actualizat cu informaii
sau atribute noi ale numelui respectiv,
verificndu-se totodat consistena utilizrii
acestuia (analiza semantic).
n La generare de cod, atributele numelui
determin lungimea zonei de memorie alocat
acestuia. Atributele numelui pot servi i n faza
de tratare a erorilor.
Programare procedural 20
Uniti de program
n Structura general a unui program scris
ntr-un limbaj de programare convenional
(imperativ, dirijat de control)
Program principal
Unul sau mai multor subprograme
n Comunicarea prin:
n Parametri,
n Variabile globale.

Programare procedural 21
Program - subprogram
n 2 pri
partea de declaraii (instr. neexecutabile )
n informaii descriptive adresate compilatorului
atribute ale zonelor de date cum ar fi tipul,
dimensiunea de reprezentare,

valori iniiale

parteaimperativ (instruciunile ce se vor


executa)

Programare procedural 22
Compilare separat
n Posibil datorit modularizrii programelor
n Fiecare modul are un rol bine precizat
n La modificarea unui modul nu trebuie
recompilat tot programul.
n Combinarea modulelor o face link-editorul
n Rezultatul = economie de timp
n Demonstraie n C (cuv. cheie extern)

Programare procedural 23
Link-editarea
n Link-editorul sau editorul de legturi este o
component a mediului pentru dezv. de
aplicaii care grupeaz unul sau mai multe
module obiect, rezultate din compilare sau
asamblare, mpreun cu cod din biblioteci,
ntr-un program executabil.

Programare procedural 24
Execuia programelor
n operare la nivelul liniei de comand: se introduc
pe rnd comenzile de compilare, link-editare i
lansare n execuie;
n asistat de un mediu de programare: comenzile
de mai sus sunt lansate i executate din
interiorul unui astfel de mediu;
n sistem batch (prelucrare n loturi): scrierea unor
fiiere de comenzi care vor automatiza
nlnuirea fazelor de la punctul 1.

Programare procedural 25
Sisteme de operare
n SO interactive
Comunicaia prin terminal sau interfa grafic
Comenzi
n Interne (rezidente n nucleul SO)
n Externe (fiiere executabile)

n Multitasking, multithreading

Programare procedural 26
Medii de programare i execuie
n Sisteme complexe destinate activitii de
dezvoltare de programe
editor de texte
compilator interactiv
editor de legturi
interpretor pentru execuiarezultatului compilrii
(numit i mediu de execuie runtime environment),
depanator simbolic
componente de legtur cu mediul exterior (de regul
cu sistemul de operare cu care lucreaz

Programare procedural 27
Medii de programare
n Visual Studio de la Microsoft,
n Builder de la Borland
n Eclipse
n ZEND Studio (PHP)

Programare procedural 28
Interpretarea
n Interpretorul este un program care execut
pas cu pas instruciunile descrise ntr-un
limbaj
n Viteza de interpretare este mult mai mic
dect codului compilat
n Mult mai simplu de implementat

Programare procedural 29
Programare
procedural
Declaraii
Curs 5

Programare procedural 1
Coninuturi

n Rolul identificatorilor ntr-un program


n Domeniu de vizibilitate
n Semantica unei declaraii

Programare procedural 2
Rolul identificatorilor ntr-un
program
n Identificatorii sunt nume pentru diverse entiti:
constante simbolice
tipuri de date
variabile
subprograme
module
programe
cmpuri n nregistrri

Programare procedural 3
Identificatori
n Dup declarare un identificator va referi n
mod unic o entitate din program
n Prezen numelui su (nsoit eventual de
alte elemente suplimentare) va reprezenta
pentru programul traductor o referire
neambigu la entitatea n cauz.

Programare procedural 4
Domeniu de vizibilitate
n n pri diferite ale aceluiai program surs
sau n module diferite ale unui program se
pot folosi identificatori identici.
n Rezolvarea conflicte de nume se face pe
baza regulilor de vizibilitate a numelor

Programare procedural 5
Domeniu de vizibilitate (cont.)
n A aprut la limbajele cu structur de bloc
n O declarare a unui nume stabilete
domeniul su de vizibilitate
n DV ncepe de regul imediat dup punctul
de declarare i se ncheie la sfritul
blocului sau funciei sau fiierului surs

Programare procedural 6
Domeniu de vizibilitate (cont.)
n Identificatori locali
declarat n interiorul unui subprogram DV toat
secvena de declaraii i instruciuni de dup punctul
de declarare i pn la sfritul subprogramului
respectiv (inclusiv blocurile sau subprogramele sale
(exc. redeclarare)
n Identificatori globali
DV de la punctul de declarare pn la sfritul
fiierului surs (exc. redeclarare)

Programare procedural 7
Universul unui LP
n Format din obiectele specifice puse la dispoziie
de limbaj pentru modelarea problemelor.
n Prin aceste obiecte, programatorul simuleaz
comportamentul obiectelor sale sau realizeaz
noi obiecte, mai complexe, cu proprieti noi.
n Pe lng aceste obiecte specificate prin declaraii,
limbajul pune la dispoziia programatorului
operaii asupra acestora (instruciuni).

Programare procedural 8
Semantica unei declaraii
n Obiectele ULP sunt datele (elementare
sau structurate).
n Datele au anumite caracteristici (precizate
prin declaraii)
Nume
Tip
Valoare
Modificabilitate

Programare procedural 9
Semantica unei declaraii
n Unei constante simbolice i se asociaz
printr-o declaraie un obiect din ULP,
acelai pe tot parcursul execuiei
programului
n O variabil are asociat o locaie de
memorie care poate, la un moment dat, s
conin un obiect dintr-o mulime de valori
posibile

Programare procedural 10
Semantica unei declaraii
n Mulime de valori posibile = dom. de def. al
variabilei sau domeniul tipului variabilei
n Locaia de memorie = poziia de la care ncepe
alocarea variabilei respective
n Precizarea tipului pentru constante i variabile
se face prin declaraii
n Informaia de tip asociat unui obiect servete la
determinarea gamei de operaii care se pot face
cu acel obiect

Programare procedural 11
Semantica unei declaraii
n LP moderne permit declararea de noi tipuri
(tipuri derivate ) bazate pe tipurile
existente
n Un tip de date definit de utilizator e indicat
s aib acelai statut ca i un tip de date
predefinit:
Declararea i folosirea variabilelor,
Verificarea consistenei expresiilor de acel tip

Programare procedural 12
Programare
procedural
Declaraii
Curs 6

Programare procedural 1
Coninuturi

n Declaraii de constante
n Declaraii de tipuri de date
n Sisteme de tipuri
n Clasificarea tipurilor de date
n Declaraii de tipuri n C

Programare procedural 2
Declaraii de constante
n Constantele simbolice i pstreaz valoarea pe
tot parcursul execuiei unui program
n Ex.
PI := 3.1415
n Ofer
Uurin n scrierea programelor
Expresivitate
Flexibilitate - PI := 3.141592653595

Programare procedural 3
Declaraii de constante
n constant simbolic = (nume, valoarea asociat)
n C nu are aa ceva
n Pascal, C++, C# au
Cum se face declaraia de constant?
Admite numai constante de tipuri simple sau i folosirea
constantelor de tipuri structurate?
Valoarea constantei se d printr-un literal sau printr-o expresie
evaluabil (i cnd: la compilare sau la execuie)?
Cnd se face substituirea numelui constantei cu valoarea
asociat (la compilare sau la execuie)?
Admite limbajul constante predefinite?

Programare procedural 4
Declaraii de constante
n n C nu exist constante
n Ele sunt simulate prin macrodefiniii tratate de
preprocesorul C
n Dezavantaj
nu sunt valabile regulile de vizibilitate ale numelor din C (numele
vor fi globale)
nu se poate declara tipul constantei
parantezele greite - probleme de interpretare
n Ex.
#define TBLSIZE 100
#define TBLMAX (TBLSIZE - 1)

Programare procedural 5
Declaraii de constante
n C++ introduce constantele (de orice tip),
prin declaraii de forma:
const int TBLSIZE = 100;
const int TBLMAX = (TBLSIZE - 1);

Programare procedural 6
Declaraii de constante
n Mecanismul const a fost conceput pentru
a preveni eventualele accidente (ca de
exemplu modificarea nedorit a unor valori
care se consider constante) i nu
fraudele.
n Protecia oferit de acest mecanism poate
fi eludat printr-o conversie explicit sau
prin aliere. De exemplu:

Programare procedural 7
Declaraii de constante
int i = 1; // i nu este const
const int* p = &i; // i nu se va putea modifica prin p
int *q = (int*)p; /* alierea cantitii *q cu i prin conversie explicit de tip
echivalent cu int *q = &p; iniializarea int *q = p ar fi ilegal din
cauza incompatibilitii caracteristicilor de tip; */
void f()
{
p--;
i++; // ok: nu i este const ci p
(*p)--; // eroare: *p este const
(*q)++; /* ok: q nu este const, deci cantitatea referita de aceasta nu
este supusa restrictiilor de moficare*/
}
void g()
{
(*(int *)p)++ // ok: conversie explicita
}
Programare procedural 8
Exemple
const char* step[3] = {left, right, hop};

n Tablou de pointeri la iruri de caractere


n Pointerii se pot modifica
n irurile de caractere nu se pot prin intermediul acestor
pointeri

step[2] = skip; // ok: se modifica pointer la const char


step[2][1] = i; /* eroare: nu se poate modifica sir de
caractere constant */

Programare procedural 9
Exemple
const char* const step[3] =
{left, right, hop};

step[2] = skip; /* eroare: nu se poate


modifica un pointer constant*/
step[2][1] = i; /* eroare: nu se poate
modifica sir de caractere constant*/

Programare procedural 10
Declaraii de constante
n Definiia limbajului C nu specific
constante predefinite.
n Pentru asigurarea compatibilitii tipurilor
numerice cu ANSI C, limitele (minim i
maxim) domeniilor pentru diferite tipuri se
gsesc (sub forma unor macrodefiniii) n
fiierele header <limits.h> i <float.h>.

Programare procedural 11
Declaraii de tipuri de date
n Tipul de date = mecanism de clasificare a
expresiilor care furnizeaz dou informaii:
mulimea valorilor posibile ale expresiei n cauz
(domeniul tipului);
operaiile ce se pot aplica respectivei expresii;

n Unul din principiile de baz ale proiectrii unui


limbaj de programare este: orice expresie
trebuie s aib un tip unic determinat.

Programare procedural 12
Declaraii de tipuri de date
n Tipul asociat unei expresii ofer
programului traductor informaia
necesar pentru verificarea utilizrii
respectivei expresii i pentru
reprezentarea acesteia n memorie.

Programare procedural 13
Sisteme de tipuri
n Sistem de tipuri pentru un LP = o mulime
de reguli prin care unei expresii i se
asociaz un tip al limbajului respectiv
n ST respinge o expresie dac nu-i poate
asocia un tip
n Respingerea expresiei are loc de obicei la
compilare sau, mai rar, la execuie

Programare procedural 14
Sisteme de tipuri
n LP impun declararea explicit a variabilelor, una
dintre informaiile de baz prezente n declaraie
fiind tipul variabilei.
n Sarcinile principale ale unui sistem de tipuri
sunt:
declararea de tipuri de date utilizator
asocierea de tipuri la variabile, realizate prin
declaraiile de variabile
verificarea consistenei folosirii expresiilor

Programare procedural 15
Sisteme de tipuri
n Verificarea consistenei folosirii expresiilor:
determinarea tipului expresiei
verificarea consistenei instruciunilor (de
atribuire, apel) prin
n compatibilitatea tipurilor;
n egalitatea tipurilor, includerea tipurilor;

n echivalena tipurilor;

n concordana listelor de parametri (formali i


actuali) n apelul de subprograme.

Programare procedural 16
Sisteme de tipuri
n Regulile unui sistem de tipuri precizeaz
utilizarea adecvat a fiecrui operator n
limbaj.
n Verificarea tipurilor (engl. type checking)
are ca scop garantarea folosirii corecte a
operaiilor
n Se previn erorile de execuie.
n O eroare de execuie apare atunci cnd o
operaie se aplic incorect,
Programare procedural 17
Sisteme de tipuri
n Exemplu: un operand numr ntreg este
considerat altceva (caracter, ir de caractere,
boolean).
n O eroare de tip (engl. type mismatch) apare
cnd o funcie f cu un argument formal de tipul S
care ntoarce un rezultat de tipul T este apelat
cu un argument actual de tipul A care nu este de
tipul S.
n Un program n care nu apar erori de tip se
numete sigur din punctul de vedere al tipurilor
(engl. type safe).
Programare procedural 18
Sisteme de tipuri
n Verificarea tipului se poate face static sau
dinamic.
n Verificarea static se face la traducere,
n Verificarea dinamic se face la execuiei,
prin inserarea n programul executabil (n
timpul traducerii) a unor poriuni de cod
care realizeaz acest lucru.

Programare procedural 19
Sisteme de tipuri
n Verificarea dinamic = costuri suplimentare de
execuie (dimensiunea programului executabil
crete, la fel i timpul de execuie, o parte din el
fiind dedicat verificrilor specifice).
n Verificarea static = numai verificare de tip,
n Verificarea dinamic = verificarea de tip +
verificarea unor valori calculate n timpul
execuiei (indici de tablou, mprire la zero etc.).

Programare procedural 20
Sisteme de tipuri
n Expresie sigur (engl. safe expression) =
expresie n a crei evaluare nu apare o eroare
de tip.
n Categorii de sisteme de tipuri:
Puternice(engl. strong type system)
Slabe (engl. weak type system).
n Sistem puternic de tipuri = accept numai
expresii sigure
n Sistem slab de tipuri = nu este puternic.

Programare procedural 21
Sisteme de tipuri
n LP puternic tipizat
fiecare expresie are un singur tip;
determinarea tipului este posibil n timpul
procesului de traducere, din sintaxa limbajului;
variabilele memorate la adrese distincte
n LP slab tipizat
fiecare obiect este creat cu un tip specificat;
fiecare obiect este folosit ntr-o manier consistent
cu tipul su.

Programare procedural 22
Clasificarea tipurilor de date
n Caracterul extensibil al unui LP este dat ntr-o
mare msur de capacitatea acestuia de a
permite definirea de noi tipuri de date
n Criterii de clasificare a tipurilor:
nivelulde abstractizare
prezena sau absena numelui tipului
prezena n (sau absena din) definiia limbajului;
momentul verificrii tipului
caracteristicile tipurilor (domeniu, operaii)

Programare procedural 23
Clasificarea tipurilor de date
n Tipurile pot fi considerate pe trei niveluri de
abstractizare:
nivelul main tipurile pe care maina le tie
reprezenta i pentru care dispune de dispozitive care
pot efectua operaii cu ele: tipurile ntregi i reale,
caracter i boolean; (tipuri de baz)
nivelul limbajului tipurile de baz + tipurile
structurate: tablouri, nregistrri, mulimi, liste etc.
care se construiesc cu ajutorul tipurilor simple;
nivelul utilizator tipurile definite de utilizator; aceste
tipuri adaug cmpurilor de la tipurile structurate
operaii, prin ncapsulare; POO

Programare procedural 24
Clasificarea tipurilor de date
n Un tip de date este notat cu un identificator = numele
tipului.
n Numele concentreaz toat informaia de declarare a
respectivului tip (domeniul i operaiile asociate).
n Exist declaraii n care nu apare numele tipului, fiind
prezent doar declararea acestuia.
n Prezena sau absena numelui este un criteriu de
clasificare a TD:
tipuri cu nume
tipuri anonime (fr nume).

Programare procedural 25
Clasificarea tipurilor de date
struct Student struct
{ {
char* nume; char* nume;
int varsta; int varsta;
}; } s;

struct Student s; Tip anonim

Programare procedural 26
Clasificarea tipurilor de date
n Din punctul de vedere al definiiei
limbajului:
tipuri fundamentale, care au ca nume
identificatori predefinii;
tipuri derivate, care au numele (identificator)
dat de utilizator ntr-o declaraie ce cuprinde
un constructor de tip.
n Din punctul de vedere al momentului
verificrii tipului:
tip static (verificat la compilare);
tip dinamic (verificat la execuie).
Programare procedural 27
Clasificarea tipurilor de date
n Dup natura comportamentului reprezentanilor
(obiectelor) unui anumit tip:
simple sau scalare: ordinale (ntreg, boolean,
caracter, enumerare, subdomeniu) i reale;
ir de caractere;
structurate (tablou, nregistrare, mulime, fiier, clas,
uniune);
pointer;
procedurale.

Programare procedural 28
Declaraii de tipuri n C
Nume-de-tip Declaraia Tipul
int int i ntreg
int* int* pi Pointer la ntreg
int *[3] int *p[3] Tablou de 3 pointeri la ntregi
int (*)[3] int (*p3i)[3] Pointer la tablou de 3 ntregi
int *() int *f() Funcie fr argumente care
returneaz pointer la int
int(*) int(*pf) Pointer la funcie cu un arg.
(double) (double) double care returneaz int

Programare procedural 29
Declaraii de tipuri n C
typedef int * Tf();
Tf f;

n nume-de-tip este Tf
n declaraie de tip echivalent cu declaraia de variabil int *f();

typedef int (*Tpf)(double);


Tpf pf;

n nume-de-tip este Tpf


n declaraie de tip echivalent cu int (*pf)(double);

Programare procedural 30
Declaraii de tipuri n C
typedef char *F(int);
// F funcie cu argument
//int care ntoarce pointer la char

typedef F* A[10];
char* (*(*f)[10])(int); // A este tablou de
// 10 pointeri la funcii de tipul F

A* p;
// p este un pointer la tabloul de
//tip A din expresia de mai sus.

Programare procedural 31
Echivalena tipurilor
n Ce nseamn tipuri compatibile sau egale?

Programare procedural 32
Programare
procedural
Declaraii de variabile
Curs 7

Programare procedural 1
Coninuturi

n Elemente definitorii ale unei variabile


n Legarea variabilelor
n Punctul de declarare

Programare procedural 2
Declaraii de variabile
n Unei variabile i corespunde o locaie de
memorie care conine un obiect dintr-o
mulime valori posibile ale ULP.
n Mulime formeaz domeniul de definiie al
variabilei,
n Locaia de memorie poziia de la care
ncepe alocarea variabilei respective.

Programare procedural 3
Declaraii de variabile
n n programarea imperativ caracteristica
definitorie este crearea variabilelor i lucrul
cu acestea
n Variabil matematic != variabil informatic
n Matematic nedeterminat sau parametru
a unui sistem formal
n Informatic - legat de localizarea acesteia
n memorie i de modificabilitatea
coninutului locaiei
Programare procedural 4
Elemente definitorii ale unei
variabile
n Structural
nume
set de atribute
referin
valoare

n Numele unei variabile este un identificator

Programare procedural 5
Elemente definitorii ale unei
variabile
n Setul de atribute poate fi:
fixat
la compilare
modificat dinamic (la execuie)

n Definirea atributelor
declarativ (se folosesc instr. de declarare)
implicit (prin convenii n ceea ce privete
numele, atribuirea de valori)

Programare procedural 6
Elemente definitorii ale unei
variabile
n Atribute eseniale:
Domeniul de vizibilitate
Durata de via
Tipul variabilei

Programare procedural 7
Elemente definitorii ale unei
variabile
n Domeniul de vizibilitate este
considerat a fi intervalul (de program
surs) n care variabila respectiv este
recunoscut, deci utilizabil
n Domeniul de vizibilitate - ncepe de obicei
imediat dup punctul de declarare al
numelui i se termin la sfritul blocului,
procedurii, fiierului surs

Programare procedural 8
Elemente definitorii ale unei
variabile
O variabil local, declarat n interiorul unui
subprogram are DV toat secvena de declaraii
i instruciuni de dup punctul de declarare i
pn la sfritul subprogramului respectiv;
O variabil global, declarat n corpul
programului principal are DV dup punctul de
declarare pn la sfritul fiierului surs.

Programare procedural 9
Elemente definitorii ale unei
variabile
n Durata de via - intervalul (de timp de
execuie) n care zona de memorie alocat
variabilei este utilizat pentru variabil
n Variabile locale (automatice)
declarate n interiorul blocurilor sau subprogramelor
alocate n stiv doar la activarea unitii de program
durata de via egal cu perioada ct este activat
blocul sau subprogramul n care ele sunt declarate

Programare procedural 10
Elemente definitorii ale unei
variabile
n Variabilele globale
alocate n segmentul de date nc de la
compilare
au durata de via egal cu timpul de execuie
al programului

Programare procedural 11
Elemente definitorii ale unei
variabile
n Variabile dinamice
durata de via controlat de utilizator
alocarea i dealocarea se face prin
instruciuni specifice fiecrui limbaj

Programare procedural 12
Elemente definitorii ale unei
variabile
n Tipul variabilei
LP posed tipuri predefinite (tipuri numerice, caracter,
boolean),
LP evoluate au n plus mecanisme de definire a
tipurilor utilizator (typedef, struct, union n C, class n
C++),
Programatorul poate construi propriile sale structuri
de date
Mecanismele de declarare de noi tipuri sunt extinse
prin ceea ce se numete abstractizare datelor i
POO, accentul este pus pe definirea operaiilor
prevzute pentru un tip de dat definit de utilizator
Programare procedural 13
Elemente definitorii ale unei
variabile
n Referina = informaia adres; locul unde
este memorat variabila
n Stabilirea referinei se realizeaz prin
alocarea variabilei respective
n Alocarea unei variabile se poate face
static
(la compilare)
dinamic (dinamic)

Programare procedural 14
Elemente definitorii ale unei
variabile
n Variabile aliate = variabile care au aceeai
referin
n Operaia se numete aliere (aliasing)
n n C i C++ se realizeaz prin union

Programare procedural 15
Elemente definitorii ale unei
variabile
n Valoarea asociat unei variabile se poate
schimba n timpul execuiei unui program
n Mulimea valorilor asociate variabilelor
dintr-un program formeaz spaiul strilor
sau mediul programului
n Determinarea valorii unei variabile se face
prin operaia de derefereniere

Programare procedural 16
Elemente definitorii ale unei
variabile
n n general operaia de derefereniere este
implicit, neexistnd o notaie consacrat
pentru ea
n Pe baza referinei se returneaz valoarea
variabilei

Programare procedural 17
Elemente definitorii ale unei
variabile
Nume Set de atribute Referin

Valoare

n Referina + valoare = obiect

Programare procedural 18
Elemente definitorii ale unei
variabile
X Atribute X valoare

Y Atribute Y

n Variabile aliate

Programare procedural 19
Legarea variabilelor (binding)
n ntre nume i setul de atribute
n ntre perechea (nume, set de atribute) i
referin
n Legarea intern a variabilelor se face n
interiorul procesului de compilare
n Legarea extern este sarcina editorului de
legturi (rezolv legarea unei variabile folosit
ntr-un modul i declarat ntr-un alt modul)

Programare procedural 20
Legarea variabilelor
n Legarea variabilelor implic punerea n
coresponden a variabilelor cu atributele
acesteia
n Momentul legrii (engl. binding time) este
momentul la care devin cunoscute
atributele unei variabile.

Programare procedural 21
Legarea variabilelor
n Momentul legrii:
la compilare: se pot face toate verificrile necesare
privind compatibilitatea i corectitudinea utilizrii
variabilei; codul generat este mai compact,
permind o execuie eficient.
la execuie: n codul generat la compilare vor trebui
introduse secvene care s realizeze verificrile de
corectitudine a utilizrii variabilei, ceea ce duce la
un cod mai mare, deci mai ineficient. Avem o mai
mare flexibilitate a programelor scrise.

Programare procedural 22
Legarea variabilelor
n Momentul legrii:
LP cu legare static (la compilare) foarte
eficient n execuie
LP cu legare dinamic la execuie

Programare procedural 23
Punctul de declarare
n Punctul de declarare a unei variabile poate
fi definit att pentru limbajele cu declaraii
complet explicite, ct i pentru cele care
permit i declaraii implicite de variabile

Programare procedural 24
Punctul de declarare
n Declaraie explicit - orice variabil trebuie
declarat printr-o instruciune de declarare, iar
punctul de declarare se consider a fi imediat
dup terminarea declaraiei numelui variabilei
n Declaraie implicit - punctul de declarare este
prima instruciune de atribuire care conine n
membrul stng numele variabilei (nceputul
domeniului de vizibilitate al variabilei)

Programare procedural 25
Punctul de declarare
n ntlnirea unei instruciuni de declarare
nseamn pentru compilator legarea
numelui variabilei de setul de atribute.
n n mod normal o instruciune de declarare
specific dou informaii:
numele variabilei;
tipul acesteia.

Programare procedural 26
Punctul de declarare
n Restul atributelor se determin astfel:
nceputul DV este definit de punctul de declarare,
iar sfritul DV este determinat tot de punctul de
declarare, astfel:
a. Punctul de declarare este intern unui bloc: DV ine pn la
sfritul blocului, inclusiv blocurile (subprogramele) locale
(exc. redeclarri ale numelui situaie n care vor fi valabile
redeclarrile aa numitele pete albe hole in scope;
variabil este local unitii n care a aprut punctul de
declarare.

Programare procedural 27
Punctul de declarare
n Restul atributelor se determin astfel:
nceputul DV este definit de punctul de
declarare, iar sfritul DV este determinat tot
de punctul de declarare, astfel:
b. Punctul de declarare este n afara oricrui bloc sau
subprogram: DV ine pn la sfritul fiierului surs,
variabila fiind global n fiierul ce conine declaraia.

Programare procedural 28
Punctul de declarare
n Restul atributelor se determin astfel:
nceputul DV este definit de punctul de
declarare, iar sfritul DV este determinat tot
de punctul de declarare, astfel:
c. Punctul de declarare este n partea de interfa a
unui modul: DV este cel stabilit la (b), variabila
fiind global modulului, i orice alt modul sau
program care specific explicit folosirea
modulului de declarare.

Programare procedural 29
Punctul de declarare
n Restul atributelor se determin astfel:
nceputul DV este definit de punctul de
declarare, iar sfritul DV este determinat tot
de punctul de declarare, astfel:
d. Punctul de declarare este n partea de
implementare a unui modul: DV este cel stabilit
la (b), cu precizarea c numele este invizibil
modulelor sau programelor care specific explicit
folosirea modulului de declarare, iar variabila
este local modulului.

Programare procedural 30
Programare
procedural
Declararea variabilelor C
Curs 8

Programare procedural 1
Coninuturi

n Clase de memorie
n Etape ale lucrului cu variabile
Declarare
Iniializare
Folosire

Programare procedural 2
Clase de memorie
n n limbajul C funciile nu se pot include
unele n altele
n n C exist instruciuni compuse i blocuri
n Se permit definiri de obiecte n cadrul
blocurilor

Programare procedural 3
Clase de memorie
n CM util pentru determinarea domeniului
de vizibilitate i a duratei de via al var.
n CM: auto, register, extern, static
n Sintaxa:
<nume_clas> <tip> <list_nume_variabile>;

Programare procedural 4
Clase de memorie
n auto sunt declarate n interiorul funciilor
Este activ ct timp este activ unitatea de
program (funcia sau blocul) la nceputul
creia a fost declarat
i pierde valoarea la terminarea execuiei
unitii de program n care e declarat
La un nou apel vechea valoare nu mai e
disponibil
Clasa de memorie implicit

Programare procedural 5
Clase de memorie
n register subclas a clasei auto
Declaraia register informeaz compilatorul
c aceste variabile vor fi utilizate foarte
frecvent
Dac e posibil compilatorul le va aloca cte
un registru main (pentru eficien)
Un registru = 4 octei deci doar ntregii,
caracterele, pointerii pot aparine acestei
clase

Programare procedural 6
Clase de memorie
void main()
{
register int i;
for (i = 0; i < 1000; i++)
a[i] = i; //
}

Programare procedural 7
Clase de memorie
n static interne i externe (n funcie de locul
unde apar)
static interne declarate n interiorul unei funcii
static externe declarate n afara funciilor

n Exemplu:
static int a[20];

Programare procedural 8
Clase de memorie
n Declaraie static extern variabila
accesibil doar funciilor din fiierul
respectiv
n Se aloc la compilare n segmentul de
date
n Declaraie static intern variabil local
alocat n segmentul de date (nu pe stiv)

Programare procedural 9
Clase de memorie
n static intern
valoarea se pstreaz ntre dou apeluri
consecutive ale aceleiai funcii
iniializarea se face doar la primul apel al
funciei

Programare procedural 10
Clase de memorie
n extern pentru comunicarea ntre
segmente diferite, compilate separat
Declarate n afara funciilor
DV de la declarare pn la sfritul fiierului
n care apare declararea
n Funciile C au implicit clasa de memorie
extern

Programare procedural 11
Etape ale lucrului cu variabile
n Declararea
n Iniializarea
n Folosirea

Programare procedural 12
Etape ale lucrului cu variabile
n Declararea se face implicit sau explicit
n Declararea explicit
se realizeaz cu ajutorul instruciunilor de
declarare
comunic compilatorului informaii privind
n numele variabilelor
n atributele
n valorile de iniializare (dac e cazul)

Programare procedural 13
Etape ale lucrului cu variabile
n Declararea implicit
recurge la convenii privitoare fie la numele
variabilei, fie la valoarea acesteia
n Instruciunile de declarare apar, de
regul, n partea de nceput (de
declaraii) a blocurilor, subprogramelor
sau modulelor (exc. Java, C++, C#)

Programare procedural 14
Etape ale lucrului cu variabile
n Declaraiile pot specifica
tipulde legare a variabilei (intern sau
extern)
modul de alocare
modul de transmitere a parametrilor n
subprograme

Programare procedural 15
Etape ale lucrului cu variabile
n Declarare != Definire
n Definire = declarare + iniializare
n Definiii fr iniializare, variabilele primesc
valori implicite, echivalente lui 0:
0 pentru tipuri numerice
string-ul vid pentru iruri de caractere
valoarea NULL pentru pointeri

Programare procedural 16
Etape ale lucrului cu variabile
n Declarare != Definire atunci cnd:
Declar o funcie fr a-i specifica corpul;
Conine specificatorul extern i nu are
iniializarea sau corp de funcie;
Declar un membru static ntr-o declaraie de
clas;
Este o declaraie de nume de clas;
Este o declaraie typedef.

Programare procedural 17
Etape ale lucrului cu variabile
n Exemple:
inta; // declaraie + definiie
extern int a; // declaraie n alt fiier

n Declaraii static - legare intern


n Declaraii extern - legare extern (la link-
editare)

Programare procedural 18
Programare
procedural
Declararea variabilelor C
Tipuri de date
Curs 9

Programare procedural 1
Coninuturi

n Etape ale lucrului cu variabile


Folosire
Declaraii const
Lucrul cu pointeri
Iniializarea
Referirea variabilelor

n Tipuri de date
Programare procedural 2
Etape ale lucrului cu variabile
n O declaraie sau definiie poate conine i
calificatori (const sau volatile), care definesc
modificabilitatea obiectelor precizate
n Exemple:
const int ci = 10; // constant ntreag;
const int *pc = &ci; // pointer la constanta ntreag ci;
const int *const cpc = pc; //pointer constant la
constanta ntreag ci

Programare procedural 3
Etape ale lucrului cu variabile
n Exemple:
int i; // variabil ntreag
int *p; // pointer la ntreg;
int *const cp = &i; // pointer constant la variabila
ntreg i;
n Operaii permise:
i = ci;
*cp = ci;
pc++;
pc = cpc;
pc = p;

Programare procedural 4
Etape ale lucrului cu variabile
n Operaii nepermise
ci = 1; // ci nu se poate modifica
ci++; // idem
*pc = 2; // ar trebui s se modifice ci
cp = &ci; // cp nu se poate modifica
cpc++;// cpc nu se poate modifica
p = pc;// ar permite modificarea ulterioar a lui
ci prin p

Programare procedural 5
Etape ale lucrului cu variabile
int i = 1; // i se poate modifica
const int *p = &i;
//pointer la obiect const care se poate modifica, nu si obiectul referit
int *const vp = &i;
//pointer const la un obiect; obiectul se poate modifica, nu i pointerul
const int *const cp = &i;
// pointer const la un obiect const; obiectul i pointerul nu se pot modifica
void f()
{
i++; // OK: i nu este const
p--; // OK: p nu este const
(*vp)--; // OK: *vp nu este const
cp++; //eroare: nu se poate modifica un obiect const
(*cp)--; //eroare: nu se poate modifica un obiect const
(*p)++; //eroare: nu se poate modifica un obiect const
vp++; //eroare: nu se poate modifica un obiect const
} Programare procedural 6
Etape ale lucrului cu variabile
n Iniializarea
Stabilitatea unui program = cu aceleai date de
intrare, programul produce aceleai rezultate
n cazul programelor simple, care conin declaraii de
date (variabile) de intrare i rezultate
n variabilele de intrare se iniializeaz prin operaii de intrare
(citire)
n variabilele rezultat (de ieire) prin operaii de atribuire
Variabile auxiliare (necesare pentru o mai bun
structur a procesului de calcul), nu se garanteaz
iniializarea acestora

Programare procedural 7
Etape ale lucrului cu variabile
n Condiie de stabilitate: toate variabilele
auxiliare din program s fie iniializate cu
aceleai valori, la fiecare execuie a
programului cu acelai set de date de
intrare
n Iniializarea unei variabile prin:
instruciuni de atribuire
instruciuni specifice

Programare procedural 8
Etape ale lucrului cu variabile
n Iniializarea unei variabile aceasta se poate face:
n momentul alocrii ei (variabila primete o valoarea
predefinit, n funcie de tipul ei sau stabilit printr-o
instruciune sau clauz)
imediat dup momentul alocrii (valoarea variabilei
este nedefinit se consider valoarea gsit n
locaia de memorie definit de referina ei, valoarea
numit valoarea rezidual

Programare procedural 9
Etape ale lucrului cu variabile
n Referirea variabilelor se face printr-o expresie
de identificare care poate fi:
(numele variabilei respective);
identificator
expresie indexat (cnd variabila este de tip tablou);
expresie de selectare (dac variabila este
component a unei date structurate);
expresie de indirectare (cnd variabila este de tip
pointer);

Programare procedural 10
Tipuri de date
n Tipuri fundamentale
n iruri de caractere
n Pointeri
n Tipuri procedurale
n Tipuri structurate
Tablou
nregistrare
Uniuni
Tipuri de date definite de utilizator

Programare procedural 11
Tipuri de date
n Tip de date = o mulime de obiecte nsoit
de o mulime de operaii pe mulimea
acestor obiecte
Operaiile
n crearea, construirea, distrugerea, modificarea sau
copierea instanelor (realizrilor) obiectelor
n set minim de operaii primitive (prin compunere
rezult operaii complexe)

Programare procedural 12
Tipuri fundamentale
n Tipuri fundamentale = tipuri baz,
corespund tipurilor main.
n Pentru TF avem identificatori predefinii
n Tipuri fundamentale (comportament)
aritmetice,
caracter
boolean

Programare procedural 13
Tipuri fundamentale
n Tipurile aritmetice (ntregi i reale) sunt
apropiate de maina fizic
n Operaiile de baz
aritmetice
(expresii aritmetice)
comparare (expresii relaionale)

Programare procedural 14
Tipuri fundamentale
n Tipul boolean are
2 valori: true i false
5 operaii: and, or, not, imp, equiv
n x and y = if x then y else false
n x or y = if x then true else y
n not x = if x then false else true
n x imp y = if x then y else true
n x equiv y = if x then y else not y

Programare procedural 15
Tipuri fundamentale
n n C (C++) nu exist tipul boolean (bool)
un ir bii ce conine numai 0 - false
un ir de bii n care este unul nenul - true

n Tipurile aritmetice
tipuri ntregi (char, int n toate variantele i
enumerrile)
tipuri reale (flotante)

Programare procedural 16
Tipuri fundamentale
n Valorile minim i maxim din domeniul
fiecrui tip sunt precizate, pentru fiecare
implementare, n fiierul header (antet)
<limits.h>
n Tipul char
setulde caractere de baz al limbajului
valoare = codul ntreg al caracterului

Programare procedural 17
Tipuri fundamentale
n Tipul char poate fi calificate cu:
signed sau unsigned
n Tipul int poate fi calificat cu:
signed sau unsigned
long sau short

Programare procedural 18
Tipuri fundamentale

Tip sizeof Aliniere


(n octei) (multiplu de, n octei)
char 1 1

short 2 2

int 2 sau 4 2 sau 4

long 4 sau 8 4 sau 8

Programare procedural 19
Tipuri fundamentale
n Tipul enumerare = tip ntreg distinct ce are
constante cu nume
n Identificatorii dintr-o list enumerare sunt
declarai constante i pot apare oriunde
pot apare constante
n Dac nu apar enumeratori cu =, valorile
constantelor ncep de la 0 i cresc cu 1, de
la stnga la dreapta

Programare procedural 20
Tipuri fundamentale
enum culori {
rosu, orange, galben, verde, albastru
};
enum fruct {
mar, para, orange, kiwi
}; // eroare: orange este redefinit
enum pasare {
strut, dodo, lebada, kiwi}; // eroare kiwi este redefinit
int lebada; // eroare: lebada redefinit

Programare procedural 21
Tipuri fundamentale
enum { a, b, c = 0};
enum {d, e, f = e + 2};
n definete a, c, d cu valoarea 0
n b i e cu valoarea 1
n f cu 3.

Programare procedural 22
Tipuri fundamentale
n Tipurile reale:
float
double
long double.
n Caracteristicile sunt date n <float.h>.

Programare procedural 23
Tipuri fundamentale
Tip sizeof (n octei) Aliniere (multiplu de, n octei)

float 4 4

double 8 4 sau 8

long 12 sau 16 4, 8 sau 16


double

Programare procedural 24
Tipuri fundamentale
n Tipul void are domeniul valorilor vid.
n Folosit pentru a preciza tipul rezultatului ntors de
funciile cu semantic de procedur.
n Nu se declar obiecte de tip void
n Orice expresie se poate converti explicit la tipul void
n Rezultatul conversiei se poate ca:
instruciune expresie,
operand stng,
expresie virgul
al treilea operand la o expresie condiionial ternar ? :

Programare procedural 25
iruri de caractere
n Tipul ir de caractere (numit i string) are ca
valoare un ir de caractere cu lungimea variabil
(modificabil dinamic)
n Operaii:
construirea
inserarea unui ir de caractere n altul
extragerea unui subir
tergerea unui subir
cutarea unui subir
concatenarea a dou iruri de caractere

Programare procedural 26
iruri de caractere
n Convenia C pentru string-uri:
un ir de n caractere se reprezint pe n+1
octei, numerotai de la 0 la n, astfel:
n octetul i (de la 0 la n-1) conine al i+1-lea caracter
din irul considerat
n octetul n conine un caracter terminator de ir:
caracterul NUL (\0) din ASCII;
n n C, C++ nu avem tipul string

Programare procedural 27
iruri de caractere
n Existena tipului string n limbaj implic:
existena tipului de date ir de caractere (string);
prelungirea utilizrii operatorilor relaionali pe iruri de
caractere;
stabilirea unei reprezentri pentru irurile de
caractere;
stabilirea unei mulimi minimale de operaii pe iruri
de caractere.

Programare procedural 28
iruri de caractere
n n C, C++
char [n] (sau char [ ])
Pentru a prelucra iruri de caractere folosim
funcii din biblioteca standard C:
n strcpy
n strcmp

n strstr

n strchr

n strlen etc.

Programare procedural 29
Programare
procedural
Tipuri de date

Curs 10

Programare procedural 1
Coninuturi

n Tipuri de date
Pointer
Procedural
Tipuri structurate
n Tablouri
n nregistrri

n Uniuni

Programare procedural 2
Tipul pointer
n Tipul de date pointer are domeniul format
din adresele altor entiti (reprezentabile n
memorie) dintr-un program.
n Lucrul cu pointeri permite:
Crearea i utilizarea unor structuri de date
foarte complexe,
n ngreuneaz nelegerea unui program,
putnd genera erori greu de detectat.

Programare procedural 3
Tipul pointer
n Tipuri de pointeri:
cu tip (conin adrese de entiti de acelai tip)
fr tip (refer orice entitate de memorie)

n Constituie o modalitate de accesare a


entitilor din memoria unui program,
printr-un mecanism de indirectare

Programare procedural 4
Tipul pointer
n Valoarea = adresa entitii respective
n Informaia de tip a pointerului exprim i tipul
entitii referite de pointer.
n Entitatea este o variabil - pointerul are ca
valoare adresa acesteia
n Variabilele alocat dinamic nu au nume (variabile
anonime). Referirea lor se poate realiza doar
prin pointeri

Programare procedural 5
Tipul pointer - operaii
n Atribuirea
n Dereferenierea (indirectarea, referirea
entitii punctate de pointer)
n Operaii aritmetice (adunare i scdere)

Programare procedural 6
Tipul pointer
n Pointerii = flexibilitatea n execuia
programului
n Programatorul are libertate de a
Controladurata de via a variabilelor
Gestionea o parte a memoriei

n Libertile greit nelese se ntorc


mpotriva aceluia care beneficiaz de ele

Programare procedural 7
Tipul pointer
n Referin ambigu = se folosete un
pointer a crui valoare refer ceva ce nu
mai este alocat n memorie
n Soluie garbage collector

Programare procedural 8
Tipul pointer - avantaje
n Libertatea pentru programator de a controla
duratei de via a variabilelor
n Flexibilitatea sporit a programelor prin structuri
de date dinamice
n Actualizarea selectiv a structurilor complexe,
fr recopierea ntregii structuri;
n Compactitatea codului scris prin folosirea
pointerilor la funcii.

Programare procedural 9
Tipul pointer erori tipice
n Accesarea unei entiti printr-un pointer
nainte de iniializarea pointerului ce o
refer erori de execuie;
n Accesa unei locaii dup ce aceasta a fost
eliberat rezultate imprevizibile n
execuie.

Programare procedural 10
Tipul pointer sintaxa
n Declaraie
pointer la tipul T = T*
n Operaii
* (indirectarea) *p = obiectul de tip T referit de
p (p este de tip pointer la T)
& (adresa lui) &p = obiectul de tip pointer la T
(p este de tip T) care refer pe p, deci cu alte
cuvinte, adresa lui p

Programare procedural 11
Tipul pointer
n Operaii
++, -- incrementarea i decrementarea
valorilor de tip adres.
Operaii de comparare
n n C, C++ parametri se transmit
ntotdeauna funciilor prin valoare
n Apelul prin referin se poate simula
folosind explicit pointeri

Programare procedural 12
Tipul pointer
n Pentru tipurile fundamentale e suficient
transmiterea prin valoare
n Pentru tipuri definite de utilizator nu e de
dorit s transmitem instane ale lor prin
valoare (pt. c acestea pot avea
dimensiune mare)
n !!! Tablourile se transmit ntotdeauna prin
referin

Programare procedural 13
Tipuri procedurale
n Tip procedural = tip de date cu domeniul
format din mulimea tuturor procedurilor
sau funciilor ce respect un anumit
ablon, definit n cadrul declarrii tipului
procedural n cauz.

Programare procedural 14
Tipuri procedurale
n Declaraia de tip procedural specific:
Numele noului tip procedural (opional)
Tipul i numele parametrilor formali ai
procedurilor sau funciilor ce vor respecta
ablonul
Tipul rezultatului ntors (dac e vorba despre
funcii)

Programare procedural 15
Tipuri procedurale
n O variabil procedural are
Nume
Tip(servete la verificarea consistenei folosirii ei)
Valoare (adresa codului procedurii n cauz n cadrul
programului executabil)
n numele procedurilor/funciilor declarate n program
n numele procedurilor/funciilor externe de tip compatibil cu
tipul procedural al variabilei care este iniializat

Programare procedural 16
Tipuri procedurale - C
typedef void ffp(); //definiie de tip
ffp pfp; // definiie de variabil
typedef void fpr(float a, float b, float c);
typedef float freal(float x);
typedef float ffunc(float p1, float p2, freal f);

Programare procedural 17
Tipuri procedurale - C
n n C numele unei funcii este evaluat n la
adresa de nceput a funciei n cadrul
codului compilat,
n Variabila pfp va reprezenta o cantitate de
tip adres compatibil cu orice valoare
reprezentnd numele unei funcii fr
parametri i de tip void.

Programare procedural 18
Tipuri procedurale - C
n Adresa unei funcii se obine prin simpla
specificare a numelui funciei fr
paranteze
n Aceast adres poate fi atribuit unui
pointer de funcie cu rezultat i parametri
compatibili
n Pointerul poate fi folosit pentru a apela
funcia

Programare procedural 19
Tipuri procedurale - C
int f(int, char); // declaraia funciei f
int (*pf)(int, char); /* se declar pf ca pointer la
funcie de dou argumente (int i char) ce
ntoarce un ntreg*/
int i, j; char c;

pf = f; // atribuire de adrese
j = (*pf)(i, c); // apelul funciei f folosind pf

Programare procedural 20
Tipuri structurate
n LP dispun de modaliti de agregare a
datelor
n Tipurile simple sunt atomice, indivizibile
n Tipurile structurate (compuse, agregate)
se descompun n componente sau
elemente, fiecare de un tip precizat
(simplu sau structurat)

Programare procedural 21
Tipuri structurate
n O dat structurat poate fi accesat fie ca ntreg
(global), fie pe componente
n Structura unei date stabilete relaiile care exist
ntre componentele acesteia.
n Legturi structurale fundamentale:
Mulime (nici o legtur ntre componente)
Liniar (legtur 1:1)
Arbore (legtur 1:n)
Graf (legtur m:n)

Programare procedural 22
Tipuri structurate
n Din punctul de vedere al uniformitii
structurale
Omogene (toate componentele au acelai
tip); tablou (engl. array) i mulime (engl. set);
Heterogene (elementele unei date au de
obicei componente diferite de tip); tipul de
date nregistrare (engl. record).

Programare procedural 23
Tipuri structurate
n Tablourile i nregistrrile au o structur
liniar
n Exist o prim i o ultim component,
n Toate celelalte elemente au fiecare att
predecesor, ct i succesor

Programare procedural 24
Tipuri structurate
n Tablou = agregat de elemente de acelai
tip
n Fiecare element este localizat prin poziia
pe care o ocup (indicele elementului)
n nregistrare = agregat care grupeaz de
elemente de tipuri diferite numite cmpuri
care sunt localizate prin numele lor

Programare procedural 25
Tipuri structurate
n Mulimea = structur amorf
n Conine elemente de acelai tip ce nu pot
fi localizate explicit neexistnd informaia
de apartenen a unui element la ea.
n n C nu exist tipul mulime
n n alte limbaje (Pascal) se poate folosi tipul
mulime

Programare procedural 26
Tipuri structurate
n Operaii cu tipuri structurate
construirea
n Prin regulile specifice ale limbajului
selectarea componentelor
n La tablouri prin indice
n La nregistrri prin numele componentelor

Programare procedural 27
Tipul tablou
n Elementele definitorii:
Numele (opional) = un identificator
Lista dimensiunilor = precizeaz numrul
dimensiunilor
Tipul elementului de tablou
Domeniul pentru mulimea indicilor = de tip
subdomeniu

Programare procedural 28
Tipul tablou
n Criteriile de clasificare
Numrul de dimensiuni
n Tablouri monodimensionale (vectori)
n Tablouri bidimensionale (matrici)

n Tablouri tridimensionale

n n general, tablouri d-dimensionale

Tipul elementelor

Programare procedural 29
Tipul tablou
n Criteriile de clasificare
Momentul alocrii
n statice = se aloc la compilare (sau cel puin
trebuie cunoscute dimensiunile la compilare)
n dinamice dimensiunea determinat la execuie

Posibilitatea redimensionrii
n tablourile flexibile

Programare procedural 30
Tipul tablou
n Referirea la un element al tabloului se face
prin precizarea numelui tabloului urmat
de o expresie de indice ntre paranteze
n Determinarea locaiei unui element al
tabloului n memorie se face printr-un
calcul de adres

Programare procedural 31
Tipul tablou
n Descriptorul de tablou areurmtoarele informaii:
nume numele tabloului
tip tipul elementului de tablou
lung lungimea reprezentrii unui element de tablou
(n uniti de alocare)
adrs adresa de unde ncepe memorarea tabloului
nrd numrul de dimensiuni al tabloului
pentru fiecare dimensiune, limitele lim_inf_i i
lim_sup_i (1 <=i<=nrd).

Programare procedural 32
Tipul tablou
n Tabloului i se aloc locaii consecutive de
memorie - ocup o zon compact
n A(li:ls)
loc(A(i)) = adrs + (i - li)*lung

Programare procedural 33
Tipul tablou
n B(li1:ls1, li2:ls2)
n Memorat pe linii
loc(B(i,j)) = adrs + (i-li1)*(ls2-li2+1)*lung + (j-li2)*lung
loc(B(i,j)) = adrs li1*(ls2-li2+1)*lung li2*lung+
(constant)
+j*lung + i*(ls2-li2+1)*lung
Memorat pe coloane
loc(B(i,j)) = adrs + (j-li2)*(ls1-li1+1)*lung + (i-li1)*lung
loc(B(i,j)) = adrs li2*(ls1-li1+1)*lung li1*lung+
(constant)
+i*lung + j*(ls1-li1+1)*lung

Programare procedural 34
Tipul nregistrare
n Elementele definitorii ale unei nregistrri
sunt:
numele i tipul nregistrrii
numrul de cmpuri
numele i tipul fiecrui cmp
n nregistrarea = modalitate de agregare
(punere mpreun a unor date de tipuri n
general diferite)

Programare procedural 35
Tipul nregistrare
n Numrul de cmpuri este dedus din lista de
declarare a cmpurilor
n Cmpurile se memoreaz n zone de memorie
adiacente
n Tipul cmpului servete la stabilirea lungimii de
reprezentare
n Numele cmpului servete la accesarea valorii
lui (prin operaia de selectare)

Programare procedural 36
Tipul nregistrare
n n C:
Structuri (struct) - au o structur fix
Uniuni (union) - un fel de nregistrare cu structur
variabil
n Elementele ce trebuie considerate:
maniera de declarare
maniera de accesare a cmpurilor acestora
iniializarea
operaiile permise pentru variabilele de tip nregistrare

Programare procedural 37
Tipul nregistrare - C
n Sintaxa:
struct [nume] {[tip nume_var];

}[variabile];
nume, variabile sunt opionale (cel puin una trebuie
s apar)
n Exemplu:
struct { char nume[30];
int varsta; float gr; } cineva;

Programare procedural 38
Tipul nregistrare
n Atribuirea unui nume pentru structur:
struct persoana{ char nume[30];
int varsta; float gr; };
struct persoana cineva, altcineva[20];
struct persoana Noi[10], *Voi[10];

n Definirea unui nume de tip pentru structur:


typedef struct { char nume[30];
int varsta; float gr; } persoana;
persoana cineva, altcineva[20];

Programare procedural 39
Tipul nregistrare
n Operaiile permise asupra structurilor sunt:
selectarea unui cmp (prin operatorul .);
obinerea adresei unei structuri (prin &);
determinarea lungimii unei structuri (prin
sizeof);
atribuirea unei structuri (prin =).

Programare procedural 40
Tipul nregistrare
struct pers {int a; char b;} p1, p2 = {2, b}; //
iniializare

p1 = p2; // atribuire de structuri

n Notaia ps->camp este echivalent cu


(*ps).camp.

Programare procedural 41
Tipul nregistrare
n Exemplu:
struct{ int x; int *y } *p;

++p->x incrementeaz pe x, operatorul ->


areprioritate mai mare dect ++;
(++p)->x incrementeaz mai nti pe p i apoi
acceseaz elementul x din structura nou pointat;
(p++)->x se acceseaz nti x apoi se incrementeaz
p;

Programare procedural 42
Tipul nregistrare
struct{ int x; int *y } *p;

*p->y indic coninutul adresei pointat de y;


*p->y++ acceseaz nti ceea ce pointeaz y
i apoi incrementeaz y;
(*p->y)++ incrementeaz ceea ce pointeaz y;
*p++->y acceseaz ceea ce pointeaz y i
apoi incrementeaz pointerul p

Programare procedural 43
Tipul nregistrare - uniuni
n Uniunile permit utilizarea n comun a unei
zone de memorie de ctre mai multe
obiecte (numite membri) de tipuri diferite
n Sintaxa:
union
nume_uniune {[tip
nume_var]}[decl_variabile];

Programare procedural 44
Tipul nregistrare - uniuni
n Exemplu:
union amestec {int i; float f; char *psir;}X;
n sizeof(X) ?
X.i
X.f
X.psir

Programare procedural 45
Tipul nregistrare - uniuni
n O uniune este o structur n care toi
membri au deplasamentul zero, structura
fiind suficient de mare pentru a putea
pstra pe cel mai mare membru

Programare procedural 46
Tipuri de date definite de utilizator

n POO

Programare procedural 47
Programare
procedural
Expresii
Curs 11

Programare procedural 1
Coninuturi

n Generaliti
n Precedena operatorilor
n Arborele unei expresii
n Clase de operatori i expresii
n Conversia explicit, implicit
n Modaliti de evaluare a expresiilor

Programare procedural 2
Generaliti
n Expresia = element de baz prin care se
precizeaz calculele
n Expresia = secven de operanzi i
operatori, care exprim un proces de
calcul
n O expresie poate avea o valoare,
determinat prin procesul de evaluare

Programare procedural 3
Generaliti
n La evaluarea unei expresii pot aprea
efecte secundare
n Criterii de clasificare a expresiilor:
Numrul de operanzi;
Poziia operatorului n raport cu operanzii;
Tipul rezultatului;
Semantic.

Programare procedural 4
Operatori
n n funcie de numrul de operanzi:
Expresii unare un singur operand;
Expresii binare doi operanzi;
N-are n operanzi.

n Numrul de operanzi = o caracteristic a


unui operator numit aritate

Programare procedural 5
Operatori
n Clasificare expresiilor n funcie de poziia
operatorilor:
infix operatorul ntre operanzi;
n E1 op E2
prefix operatorul naintea operanzilor;
n op E1 E2
postfix operatorul dup operanzi
n E1 E2 op

Programare procedural 6
Operatori
n Exemplu (x + y) * z :
infix:(x + y) * z
prefix: *+ x y z
postfix: x y + z *

n n notaia prefix i postfix nu sunt necesare


parantezele - operanzii fiecrui operator
se pot determina fr ambiguiti

Programare procedural 7
Precedena operatorilor
n Rezolvarea ambiguitilor n notaia infix
se face prin dou reguli:
Precedena operatorilor;
Asociativitatea operatorilor (pentru operatorii
cu aceeai preceden).
n Exemplu care folosete doar prima regul:
a + b * c reprezint a + (b * c)
a * b + c reprezint (a * b) + c

Programare procedural 8
Precedena operatorilor
n Asociativitate
La stnga
n Exemplu: a + b + c este interpretat ca (a + b) + c
La dreapta
n Exemplu: a = b = c este interpretat ca a = (b = c).
n Asociativitatea operatorilor se aplic doar
n situaia cnd acetia au aceeai
prioritate

Programare procedural 9
Prioritatea i asociativitatea
operatorilor n limbajul C
Operatorul Descriere Asociativitate
1. () Apel de funcie de la stnga la
[] Accesare element tablou dreapta
-> Selectare membru structur prin pointer
. Selectare membru structur direct
2. ! Negare logic de la dreapta la
Unari ~ Complement pe bii stnga
++ Preincrementare sau postincrementare
-- Predecrementare sau postdecrementare
+ Plus unar
- Minus unar
* Indirectare
& Adres
(tip) Cast
sizeof Returneaz dimensiunea operandului

Programare procedural 10
Proritatea i asociativitatea
operatorilor n limbajul C
3. * nmulire de la stnga la dreapta
Multiplicativi / mprire
% Rest

4. + Plus binar de la stnga la dreapta


Aditivi - Minus binar

5. << Deplasare la stnga de la stnga la dreapta


Deplasare >> Deplasare la dreapta

Programare procedural 11
Proritatea i asociativitatea
operatorilor n limbajul C
6. < Mai mic de la stnga la dreapta
Relaionali <= Mai mic sau egal
> Mai mare
>= Mai mare sau egal
7. == Egal de la stnga la dreapta
Egalitate != Diferit
8. & I pe bii de la stnga la dreapta

9. ^ XOR pe bii de la stnga la dreapta

10. | SAU pe bii de la stnga la dreapta

Programare procedural 12
Proritatea i asociativitatea
operatorilor n limbajul C
11. && I logic de la stnga la dreapta

12. || SAU logic de la stnga la dreapta

13. ? : a ? x : y (if a then x else y) de la dreapta la stnga


Condiiona
l
14. = += -= de la dreapta la stnga
Atribuire *=/= %=
&= ^=
|=
<<= >>=
15. , de la stnga. la dreapta
Virgul

Programare procedural 13
Arborele unei expresii
(a + b) *
(c * d * e 4 / f)

n Prefix:
*+ab-**cde/4f
n Afix:
a+b*c*d*e4/f
n Postfix:
ab+cd*e*4f/-*

Programare procedural 14
Clase de operatori i de expresii
n Aritmetici n Operatorul de
n Relaionali determinare a domeniului
n Logici de vizibilitate (engl. scope
resolution operator)
n Pe mulimi
n Conversie explicit
n Pe iruri de caractere
n Atribuire
n Pe iruri de bii
n Condiional
n Pe pointeri
n Operatorul virgul.

Programare procedural 15
Clase de operatori i de expresii
n Operatori aritmetici se folosesc la
construirea expresiilor aritmetice.
n Operanzii trebuie s fie de tipuri numerice,
n Rezultatul evalurii este de tip numeric.
n Fiecare limbaj posed propriile reguli de
efectuare a calculelor i de stabilire a
tipului rezultatului.

Programare procedural 16
Clase de operatori i de expresii
n Operatori relaionali se aplic unor
operanzi de tipuri variate, producnd un
rezultat Boolean.
n n C nu exist tipul boolean. Orice valoare
ntreag diferit de zero este tratat ca
true i valoarea ntreag zero este tratat
ca false.
n <, >, <=, >=, == (egalitate), != (inegalitate).

Programare procedural 17
Clase de operatori i de expresii
n Operatori logici au de regul operanzi de
tip boolean i ntorc un rezultat de tip
boolean.
n Operatorii logici n C:
&& (i logic), || (sau logic), ! (negaie logic
operator unar).
Opereaz asupra unor ntregi iar rezultatul
este zero (false) sau unu (true).

Programare procedural 18
Clase de operatori i de expresii
n Operatori pe mulimi au operanzi de tip
mulime
n ntorc un rezultat de tip mulime.
n Exist doar n limbajele ce suport tipul
mulime.
n Limbajul C nu suport acest tip de date.

Programare procedural 19
Clase de operatori i de expresii
n Operatori pe iruri de caractere operatori
pentru lucrul cu iruri de caractere + pentru
concatenarea a dou iruri
n C nu are un tip de date special pentru iruri de
caractere
n String-urile sunt simulate prin tablourilor
unidimensionale de caractere.
n Biblioteca standard C conine o serie de funcii
pentru operaii cu iruri

Programare procedural 20
Clase de operatori i de expresii
n Operatori pe iruri de bii lucreaz la
nivel de reprezentare pe bii, aplicnd
operaiile logice cunoscute biilor
corespunztori
n Valorile biilor (0 i 1) se consider la
aplicarea operaiilor drept valori de adevr.
n Acest tip de operatori este specific
limbajelor de asamblare.

Programare procedural 21
Clase de operatori i de expresii
n C i C++ LP orientate pe aplicaii sistem
n Au fost prevzute cu acest gen de operaii
care permit accesul la memorie la nivel de
bit.
n Operatori pe iruri de bii n C
<<, >> deplasare stnga, dreapta
&, |, ^ - SI, SAU, SAU EXCLUSIV (XOR)
~ negaie

Programare procedural 22
Conversie explicit i implicit
n Pentru conversii explicite n C exist
operatorul cast: (tip)
n Exemplu:
char * p = (char*)0777;
n O conversie de tip trebuie evitat dac nu
este necesar pentru c ngreuneaz
nelegerea programelor

Programare procedural 23
Conversie explicit i implicit
int i = 1;
char* pc = "asdf";
int* pi = &i;
i = (int)pc;
pc = (char*)i; // pc i poate schimba valoarea.
// pe unele maini sizeof(int) este mai mic dect
//sizeof(char*)
pi = (int*)pc;
pc = (char*)pi; // pc i poate schimba valoarea.
// pe unele maini un char* se reprezint altfel
// dect un int*
Programare procedural 24
Conversie explicit i implicit
n Orice pointer se poate atribui (fr
conversie explicit de tip) la un void*,
n Un void* se poate converti explicit la un
pointer de orice tip.

Programare procedural 25
Conversie explicit i implicit
n Conversia implicit apare cel puin n
urmtoarele situaii:
la operaia de atribuire;
la apelul unui subprogram, n cadrul
procesului de evaluarea a parametrilor;
la evaluarea unei expresii mixte.

Programare procedural 26
Operatorul condiional
expr_logic? expr_adev: expr_fals
n echivalent semantic cu:
if(expr_logic) expr_adev; else expr_fals;

n Exemplu:
max = (a>b)?a:b;

Programare procedural 27
Operatorul virgul
n n C i C++ virgula este:
epxr1, expr2, , exprN
n Se evalueaz de la stnga la dreapta
expresiile.
n aloarea final atribuit expresiei secven
este cea a expresei exprN

Programare procedural 28
Operatorul virgul
n Pentru:
int x = 6, y = 7, z, w;
w = (z = y+x, y = y-x, x = x*y-z, x+y+z);
n Vom obine:
x = -7; y = 1; z = 13; w = 7;

Programare procedural 29
Evaluare a expresiilor logice
n Evaluare scurtcircuit
e:=x and y, dac x = false, atunci e := false
e:=x or y, dac x = true, atunci e := true
n Efecte benefice
pentru timpul de execuie (se elimin unele
operaii inutile)
pentru fiabilitatea programului (se evit
unele situaii de excepie)

Programare procedural 30
Programare procedural
Instruciuni i controlul
execuiei
Curs 12

Programare procedural 1
Coninuturi

n Instruciunea de atribuire
n Instruciunea compus
n Instruciuni condiionale (de ramificare,
de selectare)
n Instruciuni de ciclare
n Instruciuni de transfer

Programare procedural 2
Instruciuni
n Instruciuni sau comenzi = descriu operaii
ce trebuie executate de un program scris
ntr-un limbaj de programare (imperativ)
n Pe lng instruciuni putem avea:
declaraii
directive de compilare

Programare procedural 3
Instruciuni
n n funcie de semantica :
de atribuire
de intrare-ieire (transfer ntre memorie i
dispozitivele periferice de regul prin fiiere)
de control

Programare procedural 4
Instruciuni
n Execuia unui program scris ntr-un limbaj
de programare imperativ = ir de
transformri ale valorilor unor locaii de
memorie
n Execuia este controlat de mecanisme
care determin ordinea de execuie a
instruciunilor

Programare procedural 5
Instruciunile de control
n Instruciuni condiionale
n Instruciuni de ciclare
n Instruciuni de lucru cu subprograme
declararea de subprograme
apelarea subprogramelor inclusiv revenirea

n Instruciuni de transfer (salt)

Programare procedural 6
Instruciuni
n Din punctul de vedere al structurrii:
Instruciuni simple realizeaz o aciune bine
precizat semantic
Instruciuni compuse format din mai multe
instruciuni simple delimitate de>
n begin-end
n { }

Programare procedural 7
Instruciunea de atribuire
n Forma general:
exprid opatr expr

exprid- expresie de identificare;


opatr - operatorul de atribuire;
expr - expresie.

Programare procedural 8
Instruciunea de atribuire
n Numele unei variabile are dubl identitate:
l-valoare - referin (adresa zonei de memorie
asociat variabilei)
r-valoare valoarea memorat n zona
respectiv de memorie
n x = x + 1;

Programare procedural 9
Instruciunea de atribuire - exemple

int v1, v2;


int *pv1, *pv2, *pv3;
/*situaia iniial*/
v1 = 5;
v2 = 15;
pv1 = (int*)malloc(sizeof(int));

Programare procedural 10
Instruciunea de atribuire - exemple

1. iniializarea variabilelor dinamice

*pv1 = v1; /* atribuire de valori*/


pv2 = &v2; /* atribuire de pointeri */
pv3 = pv1; /* atribuire de pointeri, salvare
necesar pentru dealocarea zonei de
memorie alocat mai sus */

Programare procedural 11
Instruciunea de atribuire - exemple
2. atribuire de pointeri

pv1 = pv2;
*pv1 i *pv2 desemneaz acelai obiect, aici v2

3. atribuire de valori *pv1 = *pv2

pv1 = pv3; /* refacerea variabilei dinamice pv1*/


*pv1 = *pv2; /* *pv1 i *pv2 au aceeai valoare fr ca pv1
i pv2 s fie egale */

Programare procedural 12
Instruciunea de atribuire - exemple

4. atribuire indirect v1 = v2 prin *pv1 = *pv2

pv1 = &v1; /* pv1 conine adresa lui v1 */


*pv1 = *pv2; /* similar cu v1 = v2 */
free(pv3); /* eliberarea memoriei */

Programare procedural 13
Instruciunea compus
n Specific faptul c instruciunile care o
compun se execut n ordinea n care
apar
n Instruciunile componente sunt tratate ca o
singur instruciune

Programare procedural 14
Instruciunea compus
n Instruciune compus = bloc (n unele
limbaje, C, C++)
Instruciunea compus nu conine declaraii
Blocul poate conine declaraii (este o unitatea
de vizibilitate)

Programare procedural 15
Instruciuni condiionale (de
ramificare, de selectare)
n Scop = alegerea unuia dintre mai multe
fluxuri de control al prelucrrii (alternative
de continuare a execuiei)
n Sintaxa:
if (expresie)
instruciune1;
[else
instruciune2;]

Programare procedural 16
Instruciuni condiionale
n expresie trebuie s fie de tip aritmetic sau
pointer
n Dac expresie este diferit de zero
atunci se execut instruciune1,
altfel se execut instruciune2.

n Partea else este opional.

Programare procedural 17
Instruciuni condiionale
n Dac n limbaj exist tipul boolean atunci
expresie trebuie s aib valoarea true sau
false.
n Instruciunea de selectare multipl switch
Alternativla if n cascad
Soluie mai elegant
Expresivitate sporit

Programare procedural 18
Instruciuni condiionale
n Alternativ care se execut se stabilete pe baza
unei expresii selector
n Valorile luate n considerare sunt etichete case
n Trebuie considerate urmtoarele aspecte:
tipul expresiei selectoare;
tipul etichetelor case;
este posibil existena etichetelor reciproc
neexclusive;
etichetele acoper toat mulimea valorilor expresiei
selectoare.

Programare procedural 19
Instruciuni condiionale
switch (expresie)
{
case eticheta1:
instructiune 1;
break;
case eticheta2:
instructiune n;
break;
...
default:
instructiune n;
break;
} Programare procedural 20
Instruciuni de ciclare
n Instruciunile de ciclare (repetitive,
iterative) realizeaz specificarea unor
procese de calcul iterative
n Pot fi
cu numr cunoscut de pai
cu numr necunoscut de pai (iteraii)

Programare procedural 21
Instruciuni de ciclare
n Din punctul de vedere al locului unde se
face testarea condiiei pentru reluarea
buclei:
cu test iniial (while)
cu test final (do ... while)

Programare procedural 22
Instruciuni de ciclare
instruciune-de-ciclare::=
while (expresie) instruciune;
do instruciune while (expresie);
for (instruciune-iniializare-for; expresie;
expresie)
instruciune;

Programare procedural 23
Instruciuni de ciclare
for (instruciune-iniializare-for; expr-1; expr-2)
instruciune;

echivalent cu:

instruciune-iniializare-for;
while (expr-1){
instruciune;
}

Programare procedural 24
Instruciuni de transfer (salt)
instruciune-de-salt::=
break; (n switch sau n instr. de ciclare)
continue; (numai n instr. de ciclare)
return expresieopt;
goto identificator;

Programare procedural 25
Programare procedural
Proceduri i transmiterea
parametrilor
Curs 13

Programare procedural 1
Coninuturi

n Abstractizare i specificare
n Proceduri
n Evaluarea i transmiterea parametrilor
n Specificarea parametrilor unei proceduri
n Noiunea de efect secundar
n Proceduri mutual recursive

Programare procedural 2
Abstractizare i specificare

n Principiului machiavelic divide et impera


este viabil n programare
n divide et impera = descompunere a unei
probleme n subprobleme

Programare procedural 3
Abstractizare i specificare

n Fiecare subproblem
este situat la acelai nivel de detaliere; ea
poate fi tratat ulterior ca o problem
distinct;
se poate rezolva independent;
soluiile se pot combina pentru a obine
soluia problemei iniiale

Programare procedural 4
Abstractizare i specificare

n Descompunere strns legat de


abstractizare
n Prin abstractizare se neglijeaz unele
informaii (nesemnificative) pstrndu-se
doar acelea considerate eseniale din
punctul de vedere al contextului aplicaiei.
n Lucruri diferite (ns totui nrudite) se pot
trata identic

Programare procedural 5
Abstractizare i specificare

n Abstractizarea prin parametrizare


presupune identificarea intrrilor i a
ieirilor, care vor constitui parametrii
formali ai problemei respective.
n Ce pot fi parametrii unei probleme?
numai date (adic realizri ale unor tipuri de
dat cunoscute) sau
tipuri de date

Programare procedural 6
Abstractizare i specificare

n Abstractizarea prin specificare se face


prin asocierea unei specificri
subproblemei, considerndu-se apoi c
orice cerere de rezolvare a subproblemei
se bazeaz pe aceast specificare, mai
mult dect pe un algoritm de rezolvare a
ei.

Programare procedural 7
Abstractizare i specificare

n Realizarea specificrii se face printr-un


cuplu de aseriuni, a cror folosire se
bazeaz pe dou reguli. Aseriunile:
necesit (pre-condiia) specific proprietile
ce trebuie satisfcute cnd se dorete
rezolvarea subproblemei;
realizeaz (post-condiia) specific
proprietile presupuse a fi ndeplinite la
terminarea rezolvrii problemei.

Programare procedural 8
Abstractizare i specificare

n Regulile specificrii afirm c:


dup rezolvarea unei subprobleme se poate
presupune c post-condiia este adevrat
se pot admite numai acele proprieti care
deriv din post-condiie.

Programare procedural 9
Abstractizare i specificare

n Abstractizarea procedural - abstractizare de


tip operaional prin care se realizeaz o nou
operaie. Permite adugarea de noi operaii
(extinderea) unui limbaj de programare
(considerat ca main virtual).
n Abstractizarea prin tipuri de date abstracte
se definesc noi clase (structuri) de date i
operaii pe aceste obiecte

Programare procedural 10
Abstractizare i specificare

n Abstractizarea prin proceduri combin


metodele abstractizrii prin parametrizare
cu cele ale abstractizrii prin specificare
n Procedura = unitate sintactic i
semantic care descrie transformarea
argumentelor furnizate la intrare n
argumente de ieire

Programare procedural 11
Abstractizare i specificare

n Din punct de vedere semantic, procedura se


poate identifica ntr-o oarecare msur cu
subproblema
n Cerine ale abstractizrii prin proceduri:
Minimalitate comportamentul trebuie precizat numai
n limitele necesare
Generalitate se obine prin utilizarea parametrilor n
locul variabilelor
Simplitate procedura trebuie s aib un scop bine
definit i uor de explicat

Programare procedural 12
Abstractizare i specificare

n Procedur bine gndit = se poate descrie


scopul ei prin numele acesteia.
n Simplitatea implic, de obicei, ca o
procedur s aib un cod de
implementare redus (de ordinul zecilor de
linii surs)

Programare procedural 13
Abstractizare i specificare

n Abstractizarea prin parametrizare servete la


identificarea datelor utilizate.
n Este definit cu ajutorul parametrilor formali.
n Ori de cte ori se apeleaz o procedur, parametrii de
apel (efectivi) trebuie n general s corespund ca
numr i semnificaie cu cei formali.
n Dou momente deosebite din viaa unei proceduri:
proiectarea
utilizarea ei.
n Lista de parametri, stabilit la proiectare, realizeaz
interfaa cu alte proceduri, ofer generalitate

Programare procedural 14
Abstractizare i specificare

n Abstractizarea prin specificare - concentrare


asupra comportamentului procedurilor scrise, cu
neglijarea detaliilor de implementare, (trebuie
gndit ce trebuie s fac procedura, i nu cum
trebuie s fac)
n Pentru o aceeai specificare se pot realiza mai
multe implementri, diferite ntre ele (n limbaje
diferite, cu algoritmi diferii).

Programare procedural 15
Abstractizare i specificare

n La schimbarea implementrii, programele


apelante nu vor trebui modificate dac
specificarea procedurii nu se schimb.
n Abstractizarea prin specificare ofer o
metod de proiectare a programelor ce
are dou proprieti importante:
localizare
modificabilitate.

Programare procedural 16
Abstractizare i specificare

n Localizarea = implementarea unei abstractizri


se poate face independent de implementarea
altora.
n Avantajele oferite
posibilitatea lucrului n echip (proceduri diferite pot fi
implementate de persoane diferite)
creterea lizibilitii (la nelegerea scopului unei
proceduri nu este necesar cunoaterea algoritmilor
folosii pentru alte proceduri apelate de ea, ci doar a
semanticii acestora).

Programare procedural 17
Abstractizare i specificare

n Modificabilitatea = limitarea efectelor unei


modificri.
n Dac implementarea unei proceduri se
modific fr modificarea specificrii,
atunci apelul procedurii nu se modific,
n Efectul modificrii se reduce numai la
implementare.

Programare procedural 18
Abstractizare i specificare

n Modificabilitatea ofer o metod de control a


performanei programelor:
se realizeaz specificarea corect i complet a
tuturor procedurilor unui program i se
implementeaz cei mai simpli algoritmi;
se execut programul, detectndu-se locurile
nguste (engl. bottlenecks), adic acele proceduri
care consum majoritatea timpului de execuie;
se rescrie codul pentru procedurile respective,
folosindu-se algoritmi mai performani.

Programare procedural 19
Abstractizare i specificare

n Proiectarea unei proceduri presupune dou etape


distincte:
specificarea definete ce au n comun diversele implementri ale
acesteia
Implementarea 2 implementri de proceduri sunt echivalente
semantic dac reprezint aceeai abstractizare; ele pot diferi din
punctul de vedere al algoritmilor folosii.
n Tehnici de sporire a lizibilitii unei implementri
menionm:
utilizarea notaiilor de la specificarea unor parametri;
utilizarea comentariilor
folosirea indentrii

Programare procedural 20
Abstractizare i specificare

n Specificarea unei proceduri conine


antetul acesteia (partea sintactic) numele procedurii
i lista de argumentelor (parametrilor), caracteriznd
numele, tipul i ordinea acestora.
descrierea aciunii (partea semantic). Se face prin
aseriunile:
n necesit (condiiile sau restriciile de utilizare;
n modific (parametrii de intrare care se modific);
n realizeaz (comportamentul procedurii).

Programare procedural 21
Abstractizare i specificare

n Din punctul de vedere al modului n care


furnizeaz rezultatul aciunii lor
Subrutin - i materializeaz efectul n
modificarea parametrilor de ieire (eventual i
a unora de intrare)
Funcii - furnizeaz un rezultat de un tip
precizat, determinat de parametri.

Programare procedural 22
Abstractizare i specificare

n Schema de specificare a unei proceduri este:


nume = proc (lista arg.) [returns (rezultat)]
necesit se precizeaz toate restriciile de
utilizare a procedurii.
modific se precizeaz argumentele care se
modific.
realizeaz descrie comportamentul procedurii.

Programare procedural 23
Abstractizare i specificare

concat = proc (a, b: string) returns (ab:


string)
n realizeaz la terminarea execuiei, ab
este un nou ir de caractere ce conine
caracterele din irul a (n ordinea apariiei),
urmate de cele din irul b.

Programare procedural 24
Abstractizare i specificare

elim_dubl = proc (a: array[int])


n modific a
n realizeaz suprimarea apariiei multiple
ale elementelor din a. Indicele inferior al lui
a rmne acelai, dar ordinea elementelor
i numrul de elemente din a se pot
modifica.

Programare procedural 25
Abstractizare i specificare

caut = proc (a: array[int], x: int) returns (i: int)


n necesit un tabel ordonat cresctor
n realizeaz dac exist un indice i pentru
care x = a[i], rezultatul este i, altfel i va fi
un ntreg cu valoarea mai mare dect
indicele superior al lui a

Programare procedural 26
Abstractizare i specificare

n Din punctul de vedere al specificrii lor, procedurile pot


fi:
totale (lipsete aseriunea necesit), deci nu exist restricii de
utilizare a lor
pariale (este prezent aseriunea necesit).
n O procedur total este definit pe tot domeniul su
(considerat ca produs cartezian al domeniilor tipurilor de
dat ce formeaz lista de parametri, n ordinea
specificrii acestora),
n O procedur parial are domeniul restrns n
conformitate cu cerinele impuse de aseriunea necesit.

Programare procedural 27
Proceduri

Programare procedural 28
Proceduri

Programare procedural 29
Proceduri

Programare procedural 30
Proceduri

Programare procedural 31
Proceduri

Programare procedural 32

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