Sunteți pe pagina 1din 34

Introducere

1. Algoritmi

Cuprins

2.

Limbaje de programare

3.

Ciclul de dezvoltare al unui program

4.

Coduri

5.

Reprezentarea informaţiei în calculator

1. Algoritmi

Algoritmul:

Notiune primara folosita in mod intuitiv pentru a desemna o multime finita si ordonata de operatii

o metodă generală de rezolvare a unui tip de

problemă

presupune o mulţime finită şi ordonată de operaţii ce transformă un set de date de intare în alt set de date de ieşire

Un algoritm trebuie să fie:

clar: descriere precisă, fără ambiguităţi

universal: să se poată aplica unui număr mare, eventual infinit, de intrări

finit: în spaţiu (număr de paşi) şi în timp (ca execuţie)

Reprezentarea algoritmilor:

Limbaje dedicate formalizate ALGOL

Pseudo limbaj, conventional/neconventional

Scheme logice

Diferite diagrame: Booch sau mai general UML

Elemente de lucru:

-date

-operatori

-instructiuni

-functii -clase, etc.

Program = exprimarea algoritmilor intr-un limbaj de programare.

Studiul algoritmilor implica: elaborarea, exprimarea,

validarea, analiza

Eficienta algoritmilor prin analiza: aposteriori

(empirica), apriori (teoretica), hibrida

Tratarea algoritmilor considerand ca pot fi: liniari,

patratici, cubici, polinomiali, exponentiali, logaritmici, etc.

Tratarea se poate face pentru cazurile: cel mai

favorabil/defavorabil, mediu

2. Limbaje de programare

Programare:

ansamblul comunicării om-calculator (limbaj natural)

prin program utilizatorul transmite calculatorului un algoritm

Programarea si interactiunea cu calculatorul HMI

(Human Machine Interaction)

Programarea ca si o arta unde experienta dobandita are un rol important

Universuri implicate in procesul programarii:

-problemei (fizic) -limbajului (astral) -calculatorului (cauzal)

Limbaje de programare

Fiecare tip de calculator are un limbaj propriu

numit limbaj maşină (cod maşină):

programarea în acest limbaj este dificilă iar un program scris în acest limbaj va funcţiona numai pe

acel tip de calculator

depanarea unui astfel de program este greoaie

Din aceste motive s-au inventat limbajele de

programare (LP):

au un vocabular apropiat de limbajul natural

au reguli precise, lipsite de ambiguităţi ce le apropie

de rigurozitatea matematică

Limbaje de programare

Un LP poate fi implementat pe un anumit tip de

calculator cu ajutorul unui "compilator“:

verifică corectitudinea unui text scris într-un LP (PS- Program Sursă), duce la obtinerea unei forme intermediare in faza de analiza, şi in faza de sinteza optimizeaza codul generand Programul Obiect (PO) ce poate fi ulterior executat in faza de executie

Un LP poate fi implementat şi cu ajutorul unui "interpretor“:

analizează programul sursă şi execută fiecare instrucţiune fără a genera program obiect

Compilatoarele şi interpretoarele sunt, la rândul lor, programe

Exista limbaje de tip compilator (C/C++),

interpretor (Basic, PhP) sau mixte (Java)

Un LP poate fi definit prin sintaxa si semantica

sa:

Sintaxa: set de reguli ce guverneaza alcatuirea

programelor. Se folosesc metalimbaje, gen BNF (Backus

Naur Form)

Semantica: set de reguli ce determina semnificatia propozitiilor unui limbaj

Limbaje de programare

Programele se execută pe masini hardware şi

se mai sunt numite şi "software"

LP sunt rezultatul evoluţiei calculatoarelor dar şi rezultatul necesităţii rezolvării unor probleme

complexe

Programarea primelor calculatoare se facea in limbajul propriu al calculatorului, asa numitul cod

masina (neportabil) ce a dus la programarea

simbolica in limbaje de asamblare folosind mnemonice, ceea ce a pus problema evolutiei

lor

Clasificarea LP

după dependenţa de hardware:

Limbaje de programare

LP de nivel coborât: cod maşină, asamblare

LP de nivel înalt: nu depind de hardware

LP de nivel mediu: combină avantajele LP de nivel înalt cu funcţionalitatea LP de nivel scăzut

după prelucrările pe care le efectuează:

LP procedurale: descriu proceduri (algoritmi) precizând atât

operaţiile de efectuat cât şi ordinea acestora (Basic, Pascal,

C)

LP declarative: definesc un set de fapte şi relaţii ce permit solicitarea unor rezultate (Lisp, Prolog, SQL)

LP obiectuale: elementele de programare sunt văzute ca

obiecte ce pot să-şi transmită mesaje unul altuia (C++, C#, Java, Eiffel, Smaltalk, etc) si cu facilitati distribuite avem LP multi-agent

LP functionale, matematizabile, Haskell, ML, etc.

Considerente evolutive:

-limbaje clasice (Fortran, Basic) nu asigurau siguranta in programare

-limbaje de gestiune a Bazelor de Date, COBOL, SQL

-impartirea in module pentru a mari siguranta, MODULA

-Pascal, introduce tipizarea si compatibilitatea intre tipuri

-ADA, CHILL, MODULA-2, permit programarea concurenta

-OCCAM, C Paralel, etc., programarea paralela si facilitati multicore

-programare Web, folosind diferite tehnologii si/sau componente si servicii (C/C++, Java, PhP, Phyton, C#,

etc.)

Majoritatea utilizatorilor folosesc LP procedurale şi obiectuale

12

3. Etapele dezvoltării unui program

Programare:

activitate de elaborare a unui program

Etape:

Analiza şi specificarea

Proiectarea

Implementarea

Documentarea

Intreţinerea

Testarea

Analiza şi specificarea

Etapele dezvoltării unui program

analiza: adunarea de informaţii despre problema de

rezolvat

specificaţii: cuprind detaliat ce trebuie să facă

programul şi pun în evidenţă intrări, ieşiri, prelucrări,

interfeţe, relaţii între părţi componente

Proiectarea

împarte problema în subprobleme rezultând structura bloc a programului şi interfeţele între module

stabileşte modul de testare a validităţii proiectului

stabileşte modul de documentare

Implementarea

Etapele dezvoltării unui program

urmăreşte obţinerea produsului finit pe baza proiectului, prin codificarea şi testarea modulelor program şi integrarea acestora

programul se construieşte şi se testează treptat

Documentarea

precizează structura, scopul, prelucrările şi metodele utilizate în diverse părţi ale programului pentru a asigura întreţinerea uşoara a unui program

se realizează prin comentarii inserate în program cât şi prin documente referitoare la fazele de proiectare a

programului

Intreţinerea

Etapele dezvoltării unui program

activitatea de depanare, dezvoltare şi documentare

servicii de instruire a utilizatorilor în utilizarea programelor

Testarea programelor

are ca scop eliminarea erorilor logice din program

se realizează executând fiecare componentă cu

anumite seturi de intrare pentru care se cunosc ieşirile

testarea efectuată după implementare ocupă mai mult

de jumătate din timpul necesar realizării unui program

Etapele implementării:

scrierea programului

editarea programului:

Etapele dezvoltării unui program

cu un editor de texte; rezultă programul sursă

compilarea modulelor:

rezultă module obiect

legarea modulelor obiect (ediţie de legături sau "link- editare"):

combină modulele utilizatorului cu module din biblioteci şi generează programul executabil final

depanare program: cu un depanator

Mediu de programare: integrează fazele de editare, compilare, editare legături şi depanare

17

4. Coduri

Codul:

o corespondenţă între simbolurile a două alfabete,

având drept scop trecerea de la o formă de reprezentare a informaţiei la alta

La calculatoare, codificarea:

realizează reprezentarea informaţiei într-o formă accesibilă calculatorului pornind de la forma uzuală

de reprezentare

Cod alfanumeric

Coduri

Se foloseşte pentru reprezentarea numerelor, literelor şi altor caractere

Codul ASCII (American Standard Code for Information Interchange)

foloseşte 7 cifre binare pentru a reprezenta cifre zecimale, litere mari şi mici, semne de punctuaţie, operatori aritmetici şi logici, simboluri pentru controlul comunicării şi simboluri pentru editare

Pentru reprezentarea caracterelor speciale s-a introdus codul ASCII8 (ASCII extins) pe 8 cifre binare

Exemple:

A

- 41h

B

LF - 0ah

- 42h

a - 61h b - 62h CR - 0dh

0 - 30h 1 - 31h ESC - 1bh

Cod alfanumeric

Coduri

Codul UNICODE (din octombrie 2010- versiunea 6.x)

standard pe 32 de biti ce permite reprezentarea si manipularea textelor in majoritatea sistemelor de scriere

Cod complement

Coduri

Pentru un număr natural A cu n cifre se definesc:

B

= q n - A

C

= q n - 1 - A

B

= C + 1

Dacă q=2 atunci:

B = 2 n - A

C = 2 n - 1 - A

(C2) complement fata de 2

(C1)

Dacă n=4 şi A=3 = 0011:

2 n -1 = 15 = 1111

C1=1111-

0011

-------

1100

Aceste cifre se obţin prin complementarea fiecărei cifre a lui A

Reguli:

C1 :

Coduri

se complementează fiecare cifră binară (0->1 şi 1 ->0)

C2 :

se determină C1 şi se adună 1

Exemple :

N = 7 = 0111

C1 =

C2 =

1

1000

1000+

------

1001

Coduri

Cod BCD (Binary Coded Decimal)

Permite codificarea binară a numerelor zecimale fără

a le transforma efectiv în binar

Fiecare cifră zecimală este codificată separat în binar

Exemplu: 245 0010.0100.0101

In general se poate folosi structura:

| Semn | Nr. cifre | Cifre

|

Exemplu: -12345

1111.0101.0001.0010.0011.0100.0101

5. Reprezentarea informaţiei în calculator

In acest scop se folosesc cifrele binare 0,1 numite şi biţi

Aceştia se grupează în:

octeţi (bytes) sau

cuvinte (words) (2, 4, 8 octeţi)

Organizarea informaţiei în biţi, octeţi, cuvinte se foloseşte în toate componentele unui calculator (unitate centrală, memorie internă, dispozitive periferice)

Reprezentarea informaţiei în calculator

Alte noţiuni:

adresa: număr de ordine al unui octet (cuvânt) în memorie (L- value);

locaţia: zona din memorie rezervată unei anumite informaţii

(octet sau cuvânt ce are o valoare estimata, R-value)

Deoarece pentru reprezentarea informaţiei se folosesc cifre binare, se pot reprezenta direct numai numere naturale

Pentru reprezentarea numerelor întregi negative, a

numerelor reale sau a caracterelor se folosesc convenţii

de reprezentare

Reprezentarea informaţiei în calculator

Reprezentarea numerelor întregi negative

Deoarece nu se pot reprezenta semnele +, - , se foloseşte o cifră binară (prima din stânga) pentru

semn, cu următoarea convenţie:

0 - pozitiv

1 - negativ

Există mai multe posibilităţi dintre care s-a impus

reprezentarea în C2 (Complement fata de 2):

pornind de la un număr pozitiv (cu 0 pe prima pozitie) prin

transformare se obţine un număr negativ (cu 1 pe poziţia de

semn)

Reprezentarea informaţiei în calculator

N

= 1

0001

C1

1110 + 1

C2:

1111

-1

N

= 0

0000

C1

1111 + 1

C2:

0000

-0 (ultimul 1 se pierde)

N

= 7

0111

C1

1000 + 1

C2:

1001

-7

N = 8

1000

(nu se poate reprezenta, prima pozitie semn +, 0,

si se va elimina aceasta valoare)

C1

0111 + 1

C2:

1000

-8

Pentru 4 biţi :

-2 3 <= N <= 2 3 1

In general

n biţi :

-2 n-1 <= N <= 2 n-1 - 1

27

Reprezentarea informaţiei în calculator

Operaţii în C2

Adunarea:

se adună cele două numere în mod obişnuit, cifră cu cifră, inclusiv pentru poziţia de semn, ignorând transportul de la poziţia de semn

Scaderea:

se adună descăzutul cu C2 al scăzătorului

Inmultirea/Impartirea: se pot folosi tabele pentru simbolurile de baza

La efectuarea de operatii poate sa apara fenomenul de depasirea aritmetica (Arithmetic overflow) cand se depaseste domeniul de valori alocat numarului

Reprezentarea informaţiei în calculator

Exemple :

4

Ad:

0100+

Sc:

0100+

3

0011

1101

C2(-3) 0011

------

------

0111 =

7

1<- 0001

Reprezentarea informaţiei în calculator

Reprezentarea numerelor reale

Orice număr real X poate fi pus sub forma:

X = X' * exp

unde:

X' este mantisa şi dă precizia de reprezentare

exp este exponentul şi dă ordinul de mărime

dacă 0,5 < |X’| < 1 atunci avem forma normalizată de reprezentare dupa unele standarde

In alte standarde mantisa este subunitara dar prima cifra din stanga este diferita de zero, se spune ca avem mantisa

normalizata

In acest mecanism datorita limitarii preciziei nu se pot reprezenta toate numerele reale.

Din cauza aproximarilor facute apar erorile de rotunjire

(rounding errors)

Reprezentarea informaţiei în calculator

Formatul IEEE pe 32 biţi :

31 30 …

23 22 | Mantisa |

0

|S | Exponent

Domeniul de reprezentare:

+-(3,4x10-38

3,4x10+38)

Precizia: 7 cifre zecimale

Această reprezentare se mai numeşte şi reprezentarea

în virgulă mobilă sau flotantă

Tipuri:

simplă precizie (32 biţi)

dublă precizie (64 biţi)

precizie extinsă (80 biţi)

Reprezentarea informaţiei în calculator

Erori de reprezentare (depasire)

depăşire inferioară

depăşire superioară

Erori de rotunjire

Date si tipuri de Instructiuni in

Programare

-Tipuri de date elementare: numerice,

logice, caracter, pointer, referinte -Tipuri de date agregate (structurate):

tablouri, siruri de caractere, liste, articole, fisiere

Instructiuni

-assignare

-conditionala/generalizata (if, switch…case)

-cicluri (anterioare, posterioare): while(), for (…), do…while()

alte tipuri