Documente Academic
Documente Profesional
Documente Cultură
Prezentare Limbaje
Prezentare Limbaje
limbajelor de
programare
Suport de curs: 2009-2010
Autor: Lect. univ. dr. Horea Oros
Universitatea din Oradea
Departamentul de Matematic i Informatic
PP - Definiie
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).
n
Beneficii PP
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
n
Definiii
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
n
Limbaj main
Operaii aritmetice i logice,
n Operaii de intrare-ieire
n Funcii speciale, funcii de control
n Strns legat de arhitectur
0000101011110000
0010111111111111
0010000000000101
n
Limbaj de asamblare
Atribuie nume simbolice (mnemonici)
codificrilor operaiilor mainii i locaiilor de
memorie asociate
LOAD I
ADD
J
STORE K
n
K := I + J
Paradigme de programare
Colecii individualizate de caracteristici de
evaluare i criterii de abstractizare care
determin i difereniaz clasele de
limbaje de programare
n Criterii:
n
structura
programului
noiunea de stare a execuiei
metodologia programrii
Paradigme de programare
1.
2.
3.
4.
5.
Paradigme de programare
6.
7.
8.
9.
10.
Generaii de limbaje
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.
n
Primul limbaj
Ada
Istorie (cont.)
n
Asamblare
Asambloarele
Istorie (cont.)
n
IBM
Limbaj dedicat calculelor matematice
n
Istorie (cont.)
n
Mac Carthy
Limbaj funcional pentru procesarea listelor.
Este recursiv, nu este iterativ.
Nu exist diferen ntre cod i date.
Istorie (cont.)
n
Istorie (cont.)
n
Cobol - 1960
COmmon
Istorie (cont.)
n
Basic 1964
Beginners
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
Istorie (cont.)
n
n
n
n
n
n
n
n
n
Istorie (cont.)
n
Sql - 1970+
Standard
Query Language
IBM Limbaj pentru interogarea bazelor de
date relaionale.
SELECT * from table where ...
n INSERT INTO ....
n UPDATE ...
n
Istorie (cont.)
n
Istorie (cont.)
n
Istorie (cont.)
n
Istorie (cont.)
n
Istorie (cont.)
n
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
Proiectarea i specificarea
software-ului
n
Implementarea
n
n
Certificarea
n
n
n
n
Certificarea (cont.)
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
n
ntreinerea
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.
n
Factorii externi
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
n
Factori interni
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.
n
Modele de proces
Modelul Cascad
n Modelul Spiral
n Modelul MSF
n
Modelul cascad
n
n
n
Milestone
n
Milestone
Milestone
Milestone
Modelul Spiral
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
n
Modelul MSF
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
n
Triunghiul compromisurilor
Deadline
Resurse
Funcionalitate
Programare
procedural
Elemente lexicale i de sintax ale
limbajelor de programare
Curs 3
Programare procedural
Limbaj de programare,
program surs
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
n
Programare procedural
Procesul de traducere
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.
n
Programare procedural
Programare procedural
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
Setul de caractere
n
n
n
n
Programare procedural
Programare procedural
Exemplu
n
Programare procedural
Separatori
Separatorii uzuali (spaiile albe)
n Comentariile:
n
Text
/*...*/
Linie //
Alte limbaje { }
HTML <!-- ... -->
(Sunt ignorate n procesul de analiz lexical )
Programare procedural
10
Programare procedural
11
Programare procedural
12
Identificatori
n
Definii de utilizator
Programare procedural
13
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
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.
n
Programare procedural
16
Simbolurile speciale n C
Operatori sau semne de punctuaie: ! % ^
&*()-+={}|~[]\;:<>?,./
n Operatori (fiecare considerat un singur
token): -> ++ -- << >> <= >= == != && || *=
/= %= += -= <<= >>= &= ^= |=
n Tokeni folosii de preprocesor: #
n
Programare procedural
17
Literali (ad-litteram?)
Literal = o valoare constant de tip
numeric sau caracter.
n Constante:
n
numerice
(ntregi i reale)
caracter
ir
de caractere
18
Zecimal
19
= char
Valoarea = valoarea codului ASCII al
caracterului
n
20
Secvene escape
Caracter ASCII
NL new line
HT tab orizontal
VT tab vertical
BS backspace
CR carriage return
FF form feed
BEL bell
\
?
nr. octal
nr. hexa
secvena escape
\n
\t
\v
\b
\r
\f
\a
\\
\?
\
\ooo
\xhh
Programare procedural
21
Constante reale
n
Constantele reale au
n
n
n
parte ntreag,
marc zecimal,
parte fracionar,
marc exponent (e sau E)
exponent ntreg cu semn.
22
Constantele ir de caractere
n
n
n
n
23
Elemente de sintax
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.
n
Programare procedural
24
Programare procedural
25
Programare procedural
26
Programare procedural
27
Programare
procedural
Traducerea programelor
Curs 4
Programare procedural
Limbaj de programare,
program surs
n
Programare procedural
Translatoare
Compilatoarele,
n Asambloarele
n Interpretoarele
n
Programare procedural
Compilatoare - asambloare
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
n
Programare procedural
Link-editarea
n
Programare procedural
Interpretor
n
Programare procedural
Preprocesor - macroprocesor
Traduc PS din limbaje de nivel nalt n PD
scrise tot n limbaje de nivel nalt,
compilabile.
n De ex. preprocesorul C #include...
n
Programare procedural
Cross-compilatoarele
Cross-asambloarele
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)
n
Programare procedural
Compilarea
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
n
Programare procedural
Programare procedural
10
SINTEZ
ir de atomi
lexicali
Analiz
lexical
Arbore
sintactic
Analiz
sintactic
Tratarea erorilor
Cod
intermediar
Analiz
semantic
Cod intermediar
optimizat
Optimizare
de cod
Generare
de cod
Cod obiect
Gestiunea tabelelor
Programare procedural
11
Analiza lexical
n
Programare procedural
12
Analiza sintactic
n
Programare procedural
13
Analiza semantic
n
14
Programare procedural
15
Programare procedural
16
se continu cu ignorarea
elementului ce conine eroarea;
Se ncearc corectarea erorii
Se abandoneaz procesul de traducere.
Programare procedural
17
inteligent
erori fatale, care provoac abandonarea procesului
de compilare.
Programare procedural
18
Gestionarul de tabele
n
Programare procedural
19
Gestionarul de tabele
n
20
Uniti de program
n
principal
Unul sau mai multor subprograme
n
Comunicarea prin:
Parametri,
n Variabile globale.
n
Programare procedural
21
Program - subprogram
n
2 pri
partea
n
partea
Programare procedural
22
Compilare separat
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)
n
Programare procedural
23
Link-editarea
n
Programare procedural
24
Execuia programelor
n
25
Sisteme de operare
n
SO interactive
Comunicaia
Comenzi
Multitasking, multithreading
Programare procedural
26
rezultatului 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
Visual Studio de la Microsoft,
n Builder de la Borland
n Eclipse
n ZEND Studio (PHP)
n
Programare procedural
28
Interpretarea
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
n
Programare procedural
29
Programare
procedural
Declaraii
Curs 5
Programare procedural
Coninuturi
Rolul identificatorilor ntr-un program
n Domeniu de vizibilitate
n Semantica unei declaraii
n
Programare procedural
simbolice
tipuri de date
variabile
subprograme
module
programe
cmpuri n nregistrri
Programare procedural
Identificatori
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.
n
Programare procedural
Domeniu de vizibilitate
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
n
Programare procedural
Programare procedural
Identificatori locali
declarat
Identificatori globali
DV
Programare procedural
Universul unui LP
n
n
Programare procedural
Nume
Tip
Valoare
Modificabilitate
Programare procedural
Programare procedural
10
11
Declararea
i folosirea variabilelor,
Verificarea consistenei expresiilor de acel tip
Programare procedural
12
Programare
procedural
Declaraii
Curs 6
Programare procedural
Coninuturi
Declaraii de constante
n Declaraii de tipuri de date
n Sisteme de tipuri
n Clasificarea tipurilor de date
n Declaraii de tipuri n C
n
Programare procedural
Declaraii de constante
n
n
:= 3.1415
Ofer
Uurin
n scrierea programelor
Expresivitate
Flexibilitate - PI := 3.141592653595
Programare procedural
Declaraii de constante
n
n
n
Programare procedural
Declaraii de constante
n
n
n
n C nu exist constante
Ele sunt simulate prin macrodefiniii tratate de
preprocesorul C
Dezavantaj
Ex.
#define TBLSIZE 100
#define TBLMAX (TBLSIZE - 1)
Programare procedural
Declaraii de constante
n
Programare procedural
Declaraii de constante
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:
n
Programare procedural
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
Exemple
const char* step[3] = {left, right, hop};
n
n
n
Programare procedural
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
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>.
n
Programare procedural
11
Programare procedural
12
Programare procedural
13
Sisteme de tipuri
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
n
Programare procedural
14
Sisteme de tipuri
n
Programare procedural
15
Sisteme de tipuri
n
tipului expresiei
verificarea consistenei instruciunilor (de
atribuire, apel) prin
compatibilitatea tipurilor;
n egalitatea tipurilor, includerea tipurilor;
n echivalena tipurilor;
n concordana listelor de parametri (formali i
actuali) n apelul de subprograme.
n
Programare procedural
16
Sisteme de tipuri
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,
n
Programare procedural
17
Sisteme de tipuri
n
18
Sisteme de tipuri
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.
n
Programare procedural
19
Sisteme de tipuri
n
n
n
20
Sisteme de tipuri
n
21
Sisteme de tipuri
n
LP puternic tipizat
LP slab tipizat
Programare procedural
22
de abstractizare
prezena sau absena numelui tipului
prezena n (sau absena din) definiia limbajului;
momentul verificrii tipului
caracteristicile tipurilor (domeniu, operaii)
Programare procedural
23
Programare procedural
24
tipuri cu nume
tipuri anonime (fr nume).
Programare procedural
25
struct
{
char* nume;
int varsta;
} s;
struct Student s;
Tip anonim
Programare procedural
26
27
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]
int (*)[3]
int *()
int *f()
int(*)
(double)
int(*pf)
(double)
29
Declaraii de tipuri n C
typedef int * Tf();
Tf f;
n
n
nume-de-tip este Tf
declaraie de tip echivalent cu declaraia de variabil int *f();
Programare procedural
30
Declaraii de tipuri n C
typedef char *F(int);
// F funcie cu argument
//int care ntoarce pointer la char
char* (*(*f)[10])(int);
typedef F* A[10];
// 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
Programare procedural
32
Programare
procedural
Declaraii de variabile
Curs 7
Programare procedural
Coninuturi
Elemente definitorii ale unei variabile
n Legarea variabilelor
n Punctul de declarare
n
Programare procedural
Declaraii de variabile
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.
n
Programare procedural
Declaraii de variabile
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
n
Programare procedural
Structural
nume
set
de atribute
referin
valoare
n
Programare procedural
la compilare
modificat dinamic (la execuie)
n
Definirea atributelor
declarativ
Programare procedural
Atribute eseniale:
Domeniul
de vizibilitate
Durata de via
Tipul variabilei
Programare procedural
Programare procedural
Programare procedural
Programare procedural
10
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
Variabile dinamice
durata
Programare procedural
12
Tipul variabilei
LP
13
static
(la compilare)
dinamic (dinamic)
Programare procedural
14
Programare procedural
15
Programare procedural
16
Programare procedural
17
Set de atribute
Referin
Valoare
Programare procedural
18
Atribute X
Atribute Y
valoare
Variabile aliate
Programare procedural
19
20
Legarea variabilelor
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.
n
Programare procedural
21
Legarea variabilelor
n
Momentul legrii:
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
Programare procedural
24
Punctul de declarare
n
Programare procedural
25
Punctul de declarare
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:
n
numele
variabilei;
tipul acesteia.
Programare procedural
26
Punctul de declarare
n
Programare procedural
27
Punctul de declarare
n
Programare procedural
28
Punctul de declarare
n
29
Punctul de declarare
n
30
Programare
procedural
Declararea variabilelor C
Curs 8
Programare procedural
Coninuturi
Clase de memorie
n Etape ale lucrului cu variabile
n
Declarare
Iniializare
Folosire
Programare procedural
Clase de memorie
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
n
Programare procedural
Clase de memorie
CM util pentru determinarea domeniului
de vizibilitate i a duratei de via al var.
n CM: auto, register, extern, static
n Sintaxa:
n
<nume_clas>
<tip> <list_nume_variabile>;
Programare procedural
Clase de memorie
n
Clase de memorie
n
Clase de memorie
void main()
{
register int i;
for (i = 0; i < 1000; i++)
a[i] = i; //
}
Programare procedural
Clase de memorie
n
Exemplu:
static
int a[20];
Programare procedural
Clase de memorie
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)
n
Programare procedural
Clase de memorie
n
static intern
valoarea
Programare procedural
10
Clase de memorie
n
n afara funciilor
DV de la declarare pn la sfritul fiierului
n care apare declararea
n
11
Declararea
Iniializarea
Folosirea
Programare procedural
12
n
n
n
numele variabilelor
atributele
valorile de iniializare (dac e cazul)
Programare procedural
13
Declararea implicit
14
Programare procedural
15
16
17
Exemple:
int
a; // declaraie + definiie
extern int a; // declaraie n alt fiier
Programare procedural
18
Programare
procedural
Declararea variabilelor C
Tipuri de date
Curs 9
Programare procedural
Coninuturi
n
const
Lucrul cu pointeri
Iniializarea
Referirea variabilelor
n
Tipuri de date
Programare procedural
Programare procedural
Exemple:
int
int
int
i; // variabil ntreag
*p; // pointer la ntreg;
*const cp = &i; // pointer constant la variabila
ntreg i;
Operaii permise:
i
= ci;
*cp = ci;
pc++;
pc = cpc;
pc = p;
Programare procedural
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
Iniializarea
n
n
Variabile
Programare procedural
instruciuni
de atribuire
instruciuni specifice
Programare procedural
Programare procedural
Programare procedural
10
Tipuri de date
n
n
n
n
n
Tipuri fundamentale
iruri de caractere
Pointeri
Tipuri procedurale
Tipuri structurate
Tablou
nregistrare
Uniuni
Tipuri de date
definite de utilizator
Programare procedural
11
Tipuri de date
n
Programare procedural
12
Tipuri fundamentale
Tipuri fundamentale = tipuri baz,
corespund tipurilor main.
n Pentru TF avem identificatori predefinii
n Tipuri fundamentale (comportament)
n
aritmetice,
caracter
boolean
Programare procedural
13
Tipuri fundamentale
Tipurile aritmetice (ntregi i reale) sunt
apropiate de maina fizic
n Operaiile de baz
n
aritmetice
(expresii aritmetice)
comparare (expresii relaionale)
Programare procedural
14
Tipuri fundamentale
n
n
n
n
n
n
Programare procedural
15
Tipuri fundamentale
n
Tipurile aritmetice
tipuri
Programare procedural
16
Tipuri fundamentale
Valorile minim i maxim din domeniul
fiecrui tip sunt precizate, pentru fiecare
implementare, n fiierul header (antet)
<limits.h>
n Tipul char
n
setul
Programare procedural
17
Tipuri fundamentale
n
sau unsigned
sau unsigned
long sau short
Programare procedural
18
Tipuri fundamentale
Tip
char
sizeof
(n octei)
1
Aliniere
(multiplu de, n octei)
1
short
int
2 sau 4
2 sau 4
long
4 sau 8
4 sau 8
Programare procedural
19
Tipuri fundamentale
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
n
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};
definete a, c, d cu valoarea 0
n b i e cu valoarea 1
n f cu 3.
n
Programare procedural
22
Tipuri fundamentale
n
Tipurile reale:
float
double
long
double.
Programare procedural
23
Tipuri fundamentale
Tip
sizeof (n octei)
float
double
4 sau 8
long
double
12 sau 16
4, 8 sau 16
Programare procedural
24
Tipuri fundamentale
n
n
n
n
n
instruciune expresie,
operand stng,
expresie virgul
al treilea operand la o expresie condiionial ternar ? :
Programare procedural
25
iruri de caractere
n
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
27
iruri de caractere
n
Programare procedural
28
iruri de caractere
n
n C, C++
char
Programare procedural
29
Programare
procedural
Tipuri de date
Curs 10
Programare procedural
Coninuturi
n
Tipuri de date
Pointer
Procedural
Tipuri
structurate
Tablouri
n nregistrri
n Uniuni
n
Programare procedural
Tipul pointer
Tipul de date pointer are domeniul format
din adresele altor entiti (reprezentabile n
memorie) dintr-un program.
n Lucrul cu pointeri permite:
n
Crearea
Tipul pointer
n
Tipuri de pointeri:
cu
Programare procedural
Tipul pointer
n
n
n
n
Programare procedural
Tipul pointer
Pointerii = flexibilitatea n execuia
programului
n Programatorul are libertate de a
n
Controla
Tipul pointer
Referin ambigu = se folosete un
pointer a crui valoare refer ceva ce nu
mai este alocat n memorie
n Soluie garbage collector
n
Programare procedural
Programare procedural
10
Declaraie
pointer
la tipul T = T*
Operaii
*
Programare procedural
11
Tipul pointer
n
Operaii
-- incrementarea i decrementarea
valorilor de tip adres.
Operaii de comparare
++,
Programare procedural
12
Tipul pointer
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
n
Programare procedural
13
Tipuri procedurale
n
Programare procedural
14
Tipuri procedurale
n
Programare procedural
15
Tipuri procedurale
n
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 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.
n
Programare procedural
18
Tipuri procedurale - C
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
n
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
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)
n
Programare procedural
21
Tipuri structurate
n
n
n
22
Tipuri structurate
n
Programare procedural
23
Tipuri structurate
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
n
Programare procedural
24
Tipuri structurate
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
n
Programare procedural
25
Tipuri structurate
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
n
Programare procedural
26
Tipuri structurate
n
selectarea
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
Tipul
elementelor
Programare procedural
29
Tipul tablou
n
Criteriile de clasificare
Momentul
alocrii
Posibilitatea
n
redimensionrii
tablourile flexibile
Programare procedural
30
Tipul tablou
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
n
Programare procedural
31
Tipul tablou
n
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
Tabloului i se aloc locaii consecutive de
memorie - ocup o zon compact
n A(li:ls)
n
loc(A(i))
= adrs + (i - li)*lung
Programare procedural
33
Tipul tablou
n
n
B(li1:ls1, li2:ls2)
Memorat pe linii
Memorat pe coloane
Programare procedural
34
Tipul nregistrare
n
i tipul nregistrrii
numrul de cmpuri
numele i tipul fiecrui cmp
n
35
Tipul nregistrare
n
n
n
n
36
Tipul nregistrare
n
n C:
(struct) - au o structur fix
Uniuni (union) - un fel de nregistrare cu structur
variabil
Structuri
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)
Exemplu:
struct { char nume[30];
int varsta; float gr; } cineva;
Programare procedural
38
Tipul nregistrare
n
Programare procedural
39
Tipul nregistrare
n
Programare procedural
40
Tipul nregistrare
struct pers {int a; char b;} p1, p2 = {2, b}; //
iniializare
41
Tipul nregistrare
n
Exemplu:
struct{ int x; int *y } *p;
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;
++p->x
Programare procedural
42
Tipul nregistrare
struct{ int x; int *y } *p;
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
*p->y
Programare procedural
43
union
nume_uniune {[tip
nume_var]}[decl_variabile];
Programare procedural
44
Exemplu:
union
sizeof(X) ?
X.i
X.f
X.psir
Programare procedural
45
Programare procedural
46
POO
Programare procedural
47
Programare
procedural
Expresii
Curs 11
Programare procedural
Coninuturi
Generaliti
n Precedena operatorilor
n Arborele unei expresii
n Clase de operatori i expresii
n Conversia explicit, implicit
n Modaliti de evaluare a expresiilor
n
Programare procedural
Generaliti
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
n
Programare procedural
Generaliti
La evaluarea unei expresii pot aprea
efecte secundare
n Criterii de clasificare a expresiilor:
n
Numrul
de operanzi;
Poziia operatorului n raport cu operanzii;
Tipul rezultatului;
Semantic.
Programare procedural
Operatori
n
Programare procedural
Operatori
n
E1 op E2
prefix
n
op E1 E2
postfix
n
E1 E2 op
Programare procedural
Operatori
n
Exemplu (x + y) * z :
infix:
(x + y) * z
prefix: *+ x y z
postfix: x y + z *
n
Precedena operatorilor
n
operatorilor;
Asociativitatea operatorilor (pentru operatorii
cu aceeai preceden).
Programare procedural
Precedena operatorilor
n
Asociativitate
La
n
La
n
stnga
Exemplu: a + b + c este interpretat ca (a + b) + c
dreapta
Exemplu: a = b = c este interpretat ca a = (b = c).
Prioritatea i asociativitatea
operatorilor n limbajul C
Operatorul Descriere
Asociativitate
1.
()
[]
->
.
Apel de funcie
Accesare element tablou
Selectare membru structur prin pointer
Selectare membru structur direct
de la stnga la
dreapta
2.
Unari
!
~
++
-+
*
&
(tip)
sizeof
Negare logic
Complement pe bii
Preincrementare sau postincrementare
Predecrementare sau postdecrementare
Plus unar
Minus unar
Indirectare
Adres
Cast
Returneaz dimensiunea operandului
de la dreapta la
stnga
Programare procedural
10
Proritatea i asociativitatea
operatorilor n limbajul C
3.
Multiplicativi
*
/
%
nmulire
mprire
Rest
de la stnga la dreapta
4.
Aditivi
+
-
Plus binar
Minus binar
de la stnga la dreapta
5.
Deplasare
<<
>>
Deplasare la stnga
Deplasare la dreapta
de la stnga la dreapta
Programare procedural
11
Proritatea i asociativitatea
operatorilor n limbajul C
<
<=
>
>=
Mai mic
Mai mic sau egal
Mai mare
Mai mare sau egal
de la stnga la dreapta
7.
Egalitate
==
!=
Egal
Diferit
de la stnga la dreapta
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
6.
Relaionali
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.
Condiiona
l
? :
de la dreapta la stnga
14.
Atribuire
= += -=
*=/=
%=
&=
^=
|=
<<= >>=
de la dreapta la stnga
15.
Virgul
de la stnga. la dreapta
Programare procedural
13
Prefix:
*+ab-**cde/4f
Afix:
a+b*c*d*e4/f
Postfix:
ab+cd*e*4f/-*
Programare procedural
14
Aritmetici
Relaionali
Logici
Pe mulimi
Pe iruri de caractere
Pe iruri de bii
Pe pointeri
n
n
n
n
Operatorul de
determinare a domeniului
de vizibilitate (engl. scope
resolution operator)
Conversie explicit
Atribuire
Condiional
Operatorul virgul.
Programare procedural
15
Programare procedural
16
Programare procedural
17
Programare procedural
18
Programare procedural
19
n
n
n
20
Programare procedural
21
<<,
22
char
* p = (char*)0777;
23
24
Programare procedural
25
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
expr2, , exprN
Programare procedural
28
Operatorul virgul
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;
n
Programare procedural
29
Evaluare scurtcircuit
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
Coninuturi
Instruciunea de atribuire
n Instruciunea compus
n Instruciuni condiionale (de ramificare,
de selectare)
n Instruciuni de ciclare
n Instruciuni de transfer
n
Programare procedural
Instruciuni
Instruciuni sau comenzi = descriu operaii
ce trebuie executate de un program scris
ntr-un limbaj de programare (imperativ)
n Pe lng instruciuni putem avea:
n
declaraii
directive
de compilare
Programare procedural
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
Instruciuni
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
n
Programare procedural
Instruciunile de control
Instruciuni condiionale
n Instruciuni de ciclare
n Instruciuni de lucru cu subprograme
n
declararea
de subprograme
apelarea subprogramelor inclusiv revenirea
n
Programare procedural
Instruciuni
n
Programare procedural
Instruciunea de atribuire
n
Forma general:
exprid
opatr expr
exprid
- expresie de identificare;
opatr - operatorul de atribuire;
expr - expresie.
Programare procedural
Instruciunea de atribuire
n
x = x + 1;
Programare procedural
Programare procedural
10
11
Programare procedural
12
Programare procedural
13
Instruciunea compus
Specific faptul c instruciunile care o
compun se execut n ordinea n care
apar
n Instruciunile componente sunt tratate ca o
singur instruciune
n
Programare procedural
14
Instruciunea compus
n
Programare procedural
15
if (expresie)
instruciune1;
[else
instruciune2;]
Programare procedural
16
Instruciuni condiionale
expresie trebuie s fie de tip aritmetic sau
pointer
n Dac expresie este diferit de zero
n
atunci
se execut instruciune1,
altfel se execut instruciune2.
n
Programare procedural
17
Instruciuni condiionale
Dac n limbaj exist tipul boolean atunci
expresie trebuie s aib valoarea true sau
false.
n Instruciunea de selectare multipl switch
n
Alternativ
la if n cascad
Soluie mai elegant
Expresivitate sporit
Programare procedural
18
Instruciuni condiionale
n
n
n
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
Instruciunile de ciclare (repetitive,
iterative) realizeaz specificarea unor
procese de calcul iterative
n Pot fi
n
cu
Programare procedural
21
Instruciuni de ciclare
n
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
Programare procedural
25
Programare procedural
Proceduri i transmiterea
parametrilor
Curs 13
Programare procedural
Coninuturi
n
n
n
n
n
n
Abstractizare i specificare
Proceduri
Evaluarea i transmiterea parametrilor
Specificarea parametrilor unei proceduri
Noiunea de efect secundar
Proceduri mutual recursive
Programare procedural
Abstractizare i specificare
Principiului machiavelic divide et impera
este viabil n programare
n divide et impera = descompunere a unei
probleme n subprobleme
n
Programare procedural
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
Abstractizare i specificare
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
n
Programare procedural
Abstractizare i specificare
Abstractizarea prin parametrizare
presupune identificarea intrrilor i a
ieirilor, care vor constitui parametrii
formali ai problemei respective.
n Ce pot fi parametrii unei probleme?
n
numai
Abstractizare i specificare
n
Programare procedural
Abstractizare i specificare
n
Programare procedural
Abstractizare i specificare
n
Programare procedural
Abstractizare i specificare
n
Programare procedural
10
Abstractizare i specificare
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
n
Programare procedural
11
Abstractizare i specificare
n
Programare procedural
12
Abstractizare i specificare
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)
n
Programare procedural
13
Abstractizare i specificare
n
n
n
proiectarea
utilizarea ei.
Programare procedural
14
Abstractizare i specificare
n
Programare procedural
15
Abstractizare i specificare
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:
n
localizare
modificabilitate.
Programare procedural
16
Abstractizare i specificare
n
17
Abstractizare i specificare
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.
n
Programare procedural
18
Abstractizare i specificare
n
Programare procedural
19
Abstractizare i specificare
n
Programare procedural
20
Abstractizare i specificare
n
Programare procedural
21
Abstractizare i specificare
n
- 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
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.
n
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)
Programare procedural
26
Abstractizare i specificare
n
27
Proceduri
Programare procedural
28
Proceduri
Programare procedural
29
Proceduri
Programare procedural
30
Proceduri
Programare procedural
31
Proceduri
Programare procedural
32