Sunteți pe pagina 1din 114

Programarea

Calculatoarelor
Ce este programarea ?
• Programarea calculatorului este acțiunea
de scriere a programelor în diverse
limbaje de programare.
• Programul reprezintă o serie de
instrucțiuni ce sunt comunicate unui
calculator pentru a îndeplini o sarcină
• Programul este un produs finit al
activității de programare.
Obiective
Studiul conceptelor fundamentale ce
stau la baza limbajelor de programare.
De ce?
• Înțelegerea noțiunilor generale ale unui
limbaj de programare.
• Învățarea mai ușoară a unui limbaj de
programare nou.
• Utilizarea eficientă a oricărui limbaj de
programare.
• Rezolvarea unei probleme cu ajutorul
calculatorului.
Noțiuni generale
• Un limbaj de programare reprezintă o
notație formală prin care se specifică
anumite operații ce urmează a fi
executate de un calculator.

• Un limbaj de programare este un set


bine definit de expresii și reguli valide
de formulare a instrucțiunilor ce
urmează a fi executate de un
calculator.
Noțiuni generale
Limbajele de programare se pot
clasifica după următoarele criterii:
• După nivelul de apropiere de limbajul
natural
 Limbaje de nivel scăzut: limbajul mașină
și limbajul de asamblare;
 Limbaje de nivel mediu: C, C++;
 Limbaje de nivel înalt: C#, Java, PHP,
Prolog, Pascal, Matlab, Python etc;
Noțiuni generale

Limbaj de nivel mediu/înalt

Limbaj de asamblare

Limbaje cod mașină


• După modelul fundamental de funcționare a
programelor (modul de specificare a problemei)
 Limbaje imperative (orientate pe instrucțiuni)
 Limbaje declarative (descriptive, aplicative)
Procedurale C

Imperative C++
Limbaje de programare

Bazate pe obiecte

Procesare paralelă Java

Logice Prolog

Declarative Funcționale Lisp

Baze de date SQL


Evoluția limbajelor de programare, trecând
de la o paradigmă la alta.
• După modul de “traducere”
 Limbaje compilate: C, C++, Pascal, Java;
Avantaje
– Programul sursă este tradus în limbajul mașină =>
fișier care poate fi distribuit pe oricate calculator;
– Nu este nevoie de codul sursă pentru al executa;
– Viteza de execuție ridicată.
Dezavantaje
– Programul trebuie să fie rigid.
 Limbaje interpretate: PHP, Javascript, Matlab.
Avantaje
– Flexibilitatea sporită (nu trebuie declarate
variabilele);
– Întreținerea este simplificată (nu trebuie compilate).
Dezavantaje
– Viteza de execuție scăzută (datorită interpretării pas
cu pas a programului);
– Necesitate de distribuire a unui translator împreună
cu programul.
• După scopul pentru care au fost
proiectate
 Limbaje de uz general: C, C++, Pascal, Java,
PHP;
 Limbaje specializate: Prolog, SQL, FoxPro
• După modul de restricționare
 Limbaje tipizate (impun anumite restricții
asupra operațiilor care se aplică anumitor
date ): C, C++, Pascal, Java;
 Limbaje netipizate (oferă o flexibilitate
sporită, deoarece variabilele nu sunt
restricționate la un anumit tip de dată): PHP.
Principalele criterii pentru evaluarea
unui limbaj de programare
1. Consistența cu notația uzuală
2. Lizibilitatea și claritatea
3. Posibilitatea de verificare a programului și
detectare a erorilor
4. Portabilitatea
5. Ortogonalitate
6. Eficiența
• În general, scrierea unui program se face de către
oameni specializați, programatori, utilizând un
editor de text (notepad++, notepad2, ultraedit,
Crimson Editor) sau un mediu de dezvoltare
integrat (Turbo Pascal, Microsoft Visual Studio,
Eclipse, Delphi).

• Mediul de dezvoltare integrat (SDE – software


development environment / IDE – integrated
development environment) reprezintă un mediu
de programare (un software) care ajută
programatorul în scrierea programelor și care
înglobează un editor de text, un editor de legături
și un depanator.

• Facilitățile unui IDE:


– Evidențierea sintaxei și identare automată;
– Completarea automată a codului;
– Utilitare integrate pentru depanarea codului.
Etapele realizării unui program:
– Editarea (crearea, scrierea) programului
– Stocarea într-un fișier sursă
– Compilarea / interpretarea
– Obținerea fișierului obiect (NumeFișier.obj)
– Editarea legăturilor
– Obținerea fișierului executabil (NumeFișier.exe)
– Depanarea fișierului executabil
Etapele realizării unui program:
• Toate calculatoarele utilizate în prezent,
execută în mod direct programe în limbaj
mașină.
• În vederea executării unor programe
scrise într-un limbaj mediu sau înalt sunt
utilizate două metode: interpretarea și
translatarea.
• Interpretarea se realizează practic de
către un interpretor care citește
programul scris în limbaj de nivel înalt,
recunoaște (decodifică) instrucțiunile,
preia prima instrucțiune din program, o
transformă în limbaj mașină și o execută.
Acesta repetă procesul până la ultima
instrucțiune.
• Translatarea este un proces complex
realizat de unul sau mai multe
programe specializate (preprocesoare,
compilatoare, asambloare, editoare de
legături) care citesc în întregime
programul scris în limbaj de nivel înalt
și îl traduc în cod mașină.
• Compilatorul are rolul de a analiza
programul sursă, de al desface în
componentele sale de bază, de a crea o
reprezentare intermediară a acestuia și
pe baza ei de a sintetiza programul
obiect.
• Principalele faze ale compilării
– Preprocesare:
• înlocuirea directivelor de preprocesare
(#include, #define) - nu este specific tuturor
limbajelor.
– Compilare efectivă:
• translatarea codului sursă (preprocesat) în
limbaj de asamblare.
– Asamblare:
• translaterea fişierului în limbaj de asamblare
într-un modul obiect (cod mașină).
– Linking:
• legarea mai multor module obiect şi biblioteci
intr-un modul de sine stătător (de obicei un
fișier executabil).
Comparație
(avantaje/dezavantaje)
Interpretare
• sunt, în general, mai ușor de înțeles de
programator
• depanare facilă
• execuție lentă
Compilare
• Depanare greoaie (folosirea unui
depanator – debugger)
• Viteză mare de execuție
• Programele obiect obținute în urma
compilării nu pot fi executate de sistem în
forma respectivă.
• Se va genera un program executabil
folosind editorul de legături.
• Executarea programului este realizată prin
încărcarea acestuia, trecerea din memoria
externă (ex. HDD) în memoria internă (ex.
RAM), şi executarea acestuia.
Cum se scrie un program?
• Etapele scrierii unui program corespund pașilor
necesari a fi parcurși pentru rezolvarea unei
probleme.
– Analiza problemei (stabilirea datelor de intrare și de
ieșire);
– Elaborarea unui algoritm de rezolvare a problemei;
– Implementarea algoritmului într-un limbaj de
programare;
– Verificarea corectitudinii algoritmului implementat;
– Analiza complexității algoritmului (optimizarea).
ETAPELE REZOLVĂRII UNEI PROBLEME
Trebuie să calculăm aria uni cerc
Implementarea Verificarea corectitudinii
Analiza problemei Elaborarea algoritmului algoritmului

Ce știm? „Ne gândim” R: număr întreg % Calculează


Raza cercului cum calculăm: A: număr real aria cercului
Ce se cere? Trebuie să Citesc R R=10;
calculez aria cu
Aria cercului formula: A=pi*R2 A=pi*R^2;
A=pi*R2 Scrie A disp(A)
Algoritmi
La baza oricărui program (software) stă un
algoritm (metodă de rezolvare). Acesta preia date
din memoria dinamică a calculatorului (RAM) sau
de pe suporturi de stocare și le prelucrează.
Rezultatul prelucrării (a execuției
algoritmilor) este stocat în memoria dinamică și
ulterior poate fi afișat, memorat pe suporturi de
stocare a datelor, sau transmis către alte aplicații
software.
• Definiție: Succesiunea etapelor rezolvării unei
probleme, în ordinea parcurgerii lor, prin care
se prelucrează un set de date de intrare, în
scopul obținerii unor date de ieșire (rezultate),
se numește algoritmul problemei.
• Etapele rezolvării se mai numesc și pașii
algoritmului.
Cerințe fundamentale pentru algoritmi:

SĂ FIE CÂT
MAI SĂ FIE BINE
GENERAL DEFINIT

DATE DE INTRARE ALGORITM DATE DE IEȘIRE

SĂ FIE
SĂ FIE FINIT REZOLVABIL
• Cerințe fundamentale pentru algoritmi:

• Să fie cât mai general acoperind toate situațiile


care pot interveni în rezolvarea problemei;
• Să fie bine definit; cerințele problemei să fie
formulate clar, fără ambiguități, iar datele de
care dispune algoritmul să fie suficiente pentru
rezolvarea problemei;
• Să fie finit; algoritmul trebuie să asigure
rezolvarea cu succes la un moment dat a
problemei, oferind soluțiile problemei;
• Să fie rezolvabil, adică trebuie să aibă cel puțin
o soluție.
• Conform definiției anterioare în cadrul unui algoritm
se întâlnesc două tipuri de date:
 Date de intrare care trebuie să fie cunoscute la
intrarea în algoritm, adică la începutul execuției.
 Datele de ieșire sunt de fapt rezultatele
problemei pe care o rezolvă algoritmul respectiv,
rezultate obținute în timpul execuției
algoritmului, prin prelucrarea datelor de intrare.
• Datele prelucrate de calculator (respectiv datele de
intrare și ieșire ale unui algoritm) pot fi de mai
multe tipuri:
– Date numerice
• Numerele întregi (2, 4, -7 …);
• Numere reale (1.17, 3.25 …).
– Date alfanumerice
• litere mari și litere mici;
• Cifre;
• Spații și caractere speciale.
• În funcție de tipul lor, mulțimea operațiilor prin care
pot fi modificate, operatorii utilizați și restricții
asupra acestora, datele pot fi:
– Date predefinite (date fundamentale)
– Date definite de utilizator.
• În funcție de limbajul folosit, tipurile fundamentale
de date au alte denumiri, însă conceptual ele vizează
aceleași domenii de valori.
– Tipurile întregi = există mai multe tipuri întregi predefinite,
iar fiecare tip desemnează o submulțime a mulțimii
numerelor întregi (int, short, long)
– Tipurile reale = sunt reprezentate de o submulțime a
mulțimii numerelor reale, care poate fi reprezentată în
calculator (float, double).
– Tipul caracter = reprezintă mulțimea caracterelor
reprezentate în codul ASCII extins (unsigned char, char).
– Tipul logic = cunoscut și sub denumirea de tip boolean este
un tip enumerativ format din două valori: adevărat și fals.
Elementele specifice algoritmilor

ALGORITM

OBIECTE

DATE EXPRESII

CONSTANTE VARIABILE
Este o dată a cărei valoare nu se modifică în timpul execuției algoritmului
CONSTANTE ÎNTREGI
Număr din mulțimea Z (numere întregi)
232, +87, -1400

CONSTANTE REALE
Valori raționale, cu virgula zecimală, cu număr
finit de zecimale
CONSTANTA 2.34, -45.26

CONSTANTE CARACTER
Caractere cuprinse între apostrofuri
‘a’, ‘M’, ‘9’

CONSTANTE ȘIR DE CARACTER


Șir de caractere cuprinse între ghilimele
‘’program’’, ‘’AB#7’’
• Variabilele sunt date care își modifică valoarea pe parcursul
execuției programului.
• Numim variabilă, un obiect caracterizat prin trei atribute:
• Tip = care arată cărei mulțimi de valori aparține variabila și specifică
ce operatori pot fi utilizați
• Valoare = care variază la momente de timp diferite.
• Adresa = care specifică locația unde aceasta este stocată în memorie.
f: [-10, 10] R, f(x) = 2x+1

Codomeniu
Domeniu de
definiție Legea de asociere
x, Variabila, pentru ca
valoarea să se poate
modifica în orice moment
La nivel de algoritmi se folosesc patru tipuri, cele patru
tipuri fiind aceleași cu cele enumerate la constante. La
fel ca la matematica, variabila trebuie sa aibă un
nume, căruia îi spunem identificator de variabilă.
• Pentru efectuarea calculelor, algoritmii folosesc
expresii.
• O expresie este alcătuită dintr-unul sau mai
mulți operanzi legați prin operatori.
• De exemplu, în expresia 2 * a – b + c / 2, a, b, c
sunt operanzii iar *, -, +, / sunt operatorii.
• Operanzii reprezintă valorile care intră în calcul.
Ei pot fi constante și variabile.
• Operatorii desemnează operațiile care se
execută în cadrul expresiei.
• În timpul execuției algoritmului expresiile sunt
evaluate.
• O expresie se evaluează respectând regulile
învaţate la matematică.

* / % + -
• Evaluarea unei expresii are loc astfel: se
înlocuiesc variabilele cu valorile lor și se
efectuează calculele, obținându-se astfel
valoarea expresiei.
• Expresiile se împart în două categorii:
 Expresii aritmetice, care se construiesc așa
cum știm de la matematică, utilizând
operațiile matematice obișnuite (+, -, *, /).
 Expresii logice care se construiesc utilizând
operatorii raționali: “=”, “<“, “>”, “<=“, “>=“,
“≠“ (diferit). În funcție de limbajul de
programare folosit, apar convenții de notație
specifice pentru operatori.
– Operatorii relaționali sunt operatori binari și
se pot aplica numai operanzilor numerici,
logici și de tip caracter.
– Operațiile se efectuează în ordinea apariției
operatorilor, de la stânga la dreapta.
– Propozițiile logice sunt folosite la
construirea expresiilor logice, utilizând
operatorii logici: și (and), sau (or) și negația
logică (not).
– Rezultatul expresiilor ce conțin operatori
logici este cel prezentat în logică
matematică și descris în tabelul următor:
a b not a a or b a and b
0 0 1 0 0
0 1 1 1 0
1 0 0 1 0
1 1 0 1 1
Pașii realizării unui algoritm
ALGORITM = înlănțuirea de pași simpli, operații
distincte care descriu modul de prelucrare a
unor date (de intrare) în scopul rezolvării unei
probleme (obținerea unor date de ieșire).
1. Citirea cu atenție a enunțului problemei.
2. Identificarea datelor de intrare și a celor de
ieșire.
3. Rezolvarea problemei pe cazuri particulare
și reprezentative.
(Determinarea metodei de rezolvare, generalizarea și
înțelegerea a problemei.)
Pașii realizării unui algoritm
4. Descrierea soluției problemei în limbaj
natural.
(prezentarea metodei folosite de rezolvare în limbaj
natural.)

5. Scrierea programului într-un limbaj de


programare.
6. Testarea programului.
(Acoperirea unui număr cât mai mare de cazuri posibile
ce pot apărea utilizând cât mai multe seturi de date.)
Moduri de exprimare a algoritmilor
Algoritmul unei probleme este alcătuit dintr-o
succesiune de pași ce reprezintă etapele rezolvării
problemei. Scopul elaborării algoritmului este acela
de a scrie un program într-un anumit limbaj de
programare.
În acest scop avem la dispozitie trei forme
foarte accesibile de reprezentare a algoritmilor.

• Limbaj natural = fraze coerente în limba română


care permit obținerea unei soluții pentru o
problemă dată.

• Pseudocod = propoziții scurte cu cuvinte cheie


predefinite exprimate în engleză sau română.

• Scheme logice = diagrame de blocuri.


REPREZENTAREA ALGORITMILOR.
LIMBAJ NATURAL
Determinarea celui mai mare divizor
comun (cmmdc) a două numere naturale a și b.
• Se împarte a la b și se reține restul r.
• Se consideră ca nou deîmpărțit vechiul
împărțitor și ca nou împărțitor restul obținut
la împărțirea anterioară.
• Operația de împărțire continuă până se
obține un rest nul.
– Ultimul rest nenul (care a fost și ultimul
împărțitor) reprezintă rezultatul.
REPREZENTAREA ALGORITMILOR.
PSEUDOCODUL
• Pseudocodul = metalimbaj, adică o combinație
între un limbaj de programare de nivel înalt și
un limbaj natural.
• Un limbaj pseudocod se prezintă sub formă de
text și se bazează pe niște așa-numite cuvinte
cheie.
• Fiecare cuvânt cheie identifică în mod unic un
anumit tip de acțiune.
• Acțiunile algoritmului se reprezintă în
pseudocod prin ceea ce numim instrucțiuni.
• Ansamblul cuvintelor cheie împreună cu
regulile care trebuie respectate în folosirea lor,
alcătuiesc sintaxa limbajului pseudocod.
Reguli / Convenții de scriere
• Se scrie doar o singură declarație pe linie
– Fiecare declarație corespunde unei acțiuni pe
care o va întreprinde calculatorul
• Se capitalizează cuvintele cheie
– Cuvintele cheie se identifică ușor dacă sunt
scrise cu litere mari
• Se identează pentru a stabili ierarhia
• Se închid toate structurile de date
• Se utilizează un limbaj independent de
declarare
– Nu se va folosi nici un limbaj de programare
(cunoscut)
Comenzi de bază pseudocod
1) Comanda de atribuire
variabilă ← expresie
• Reprezintă comanda ce nu conține
cuvinte cheie și corespunde unei
operații de atribuire.
2) Comanda de citire
CITESTE lista de variabile
• Reprezintă comanda care corespunde
unei operații de citire.
Comenzi de bază pseudocod
3) Comanda de scriere
SCRIE listă de expresii
• Reprezintă comanda care corespunde
unei operații de scriere.
4)Comandă de început
START
• Reprezintă comanda de pornire a
algoritmului și nu se scrie în fiecare
pseudocod.
5)Comandă de sfârșit
• Reprezintă comanda de oprire a
algoritmului.
STOP
Comenzi de bază pseudocod
5) Structură de decizie

DACA condiție ATUNCI


instrucțiune(i)
SFÂRSIT DACA

DACA condiție ATUNCI


instrucțiune(i)
ALTFEL
instrucțiune(i)
SFARSIT DACA
Exemplu de pesudocod
Algoritmul pentru calculul ariei unui triunghi
cu formula: A=
unde b este latura de bază a triunghiului, iar h este
înălțimea corespunzătoare.
Calculatorul trebuie să preia valorile bazei și
înălțimii pe care le va memora ca variabile. Acestea
sunt datele de intrare (valorile le vom introduce de
la tastatură în timpul execuției programului).
Citirea datelor se face cu cuvântul cheie
“CITESTE” urmat de numele variabilelor care se
citesc separate prin virgulă “,” și se încheie cu
caracterul punct și virgulă “;”.
CITESTE b,h;
Evident putem folosi: CITESTE b;
CITESTE h;
Exemplu de pesudocod
De obicei, datele de intrare trebuie să respecte anumite condiții pe
care calculatorul trebuie să le testeze. În cazul nostru:
b>0 și h>0.
Pentru exemplul nostru:
DACĂ (b>0 și h>0) ATUNCI
a) Dacă această condiție se îndeplinește, este adevarată, adică
expresia logică “(b>0 și h>0)” are valoarea 1, atunci
calculatorul calculează aria pe care apoi ne-o va comunica.
Pentru calcularea ariei se introduce formula matematică printr-o
instrucțiune de atribuire :


După efectuarea calculului, calculatorul ne comunică valoarea lui
A, afișând-o pe monitor. Aceasta este o instructiune de ieșire iar în
pseudocod folosim cuvântul cheie “SCRIE” urmat de A și terminat
cu ;
SCRIE A;
Exemplu de pesudocod
b) În cazul contrar celui de la a), condiția nefiind adevarată se
va tipări de către calculator un mesaj de eroare. Cazul
contrar este simbolizat de cuvântul cheie ALTFEL.
SCRIE “Date incorecte”;
Cu aceste date enunțate realizăm primul nostru pseudocod
complet:
CITESTE b,h;
DACA (b>0 si h>0)
A←(b*h/2);
SCRIE A;
ALTFEL
SCRIE “Date incorecte”;
STOP
Condiția din linia “dacă” împreună cu tot ce urmează, adică
instrucțiunile ce reprezintă ramurile “da” și “nu”, alcătuiesc
așa numita structură de decizie sau structură de selecție.
Exemplu de pesudocod
Pseudocodul scris poate fi simplificat. Nu este neapărat
nevoie să memorăm valoarea ariei în variabila A, ci
putem să o afișăm direct, ca expresie, mai exact afișăm
valoarea expresiei (b*h/2); Așadar pe lângă valorile
variabilelor putem afișa și valori ale unei expresii.

CITESTE b,h;
DACA (b>0 si h>0)
SCRIE (b*h/2);
ALTFEL
SCRIE “Date incorecte”;
STOP
REPREZENTAREA ALGORITMILOR.
SCHEME LOGICE
• Schemele logice sunt reprezentări
grafice ale algoritmilor. Fiecărei operații
îi corespunde un simbol grafic.
• Schemele logice sunt notații grafice
formate din blocuri legate între ele prin
săgeți.
• O schemă logică descrie grafic pașii
unui algoritm.
• O schemă logică specifică prelucrările
care se execută asupra datelor.
Operații de bază
Simbolurile de bază utilizate într-o schemă logică
sunt:
 Blocul de start
 Blocul de stop
 Blocul de citire
 Blocul de scriere
 Blocul de atribuire
 Bloc de prelucrare
 Blocul de decizie
Orientarea blocurilor
• “Curg” pe pagină de sus în jos ;
• Se dezvoltă arborescent;
• Sunt legate între ele prin săgeți direcționale;
• Conectori de pagină = leagă blocuri aflate pe
aceeași foaie de hârtie (cerculețe cu numere în
ele);
• Conectori între pagini = leagă blocuri aflate pe
foi de hârtie diferite (săgeți pline cu numere în
ele).
Blocul de start START

• Este un bloc terminal;

• Este unic în cadrul unei scheme logice;

• Reprezintă punctul de pornire al


schemei;

• Are formă ovală;

• Scrie în el cuvântul predefinit start.


Blocul de stop
END

• Este un bloc terminal;

• Este unic în cadrul unei scheme logice;

• Are formă ovală;

• Trebuie atins într-un număr finit de pași;

• Marchează sfârșitul algoritmului.


Blocul de intrare Citește Citește
x,y,z x,y,z

• Se mai numește și bloc de citire;


• Oprește execuția unui program;
• Citește de la tastatură valori pe care le stochează în
variabile
(tastatura = dispozitiv de intrare);
• Este simbolizat printr-un trapez;
• Realizează transferul de date de la utilizator către
algoritm.
Blocul de ieșire Afișează
Afișează x, y, z
x, y, z

• Se mai numește și bloc de scriere;


• Are ca efect afișarea valorilor unor
variabile pe ecran (ecranul=dispozitiv de
ieșire);
• Este simbolizat printr-un trapez;
• Realizează transferul de date de la
algoritm către utilizator.
Blocul de atribuire
X←“UPC”

• are rolul de a da valori noi unor variabile;

• valorile anterioare ale acelor variabile se


vor pierde;
• unele atribuiri se pot folosi de valorile
“vechi” ale variabilei ce primește noua
valoare (ex: i=i+1  înseamnă că noul i va
fi egal cu vechiul i plus o unitate);
• Se simbolizează printr-un dreptunghi.
Blocul de prelucrare
Operații

• Execută operația specifică blocului;


• Este utilizat în general pentru operații mai
complexe, pentru a nu încărca schema logică
principală;
• Este simbolizat printr-un dreptunghi cu bare;
• În interior se scriu instrucțiuni sau un nume
care desemnează un grup de instrucțiuni.
Blocul de decizie
Nu Da
Condiție

• Este simbolizat printr-un romb;


• Are rolul de a ramifica cursul de execuție al unui algoritm;
• Algoritmul se va executa după acest bloc doar pe una din
ramurile sale:
– fie pe ramura cu DA;
– fie pe ramura cu NU.
• Decizia de a alege o ramură sau pe cealaltă se face pe baza
evaluării condiției din bloc;
• O condiție este o expresie matematică care dacă este evaluată
la valoarea zero se consideră falsă, iar dacă este evaluată la
orice altă valoare diferită de zero se consideră adevărată.
Bloc de tip conector logic

• Este simbolizat printr-un cerc;

• Are rolul de a conecta mai multe puncte din


algoritm;

Bloc conector de pagină


2

• Este simbolizat printr-un pentagon;

• Are rolul de a specifica pagina cu care se


continuă schema logică;
Exemplu de schemă logică START

Citește
Schema logică ce se a și b
asociază determinării
valorii maxime dintre
două numere Da
a>b
Nu

max=a max=b

Afișează
max

STOP
Schemă logică / pseudocod
START
CITESTE b, h;
DACA (b>0 si h>0)
Citește SCRIE (A=b*h/2);
b și h
ALTFEL
b>0
SCRIE “date incorecte”;
Da Nu
and STOP
h>0
A=b*h/2 “date incorecte”

Afișează

STOP
Corespondență schemă logică - pseudocod
SCHEMĂ LOGICĂ PSEUDOCOD

START START

Citește
a, b
CITEȘTE a, b

Scrie SCRIE a, b
a, b

X←expresie X ← expresie

Operații Instrucțiuni

DACA c ATUNCI
Instructiunea 1
ALTFEL
Instructiunea 2

STOP STOP
Care tehnică de descriere este mai bună, pseudocodul
sau schemele logice ?

SCHEMA LOGICĂ PSEUDOCODUL


• AVANTAJE • AVANTAJE
– indică modul de execuție; – limbaj apropiat de codul final;
– ușor de urmărit; – flexibilitate descrierii;
– descriere vizuală. – limbaj apropiat de cel natural.
• DEZAVANTAJE • DEZAVANTAJE
– program complex = schemă – mai puţin lizibil (mai greoi);
logică; – posibil să complice anumite
– mult prea mare, dificil de descrieri ale unor probleme
realizat; complexe.
– limitarea simbolurilor.
Operațiile pe care le efectuează un algoritm
• Declararea datelor (variabile locale sau globale)
• Intrare: preluarea unei date de la un dispozitiv de
intrare (consola, suport magnetic, etc)
• Ieşire: transferul unei date din memoria internă
către un dispozitiv de ieșire (ecran, imprimantă,
suport magnetic, etc.).
• Atribuire: x=3; y=x; y=x+y (variabila ia valoarea(=)
expresiei)
– Operaţia de atribuire se realizează astfel:
• Se evaluează expresia din partea dreaptă a semnului =
• Valoarea obținută este atribuită variabilei din stânga
(stocată în locaţia sa de memorie), care își pierde vechea
valoare
• Decizie: o întrebare ridicată de programator la un
moment dat în program, operaţie prin care, în
funcție de valoarea curentă a unei condiții, se
alege următoarea etapă a algoritmului
TEHNICI DE PROGRAMARE
• Modul în care este abordată programarea, din
punct de vedere al descompunerii
programelor.
PROGRAMAREA PROCEDURALĂ
• Descompunerea programului în proceduri sau funcţii care
sunt apelate în ordinea de desfăşurare a algoritmului.
• Procedura reprezintă un modul de program scris
independent față de programul apelant (program
principal), având un rolul de sine stătător.
• Funcția reprezintă un modul de program care este apelat
de programul principal și care la revenire returnează un
rezultat (valoarea funcției).
PROGRAMAREA STRUCTURATĂ
• Programarea structurată are ca scop
dezvoltarea unor programe ușor de realizat
în echipă, ușor de înțeles, depanat și
actualizat.
• La realizarea unui program se ține seama de
anumite principii (principiile programării
structurate)
– MODULARIZAREA
– STRUCTURAREA
Modularizarea
• Necesitatea descompunerii unei probleme
complexe (a unui program) în subprobleme mai
simple (module de program) în vederea
soluționării ușoare a acesteia.
• Modulele sunt independente unele de celelalte,
ele interacționând doar prin intermediul
programului principal.
• Modulele au o structură asemănătoare
programelor principale.
– Pot fi dezvoltate și implementate de programatori
diferiți.
– Pot fi testate, modificate și depanate în mod
independent.
• Se pot declara variabile în cadrul modulelor
(variabile locale) și pot utiliza variabile declarate în
programul principal (variabile globale).
PRINCIPIILE PROGRAMĂRII STRUCTURATE
• Algoritmul execută operații în scopul transformării
datelor de intrare în date de ieșire.
– Întrebarea care apare firesc este: în ce ordine se
execută operațiile unui algoritm?
• În mod normal succesiv, de la prima la ultima:
operația 1 → operația 2 →... → operația n
• Dar introducerea testării unei condiții poate
introduce o ramificație în algoritm, care schimbă
această ordine.
– În continuare vom vedea că există posibilitatea de a
repeta de mai multe ori execuția unei acțiuni.
• Orice algoritm se caracterizează printr-o anumită
structură, care indică ordinea de efectuare a
operațiilor.
• Prin structură înțelegem o formă de îmbinare a
operațiilor cu care lucrează algoritmii.
PRINCIPIILE PROGRAMĂRII STRUCTURATE
Orice algoritm poate fi compus din trei structuri de calcul:

1. structura secvențială - secvenţa;


Secvenţa (este cea mai întâlnită) în cadrul ei
instrucțiunile sunt executate în ordinea în care sunt scrise,
de sus în jos, secvenţial.

2. structura alternativă - decizia;


Decizia implică o întrebare ridicată de programator
la un moment dat în program. În funcție de răspunsul la
întrebare - care poate fi ori “Da”, ori “Nu” - programul se
continuă pe una din ramuri, executându-se blocul
corespunzător de operații.

3. structura repetitivă - ciclul.


Ciclul exprimă un calcul (compus din una sau mai
multe etape) care poate fi executat de mai multe ori.
Numărul de execuții este controlat de valoarea unei expresii
care se evaluează fie înainte fie după execuția calculului.
STRUCTURA SECVENȚIALĂ / LINIARĂ
În primul exemplu de pseudocod am întâlnit
toate tipurile de operații pe care le poate efectua
un algoritm: citirea datelor de intrare, luarea unei
decizii în funcție de valoarea datelor citite,
respectiv calculul ariei triunghiului (atribuirea) și
scrierea (afișarea) datelor de ieșire.
Structura liniară se poate defini astfel:
• Orice operație din categoria celor amintite
anterior constituie o structură liniară;
– Declararea variabilelor;
– Instrucțiuni de citire/scriere;
– Instrucțiuni de atribuire;
– Instrucțiuni compuse.
STRUCTURA SECVENȚIALĂ / LINIARĂ
• Pe lângă structurile amintite se pot adăuga
comentarii în cadrul algoritmului pentru a
descrie operațiile efectuate sau pentru a da
indicații necesare.

• Dacă S1 (secvența 1) și S2 (secvența 2) sunt


secvențe de orice tip, atunci este o structură
liniară de forma: S1 Declararea variabilelor

S2 Instrucțiunea 1
• Generalizând afirmația anterioară, se poate
ajunge la structura liniară alăturată. S1
S2
...
Sn
STRUCTURA SECVENȚIALĂ / LINIARĂ
Exemplu – Se dau două numere întregi de la
tastatură și se dorește calcularea sumei lor.

S1 Declararea variabilelor a, b, suma: întreg


S2 Instrucțiunea 1 CITESTE a, b;
S3 Calcul suma ← a+b;
S4 Instrucțiunea 2 SCRIE suma
S5 Instrucțiunea 3 STOP
STRUCTURA SECVENȚIALĂ / LINIARĂ
Exemplu – Se citesc valorile numerice a două
numere întregi și se dorește să se interschimbe
conținuturile lor.
S1 Declararea variabilelor a, b, c: întreg
S2 Instrucțiunea 1 CITESTE a, b;
S3 Atribuire c ← a;
S4 Atribuire a ← b;
S5 Atribuire b ← c;
S6 Instrucțiunea 2 SCRIE a, b
S7 Instrucțiunea 3 STOP
STRUCTURA ALTERNATIVĂ (DE SELECȚIE)
• Acest tip de structură poate lua o decizie în funcție de o
condiție dată.
• Structura este de forma DACA → Altfel → STOP (IF
→ ELSE → ENDIF )
– În cadrul algoritmului pentru calculul ariei unui triunghi, am
întâlnit deja o astfel de structură.

DACA expresie Da Nu
expresie
secventa_1
ALTFEL
S1 S2
secventa_2
STOP
Pașii algoritmului
– Se evaluează expresia logică;
– Dacă aceasta este adevărată se execută instrucțiunea 1;
– Dacă aceasta NU este adevărată se execută instrucțiunea 2.
STRUCTURA ALTERNATIVĂ (DE SELECȚIE)
Exemplu de la scheme logice: Maximul a două numere
întregi a și b citite de la tastatură.

CITESTE a,b; Citește


a și b
DACA (a>b)
Da Nu
max ← a; a>b

ALTFEL max = a max = b

max ← b;
Afișează
SCRIE max;
APLICAȚIE
Să se calculeze valoarea funcției matematice
f(x), pentru o valoare a lui x introdusă de la
tastatură.
: → ,
+ 1, ≤ −3
= − 2, ∈ (−3, 3)
− 4 + 5, ≥3
STRUCTURA DE SELECȚIE MULTIPLĂ
• O instrucțiune similară cu cea alternativă de tipul
DACA → Altfel (IF → ELSE), este instrucțiunea ALEGE
→ CAZUL (SWITCH → CASE) atunci când avem
secvențe imbricate complexe.
• Acest tip de structură execută selectare unei
instrucțiuni în funcție de o condiție dată.
• De multe ori poate apărea necesitatea de a alege o
secvență din mai multe posibile.
• Această alegere se va face în funcție de valoarea
unei expresii numită selector.
• În cele mai multe cazuri expresia selector este o
variabilă.
• Valorile selectorului în funcție de care alegem
secvența se vor numi cazuri.
STRUCTURA DE SELECȚIE MULTIPLĂ
START
ALEGE selector
CAZUL val_1:
secventa_1
IESIRE
CAZUL val_2:
secventa_2
IESIRE
............
CAZUL val_n:
secventa_n
IESIRE
ALTFEL
secventa_0
STOP
• Linia alege (<selector>) înseamnă “alege unul din mai
multe cazuri posibile, în funcție de valoarea variabilei
(<selector>).
• Fiecare dintre simbolurile <val_1>, <val_2>, ... , <val_n>,
reprezintă o valoare posibilă pentru <selector>.
• Fiecare “ramura”, după secvența de instrucțiuni aferentă,
urmează cuvântul cheie “IESIRE”.
– Acesta va determina compilatorul să abandoneze complet
instrucțiunea de selecție multiplă după execuția secvenței de
instrucțiuni aferentă cazului selectat.
• Pe lângă “ramurile” ce descriu cazurile, mai poate exista și
o ramură numită “ALTFEL”.
– Aceasta se va executa dacă valoarea selectorului nu este
cuprinsă în nici unul dintre ramurile anterioare <val_1>,
<val_2>, ... , <val_n>.
– Prezența ramurii “altfel” nu este obligatorie, situație în care
dacă nu este îndeplinit nici unul din cazurile date, pur și simplu
nu se execută nimic.
• Întreaga instrucțiune de selecție multiplă trebuie
cuprinsă între cuvintele cheie “inceput” și “sfarsit”.
STRUCTURA DE SELECȚIE MULTIPLĂ
Exemplu
Se citește de la tastatură valoarea variabilei x, care este selectorul
unei instrucțiuni de selecție multiplă. În funcție de valoarea lui x se
alege unul din cele patru cazuri:
• daca s-a citit x=-1, atunci se face atribuirea y ← x+2;
• dacă s-a citit x=0, atunci se execută o secvență de două
instrucțiuni: afișarea unui mesaj și atribuirea y ← x;
• dacă s-a citit x=1 atunci are loc atribuirea y ← x-1;
• dacă valoarea citită a lui x este diferită de -1, 0, 1, atunci se intră
pe ramura “ALTFEL” care conține o instrucțiune de afișare și
atribuirea y ← 100
• După cuvântul “STOP” care marchează încheierea instrucțiunii de
selecție multiplă, urmează afișarea variabilei y.
START
CITESTE x;
ALEGE (x)
CAZUL -1:
y ← x+2;
IESIRE
CAZUL 0:
scrie “Ati introdus 0”;
y ← x;
IESIRE
CAZUL 1:
y ← x-1;
IESIRE
ALTFEL
SCRIE “Nu e -1, 0, 1 “;
y ← 100;
STOP
SCRIE y;
Aplicație

Să se dezvolte un program care citește două numere a și


b, apoi afișează media aritmetică, suma pătratelor sau
suma cuburilor celor două numere, în funcție de dorința
utilizatorului.
STRUCTURA REPETITIVĂ
• Acest tip de structură execută repetarea unei instrucțiuni
în funcție de o condiție dată.
• Condiția este o expresie logică care poate fi evaluată prin
valoarea adevărat sau fals.
• Repetarea secvenței de instrucțiuni se numește iterație.
• Structurile repetitive se întâlnesc și sub numele de
structuri ciclice (cicluri).
• Există trei tipuri de structuri repetitive
– Structuri repetitive cu număr cunoscut de repetiții
(PENTRU sau FOR)
– Structuri repetitive cu număr necunoscut de repetiții
• Structură repetitivă cu test inițial
(CAT TIMP sau WHILE)
• Structură repetitivă cu test final
(EXECUTA → CAT TIMP sau DO → WHILE)
STRUCTURA REPETITIVĂ
• În matematică o problema poate avea mai multe
rezolvări, prin urmare și un algoritm poate fi
proiectat în mai multe moduri.
• Întrebare: Care dintre algoritmi este mai eficient în
rezolvarea unei probleme?
Exemplu Se citesc trei numere întregi. Să se afișeze
suma lor. S ← 0;
CITESTE x;
S ← S+x;
CITESTE x, y, z; CITESTE x;
S←x+y+z; S ← S+x;
SCRIE S; CITESTE x;
S ← S+x;
SCRIE S;
simplu dar cu risipa de
variabile.
Eficiență: Algoritm cu două variabile (în loc
de 4).
Inconvenient: aceeasi secventa de
instructiuni se repeta de trei ori.
STRUCTURA REPETITIVĂ

START
S←0;
i←1;
CAT TIMP i<=3
CITESTE x;
S←S+x;
i←i+1;
SCRIE S;
STOP

• Atribuirea S←0 dinaintea ciclului se numește inițializarea lui S.


Inițializarea se face cu valoarea 0, deoarece 0 este elementul
neutru la adunare.
Structură repetitivă cu număr necunoscut de repetiții
I. Structură repetitivă cu test inițial
Paşii algoritmului:
1. se evaluează condiţia logică;
– dacă aceasta este adevărată se trece la pasul 2;
– dacă este falsă se trece la pasul 3.
2. se execută instrucţiunile;
3. se iese din structură.

Dacă condiția este falsă la prima trecere prin blocul decizional


atunci secvența nu va ajunge să fie executată niciodată.
Dacă condiția este tot timpul adevărată algoritmul se va bloca într-o
buclă infinită, fără a mai putea ajunge vreodată la blocul de stop

CAT TIMP expresie logică


Instrucțiuni
STOP
Structură repetitivă cu număr necunoscut de repetiții

Exemplu de structură repetitivă cu test inițial


Se vor citi numere întregi până la găsirea
numărului 10. Se va afișa suma lor.

Suma ← 0;
CITESTE a
CAT TIMP a<>10
CITESTE a
Suma=Suma+a
STOP
Structură repetitivă cu număr necunoscut de repetiții
II. Structură repetitivă cu test final
Paşii algoritmului:
1. se execută intrucţiunile;
2. se evaluează expresia;
– dacă aceasta este adevărată se trece la pasul 3;
– dacă este falsă se trece la pasul 4.
3. se execută instrucţiunile;
4. se iese din structură.

Pentru a nu intra într-o buclă infinită este necesar ca cel puțin una
din variabilele ce intervin în condiție să își modifice valoarea.
Spre deosebire de structură repetitivă cu test inițial, această
structură va permite execuția secvenței cel puțin o dată indiferent
de ce valoare logică conține condiția.

EXECUTA
Instrucțiuni
CAT TIMP expresie logică
Structură repetitivă cu număr necunoscut de repetiții

Exemplu de structură repetitivă cu test final


Se vor citi numere întregi până la găsirea
numărului 10. Se va afișa câte numere s-au citit.

N ← 0;
EXECUTA
CITESTE a
N=N+1
CAT TIMP a==10
SCRIE N
STOP
Structură repetitivă cu număr cunoscut de repetiții

• O astfel de structură folosește o variabilă de tip


contor care va fi inițializată cu o valoare de început și
va fi incrementată (adunată) sau decrementată
(scăzută) până va ajunge la o valoare de sfârșit.

• Pentru a se stabili dacă s-a ajuns la valoarea de


sfârșit se va face un test.

• Condiția este evaluată după fiecare execuție a


blocului de instrucțiuni. De aceea, blocul de
instrucțiuni se execută cel puțin o dată.
Structură repetitivă cu număr cunoscut de repetiții
Pașii algoritmului:
1. se inițializează contorul;
2. se execută instrucțiunile;
3. se incrementează (decrementează) contorul;
4. se testează dacă contorul nu a ajuns la valoarea finală, caz în
care se iese din structură. Dacă nu s-a ajuns la valoarea finală
se trece la pasul 2;
5. algoritmul continuă până se ajunge la valoarea finală.
PENTRU contor=valoare inițială, incrementare, valoare finală
Instrucțiuni
STOP
Structură repetitivă cu număr cunoscut de repetiții
Exemplu – Să se afișeze suma primelor 10 numere

i, Suma: întreg
Suma ← 0;
PENTRU i = 1,10
Suma ← Suma +i
SCRIE Suma
STOP
Structură repetitivă cu număr cunoscut de repetiții
• Contorul i parcurge valorile 1, 2, .... , 10, și la fiecare pas,
pentru fiecare valoare a lui i, se execută corpul ciclului.

• Dacă facem o comparație între această variantă și


celelalte două variante anterioare. Ce observăm?

• Remarcăm faptul că cele două instrucțiuni care trebuie să


se execute la fiecare pas al ciclului și anume (CITESTE x) și
(S←S+x) sunt prezente în toate cele trei variante.
– În varianta cu ciclu cu număr fix de pași lipsește inițializarea lui
i cu 1, dinaintea ciclului (i←1), precum și incrementarea lui i
(i←i+1) din corpul ciclului.

– La o astfel de structură i valoarea inițială 1 și la sfarșitul fiecărui


pas incrementează pe i cu 1.
Transformări de structuri
CÂT TIMP EXECUTĂ …CÂT TIMP
CAT TIMP expresie logică EXECUTĂ
Instrucțiuni Instrucțiuni
STOP CAT TIMP expresie logică

PENTRU CÂT TIMP


PENTRU contor=vi., incr., v.f CAT TIMP expresie logică
Instrucțiuni Instrucțiuni
STOP STOP

PENTRU EXECUTĂ …CÂT TIMP


PENTRU contor=vi., incr., v.f EXECUTĂ
Instrucțiuni Instrucțiuni
STOP CAT TIMP expresie logică
APLICAȚII
1. Se citește un număr întreg a. Să se realizeze un
algoritm care să afișeze toți divizorii proprii ai
numărului a.
PROIECTAREA ALGORITMILOR
• Există două metode generale de
proiectare a algoritmilor, a căror denumire
provine din modul de abordare a rezolvării
problemelor:
– metoda descendentă (top-down).

– metoda ascendentă (bottom-up).


Metoda descendentă (top-down)
• Proiectarea descendentă (top-down) a
algoritmilor se referă la rezolvarea unei
probleme prin descompunerea acesteia în
mai multe subprobleme (module) ce se pot
fi rezolvate separat.
• Fiecare subproblemă presupune la rândul ei
un algoritm asemănător.
• Combinarea soluțiilor individuale ale
subproblemelor constituie soluția
problemei inițiale.
Metoda descendentă (top-down)
Avantajele / Dezavantajele
proiectării descendente
• Avantaje
– permite programatorului să reducă
complexitatea problemei (subproblemele
în care a fost descompusă fiind mai
simple).
– permite lucrul în echipă (fiecare
subproblemă poate fi rezolvată de un
membru al echipei).
• Dezavantaje
– Pot apărea erori de asamblare deoarece
fiecare membru al echipei cunoaște doar
o parte a problemei.
Metoda ascendentă (bottom-up)
• Proiectarea ascendentă (bottom-up) pornește
de la propozițiile limbajului utilizat și funcții
predefinite (subalgoritmi existenți), pe care îi
asamblează în alți subalgoritmi pentru a
ajunge în final la algoritmul dorit.
• Fiecare subalgoritm apelează un alt
subalgoritm sau transmite informații unui alt
subalgoritm, fapt ce conduce la necesitatea
cunoașterii structurii arborescente a
algoritmului principal.
Avantajele / Dezavantajele
proiectării ascendente
• Avantaje
– permite programatorului să utilizeze funcții și
algoritmi deja existenți (predefiniți în limbajul
de programare utilizat).
• Dezavantaje
– Detectarea erorilor cu privire la rezolvarea
problemei inițiale se face după asamblarea
programului (nu în faza de dezvoltare a
subalgoritmilor).
– Inutilitatea unor subalgoritmi (per ansamblu
acești algoritmi nu sunt necesari).
APLICAȚII
1. Să se determine cea mai mare valoare dintr-un șir
de n numere întregi citite de la tastatură.

2. Să se determine maximul a n numere.


Corectitudinea algoritmilor
• Cele mai întâlnite tipuri de erori ce apar
frecvent în elaborarea algoritmilor ce
trebuie identificate și remediate:
• erori în datele inițiale;
• erori reziduale;
• erori de rotunjire;
• erori de sintaxă;
• erori de metodă.
Erori în datele inițiale
• Provin din introducerea, ca valori de
intrare, a unor date de tip diferit de cel
prevăzut la elaborarea algoritmului.
• Se datorează confuziei dintre o variabilă
globală și una locală, respectiv din
utilizarea în exteriorul unei funcții, a unei
variabile declarată în interiorul unei
funcții.
Erori reziduale
• Reprezintă acele erori care rezultă din
diferența între valorile obținute efectiv
și cele așteptate a fi obținute.
Erori de rotunjire
• Eroare de trunchiere este diferența dintre
rezultatul exact (pentru datele de intrare
curente) și rezultatul furnizat de un
algoritm dat utilizând aritmetica exactă.
• Eroare de rotunjire este diferența dintre
rezultatul produs de un algoritm dat
utilizând aritmetica exactă și rezultatul
produs de același algoritm utilizând o
aritmetică cu precizie limitată (de exemplu
aritmetica virgulei mobile).
• Eroarea de calcul este suma dintre
eroarea de trunchiere și eroarea de
rotunjire, dar de obicei una dintre acestea
predomină.
Erori de sintaxă
• Reprezintă erorile cele mai frecvente și
dar și cele mai ușor de corectat.
• La rularea programelor, într-un mediu de
dezvoltare, se poate identifica și corecta
sursa erorilor.
• Cele mai frecvente erori de sintaxă sunt:
– greșeli de tastare (majuscule, inversare
litere);
– greșeli de punctuație (paranteze neînchise,
apostrof plasat greșit);
– greșeli de plasare a instrucțiunilor;
– confuzia între șirurile de caractere și valorile
numerice.
Erori de metodă
• Reprezintă erorile care apar atunci când
nu se obțin rezultatele așteptate.
• Acest tip de erori sunt generate de o
analiză superficială a aplicației, o
proiectare defectuoasă a programului,
și ca urmare de un cod sursă incorect.
• Un exemplu de erori de metodă îl
reprezintă confuzia între operatorul de
atribuire și operatorul de egalitate.
Tehnici de depanare a erorilor
A. Descompunerea în module a progra-
melor complexe
– Pentru a mări gradul de localizare a
erorilor, dar și de reutilizare a codului este
bine să limităm dimensiunea funcțiilor pe
care urmează să le creăm.
B. Urmărirea secvențială a algoritmului
– O modalitate eficientă de localizare a
erorilor este cea care constă în utilizarea
unui pseudocod corespunzător
algoritmului implementat.
Tehnici de depanare a erorilor
C. Utilizarea comentariilor
– Se recomandă inserarea comentariilor în
program pentru urmărirea mai ușoară a
logicii algoritmului și identificarea
posibilelor erori.
D. Adăugarea de instrucțiuni
– Se utilizează instrucțiuni de afișare a unor
variabile, a rezultatelor unor expresii sau
a unor mesaje pentru a verifica
executarea corectă a unor porțiuni de
program .
Tehnici de testare a programelor
• Testarea programelor reprezintă acea
etapă a programării ce are ca scop de a
pune în evidenţă proasta funcţionare a
programului și de a găsi defectele
acestuia.
• Procesul de detectare a erorilor şi de
eliminare a acestora, în vederea
funcționării programului la parametri
prevăzuți, are două componente:
– Verificarea;
– Validarea.
• Verificarea corectitudinii unui program
presupune operația de testare a
programului.
• Prin testarea programului se înțelege
executarea programului respectiv cu
scopul de a descoperi o anomalie sau
eroare.
• Testarea programului se bazează pe
construirea unor eșantioane de date de
intrare care să conducă la depistarea
unor erori în funcționarea programului
(într-un timp cât mai scurt și cu efort cât
mai mic).
• Programatorul, în această etapă,
utilizează niște date de test construite
de el pe baza cărora să obțină pe
parcurs sau la final anumite rezultate.
• Seturile de date de test trebuie
elaborate cu atenție, astfel încât
– să acopere, pe cât posibil, toate variantele
de execuție a algoritmului, inclusiv situații
de excepție.
– să verifice dacă fiecare subproblemă a
problemei date este rezolvată corect (dacă
este posibil, se va testa separat fiecare
modul de program).
Metode de testare a programelor
• Există o serie de metode de elaborare a
datelor de test, care oferă posibilitatea de
a aborda sistematic activitatea de testare
cu o probabilitate crescută de depistare a
erorilor.
• Testarea funcțională (metoda cutiei
negre), care presupune construirea datelor
de test astfel încât să permită testarea
fiecărei funcțiuni a programului;
• Testarea structurală (metoda cutiei
transparente), care presupune construirea
datelor de test astfel încât toate părțile
programului să poată fi testate.
Depanarea programelor
• Depanarea reprezintă operația ce
presupune localizarea erorii, deter-
minarea naturii sale şi corectarea ei.
• Ea se poate face în mod:
– static, după executarea programului;
– dinamic, în timpul execuției programului.
Mediile de dezvoltare actuale oferă un
depanator simbolic integrat, care permite
depanarea ușoară, plăcută și eficientă a
programelor.
Operațiile de depanare
– executarea pas cu pas a programului (un
pas înseamnă de fapt o instrucțiune
executabilă);

– observarea, în timpul execuției, a valorilor


unor variabile sau expresii specificate de
programator (care apar într-o fereastră
specială – ex: Watch Windows);

– specificarea unor puncte de suspendare a


execuției programului;

– modificarea valorilor unor variabile.


APLICAȚII
1. Să se realizeze un algoritm care să afișeze n!

2. Să se realizeze un algoritm care să afișeze al n-lea


termen din șirul lui Fibonacci

3. Să se realizeze un algoritm care care să verifice dacă


numărul n este prim.

4. Să se verifice dacă un șir de n numere este ordonat


crescător.

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