Sunteți pe pagina 1din 8

UI4.

Rezolvarea problemelor
cu calculatorul.
Etape, tipuri de date și operații
elementare

CUPRINS
4.1. Etapele rezolvării problemelor cu calculatorul
4.2. Tipuri de date și operații elementare
4.3. Tipuri de date structurate - tablourile
Lucrare de verificare nr.4.

Obiective
• Prezentarea etapelor rezolvării problemelor cu ajutorul
calculatorului;
• Cunoașterea tipurilor de date și a operațiilor elementare;
• Cunoașterea tipurilor de date structurate. Exemplificare prin tablouri.

După parcurgerea unității de învățare nr. 4. cursanții vor fi capabili:

• să identifice etapele care stau la rezolvarea problemelor cu


calculatorul;
• să utilizeze tipuri de date fundamentale;
• să utilizeze tablouri ca tipuri de date structurare.
4.1. Etapele rezolvării problemelor cu calculatorul

Rezolvarea unei probleme reprezintă un proces complex. O listă a etapelor pe


care programatorul le parcurge în mod uzual în rezolvarea problemelor, poate fi
privită ca un important ajutor în obținerea unor rezultate bune.
În general, se acceptă ca fiind necesare următoarele faze în rezolvarea unei
probleme cu calculatorul:
1) analiza problemei;
2) proiectarea algoritmului de rezolvare;
3) descrierea algoritmului;
4) codificarea algoritmului (obținerea programului);
5) testarea programului;
6) execuția programului, obținerea rezultatelor şi interpretarea lor;
7) întreținerea programului.
În continuare se va prezenta fiecare etapă în parte pentru a avea o imagine clară a
modului de abordare a unei probleme cu ajutorul calculatorului.
1. Analiza problemei – în această etapă se stabilește modelul logico-
matematic al problemei, astfel:
• se identifică cu claritate funcţia (sau funcţiile) problemei,
• se stabilesc datele de intrare şi datele de ieşire.
Această etapă are ca scop principal înţelegerea cât mai exactă a problemei
de rezolvat.
2. Proiectarea algoritmului - are ca scop stabilirea algoritmului de rezolvare a
problemei, fiind etapa în care se precizează operațiile pe care trebuie să le
execute un calculator pentru a rezolva problema formulată.
În cazul problemelor complexe este recomandabilă descompunerea problemei
în subprobleme care pot fi rezolvate mai uşor. Această tehnică, numită top-down
(de sus în jos) va avea ca efect final obținerea unui sistem de module conectate
între ele după logica impusă de rezolvarea problemei.
Se pornește de la o schiță generală de rezolvare, care prin rafinare succesivă
conduce la obținerea comenzilor necesare execuției pe calculator.
Împărțirea problemei în subprobleme prezintă avantajul lucrului eficient în
echipă, deoarece subproblemele pot fi rezolvate simultan de către membrii
echipei. Totodată, obținerea modulelor program prin implementarea fiecărei
subprobleme facilitează munca de identificare a erorilor și mentenanța
programului.
3. Descrierea algoritmului
S-a constatat că, pe măsură ce creşte complexitatea problemelor de rezolvat,
creşte şi dificultatea de a descrie algoritmii de rezolvare a acestora cât mai exact,
fără ambiguităţi, utilizând un limbaj natural. Ca urmare a acestui fapt, s-a recurs
la diferite forme de descriere (diagramă de structură, scheme logice, pseudocod
etc.) care permit reprezentarea corectă a algoritmilor într-o manieră prietenoasă,
naturală, și facilitează codificarea cu uşurinţă a acestuia într-un limbaj de
programare.
4. Etapa de codificare a algoritmului
Deşi foarte multe limbaje de programare au un caracter universal, totuşi anumite
trăsături ale problemei de rezolvat pot recomanda utilizarea unui anumit tip de
limbaj, în funcție de ce tipul de prelucrări necesare, precum:
• prelucrări numerice – Octave, Matlab, Mathcad, Fortran, Pascal etc.
• prelucrările nenumerice (sortare, căutare, reuniune de fişiere etc.)
• prelucrări ale unor baze de cunoștințe – Prolog, Lisp, Ada etc.
În această etapă, o importanţă deosebită trebuie acordată stilului de programare.
Un stil de programare este adecvat, dacă îndeplineşte condiţii cum ar fi:
• programul este însoţit de documentaţia de analiză şi proiectare care trebuie
să conţină elementele minimale (descrierea funcţiilor programului,
diagrama de structură (schiţa generală a programului), tabele de descriere a
variabilelor de intrare şi ieşire etc.);
• există procedee de validare a datelor, precum: sume de control,
coduri autocorectoare, intervale de apartenenţă, scrierea cu ecou,
verificarea unor relaţii existente între variabilele de intrare etc.;
• programul este lizibil, ceea ce înseamnă că se poate realiza prin scrierea
indentată a liniilor de program, prin alegerea unor nume sugestive pentru
identificatori, prin folosirea (neabuzivă) a comentariilor etc.

5. Etapa de testare - este acea etapa în care se elimină erorile programului.


Erorile pot fi de natură sintactică sau de natură logică și se acționează
corespunzător astfel încât acestea să nu altereze funcționarea normală a
programului.
Eliminarea erorilor de natură sintactică se face în urma listelor de erori afişate de
compilatoare. Stabilirea corectitudinii din punct de vedere logic a programului se
poate face prin demonstraţie matematică sau prin testarea programului folosind
date de test.
De foarte multe ori demonstrarea matematică a corectitudinii este dificilă chiar şi
pentru programe mici, așa încât metoda uzuală este metoda datelor de test. Datele
de test trebuie alese cu grijă, astfel încât să se poată valida toate ramurile
programului (să existe mai multe studii de caz). Dacă sunt erori, se încearcă
localizarea acestora folosind diverse metode.
Metodă rapidă constă în afişarea unor mesaje din loc în loc, prin analiza cărora se
poate stabili zona unde se află eroarea. Dacă se utilizează medii moderne de
programare, care asistă programatorul în punerea la punct a programului, acestea
oferă şi alte facilităţi de depanare, cum ar fi: ferestre de observare în timpul
execuţiei a unor variabile şi expresii, execuţia pas cu pas a liniilor de program,
puncte de oprire a execuţiei etc.
6. Etapa de execuţie a programului, obţinerea rezultatelor şi interpretarea lor
De îndată ce erorile au fost eliminate, atât cele de sintaxă şi cele de logică,
programul poate fi executat. Rezultatele obţinute sunt analizate, iar în urma
interpretării lor se iau deciziile corespunzătoare.
7. Întreținerea programului – această etapă constă în modificări ale
programelor ori de câte ori este nevoie, realizate tocmai în scopul de a
menţine aplicaţia la zi, în conformitate cu realitatea.

4.2. Tipuri de date și operații elementare

Datele sunt obiectele folosite într-un limbaj de programare şi pot fi de două


tipuri: date elementare şi date structurate.
Datele elementare sunt recunoscute de calculator şi se referă la următoarele
tipuri de date:
a. date numerice;
b. date logice;
c. date alfanumerice.

a. Datele numerice pot fi întregi sau reale.


Datele întregi pot fi reprezentate în sistemul zecimal (ex. -874, 345, +31) sau
în alte baze de numeraţie (ex. în sistemul hexazecimal: AE2, 6E5C etc.).
Datele reale se reprezintă în multe limbaje de programare sub două forme:
- în notaţie uzuală (notaţie cu punct), unde virgula e reprezentată printr-un
punct (exemplu -22.53, 72.1, +0.26);
- în notaţie ştiinţifică (exponenţială). În acest caz, succesiunile 𝐸 ±
𝑏 𝑠𝑎𝑢 𝑒 ± 𝑏 au semnificaţia de 10±𝑏 .

Exemple:
0.65 E+02 înseamnă 0.65 ∗ 102
3.72e-07 înseamnă 3.72 ∗ 10-7
1.59E+03 înseamnă 1.59 ∗ 103

Operaţiile folosite în mod obişnuit sunt operaţii de adunare, scădere,


înmulţire, împărţire, ridicare la putere.

b. Datele logice se referă la valorile logice (numite şi booleene) adevărat şi fals.


Operaţiile permise în acest caz sunt: conjuncţia (ŞI), disjuncţia (SAU), negaţia
(NU), SAU exclusiv etc.
Având notațiile 1 valoarea adevărat şi cu 0 valoarea fals, rezultatele acestor
operaţii sunt:

Figura 1. Operații cu date logice

c. Datele alfanumerice se referă la caractere şi şiruri de caractere.


Asupra acestor tipuri de date sunt permise operaţii cum ar fi comparaţia, copierea,
concatenarea (alipirea) etc.
De exemplu, având șirurile ’Mihai’ şi ’Viteazul’ prin concatenarea lor va rezulta
şirul ’Mihai Viteazul’.
De reținut că un tip de date este caracterizat printr-o mulţime de valori şi o
mulţime de operaţii care li se aplică. În cadrul unui algoritm, datele se prezintă
sub forma variabilelor şi a constantelor.
Entitatea denumită constantă are proprietatea că nu-şi modifică valoarea în timpul
execuţiei algoritmului. De exemplu, 30 este o constantă întreagă.
Entitatea denumită variabilă îşi poate modifica valoarea pe parcursul execuţiei
algoritmului. Numele unei variabile se asociază cu adresa unei celule, iar valoarea
ei la un moment dat, cu conţinutul acesteia.
Variabilele pot fi clasificate în variabile statice şi variabile dinamice, în funcție
de modul de asociere între valoare și conținut.
Astfel, în cazul variabilelor statice numelui variabilei i se asociază adresa unei
locaţii de memorie pe toată durata execuţiei algoritmului, iar valoarea variabilei
este dată de conţinutul acestei locaţii la un moment dat.
De exemplu, atribuirea 𝑥 ← 10 indică faptul că variabila x va avea valoarea 10.
Prin atribuirea 𝑥 ← 15, conţinutul locaţiei asociate variabilei x se schimbă în 15.
Unei variabile dinamice i se poate asocia pe parcursul execuţiei unui algoritm
diferite adrese. O dată fixată adresa celulei asociate, se poate prelucra conţinutul
(informaţia propriu-zisă) din celulă. În cazul static, asocierea nume - variabilă
adresă celulă este fixă (statică), în timp ce în cazul dinamic, asocierea nume -
variabilă adresă celule este variabilă (dinamică).
Combinațiile (valide sintactic) de date (operanzi) şi operaţii (operatori) constituie
așa-numitele expresii.

4.3. Tipuri de date structurate

Atunci când utilizarea datelor elementare nu este suficient de adecvată pentru


rezolvarea problemelor, se pot utiliza tipurile de date structurate. Astfel,
structurile de date folosite frecvent în algoritmi sunt: tabloul, înregistrarea, lista
liniară simplu înlănţuită, lista liniară dublu înlănţuită, stiva, coada, arborele şi
graful.
Tabloul reprezintă o colecţie omogenă de date (de acelaşi tip, numit tip de bază),
ale cărei valori sunt memorate în locații de memorie succesive. Tablourile
modelează vectori, matrice, masive multidimensionale. Accesul la elementele
unui tablou se face folosind indicii elementelor.
Figura 2. Exemplu de tablou unidimensional (vector)

Dacă se consideră un tablou unidimensional a cu 10 elemente, atunci variabilele


a(i) , 0 ≤ 𝑖 < 10 se numesc variabile indexate. Notaţia indicelui şi implicit
folosirea tablourilor are o importanţă foarte mare în prelucrarea datelor.
În cazul unui tablou bidimensional, referirea la un element al tabloului se face
astfel: tab(i,j), unde 0 ≤ 𝑖 < 𝑛, 0 ≤ 𝑗 < 𝑚, n fiind numărul de linii, iar m numărul
de coloane.

Figura 3. Exemplu de tablou bidimensional (matrice)

Înregistrările reprezintă colecţii neomogene de date.


Listele simplu şi dublu înlănţuite modelează şiruri de elemente neomogene care
nu se memorează obligatoriu la adrese vecine.
Stiva şi coada sunt liste înlănțuite particulare care funcţionează după principiul
Ultimul Intrat Primul Ieşit (Last In First Out – LIFO) şi respectiv Primul Intrat
Primul Ieşit (First In First Out – FIFO).
Arborii sunt structuri pentru reprezentarea relaţiilor ierarhice dintre obiecte.
Grafurile sunt structuri de tip reţea pentru reprezentarea relaţiilor (de aproape
orice tip) dintre obiecte.
Lucrare de verificare nr. 4
✓ Care sunt etapele rezolvării problemelor cu calculatorul ?
✓ Care sunt tipurile de date elementare? Dați câte un exemplu
pentru fiecare categorie.
✓ Care sunt tipurile de date structurate? Formulați câte o
problemă care presupune utilizarea unui tablou unidimensional,
respectiv a unui tablou bidimensional.

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