Sunteți pe pagina 1din 16

PROIECT

ALGORITMI SI STRUCTURI DE DATE

Student: Cergedean L. Iuliana Maria

1. TEORIE Un algoritm este o metod de rezolvare a unei probleme printr-un numr finit de pai. Printr-un pas se nelege o operaie executabil de ctre un operator. Putem spune c un algoritm seamn cu un proces de calcul (un complex de operaii), cu o reet. Nu orice proces de calcul este un algoritm. Un program de calculator este un complex de instruciuni scrise ntr-un anumit limbaj numit limbaj de programare ce transcriu operaiile dintr-un algoritm pentru operator. Instruciunile unui limbaj de programare trebui s fie neles att pentru programator ct i pentru operator. Proprietile algoritmilor generalitatea (pentru rezolvarea mai multor probleme din aceeai sfer) finitudinea determinismul (s cuprind toate cazurile posibile) unicitatea (la aceleai intrri s obin aceleai ieiri dar prelucrarea s fie unic) claritatea/precizia (la orice operaie executat s se tie ce operaie urmeaz)

Din punct de vedere structural un algoritm cuprinde urm. etape: iniializarea prelucrarea furnizarea rezultatelor

Un algoritm are 0 sau mai multe date de intrare. Aceste date se mai numesc i date iniiale. Operatori logici: AND, OR, NOT, >, <, <> Algoritmii, n principal cei pentru prelucrarea datelor, pot fi exprimai n diferite modaliti: text liber, pseudocod, schem logic, limbaj de programare. Algoritmii sunt n special pentru prelucrare automat a datelor. constante variabile

Prezentarea unui algoritm: text schem logic pseudocod limbaj de programare

Structuri de date Organizare datelor este un proces cu urm. activiti: identificarea datelor clasificarea i descrierea proprietilor sau caracteristicile datelor

gruparea datelor n colecii de date destinate prelucrrii reprezentarea extern pe suportul tehnic al datelor identificarea, definirea i descrierea procedurilor de preluare i stocare a datelor

n calculator datele sunt memorate pe supori de memorie extern sub forma unor colecii de date uniform structurate, numite fiiere. Organizarea uniform se face prin nregistrri. De regul toate nregistrrile dintr-un fiier n aceeai zon: gsim acelai tip de dat. Modalitatea structurrii nregistrrilor o tie doar programatorul n cazul unui fiier. Tabela este un fiier care conine colecii de date dar i structura nregistrrilor. n funcie de obiectele pe care le reprezint datele se clasific: date elementare sau scalare (entiti indivizibile) colecii de date (mulime de date elementare ntre care se definesc i se descriu anumit relaii)

I. Datele elementare pot fi tratate sub 2 aspecte: Nivelul fizic ce corespunde modului de organizare i reprezentare intern a datelor. O dat elementar se memoreaz ntr-o zon de memorie situat la o anumit adres. Ea poate conine date numerice, alfanumerice sau de un tip declarat fiind reprezentate n cod binar. n acest caz cea mai mic unitate de adresare fiind bitul. Nivelul logic ce corespunde modului de organizare i prelucrare a datelor de ctre utilizatori. Pentru identificarea unic a datelor utilizatorul va specifica pentru fiecare urm. elemente: identificatorul de dat sau numele asociat datei. mulimea valorilor pe care le poate lua data respectiv n procesul prelucrrii. verificarea ncadrrii n domeniul de valori (modelele de validare) atribute: tipul datei (numeric, simpl, vector,...), precizia de reprezentare intern a datei (pentru numere reale exist reprezentare cu simpl sau dubl precizie), alte caracteristici (alinierea, modalitatea de alocare a memoriei asociate datei,...)

II. Se numete structur de date o colecie de date pentru s-a definit un mecanism de selectare i identificare a componentelor. Pe baza acestor mecanisme sau n ele se pot introduce relaii care s asigure ordonarea datelor dup criteriile dorite i s faciliteze n acest mod prelucrarea lor. ntre date exist relaii ce se pot grupa n 2 categorii: Apartenena datelor la entitate. Legturile dintre entitile de acelai tip sau de tipuri diferite

Din alt punct de vedere o structur de date poate fi: Secvenial (localizarea unei componente se face prin parcurgerea tuturor componentelor care se afl naintea sa n ordinea existent) Cu acces direct (dac o component din structur poate fi localizat fr a ine cont de celelalte componente)

Componentele unei structuri date pot fi: Date elementare Structuri de date

Dup tipul componentelor structurile se pot grupa n: structuri de date omogene (conin componente de acelai tip) structuri de date eterogene (cu componente de tipuri diferite) La fel ca i datele elementare structuri de date pot fi reprezentate att n memoria intern ct i n memoria extern: fiierul (colecie de date uniform structurat pe baza unor elemente de structur numite nregistrri) baz de date (colecie de fiiere i tabele mpreun cu un mecanism de gestionarea lor numit sistem de gestiune a bazelor de date- SGBD) banca de date (o colecie de baze de date mpreun cu toate elementele implicate n gestionarea ei constnd n echipamente, module soft, for de munc, suport financiar,...)

Din punct de vedere a modului de alocare a zonelor de memorie: structuri de date statice (alocarea zonei de memorie se face n momentul compilrii i nu se schimb) structurile de date dinamice (alocarea zonei de memorie se face numai n momentul executrii modulului care utilizeaz aceasta, aceste zone putnd fi modificate, eliberate, realocate pe toat durata de execuie a programului respectiv).

Se numete tip de structur o mulime ordonat de date ntre care s-a stabilit o relaie (sau mai multe) i care folosete pentru realizarea operaiilor specifice structurii, un grup de operatori de baz cu o anumit semantic.

Noiuni privind limbajele de programare

Limbaj de programare este un ansamblu de simboluri, cuvinte, instruciuni si semnificaii atribuite acestora, utilizat pentru descrierea algoritmilor, inteligibil(accesibil) att operatorului uman cit si executantului. Transcrierea unui algoritm este un program. Programul este o succesiune de instruciuni, aparinnd unui limbaj de programare prin care se descriu operaiile si ordinea de executare a acestora pentru rezolvarea automata a unei probleme date(pentru transcrierea unui algoritm). Avem mai multe tipuri de limbaje de programare: Limbaje procedurale(limbaje universale) deoarece nu sunt limitate la un anumit tip de probleme, SGBD Limbaje de programare pe obiecte (orientate spre obiecte)

Orice limbaj de programare presupune definirea urmtoarelor: Alfabetul Gramatica Vocabularul Punctuaia Semantica Alfabetul mulimea caracterelor alfabetice, numerice, speciale. Vocabularul dat de totalitatea cuvintelor folosite de limbajul de programare Cuvintele pot fi: 1. cuvinte rezervate acestea au o semnificaie prestabilita pentru limbajul de programare(funcii, proceduri etc.) Cuvintele rezervate se mai numesc si cuvinte cheie. Atunci cnd sunt obligatorii in cadrul unor elemente de limbaj (instruciuni, pri ale programului). Anumite limbaje mai utilizeaz si cuvinte rezervate opionale. 2. cuvinte utilizator - sunt de fapt identificatorii(nume pentru constante, variabile, fiiere, proceduri etc.) cuvintele utilizator trebuie sa respecte anumite reguli de constituire cum ar fi sa nceap cu o litera, sa nu conin anumite caractere speciale, fiecare limbaj precizeaz de regula ce caractere pot sa conin identificatorii. Spre exemplu: NR_CRT , nu NR-CRT. Gramatica - cuprinde sintaxa si morfologia 1. sintaxa - metoda de formare a propoziiilor si frazelor, instruciunilor 2. morfologia cuprinde ansamblul regulilor de modificare a formei cuvintelor.

Punctuaia - reprezint un ansamblu de reguli privind utilizarea semnelor speciale numite de punctuaie conform prevederilor din sintaxa. Semantica definete sensul atribuit cuvintelor si instruciunilor. In general prima forma a unui program este obinuta prin intermediul unui modul al limbajului de programare numit EDITOR program sursa. Unele limbaje de programare accepta si alte editoare pentru realizarea programelor sursa.

Observaie : marea majoritate a programelor surse sunt sub forma unui fiier text. De la programul sursa, pentru executarea unui program se trece la o forma mult mai apropiata de sistemul de operare si de maina pe care se dorete sa se lucreze. Compilare procedura software care realizeaz traducerea programului sursa in cod intern rezultnd aa zisul program obiect.

2. PROBLEME REZOLVATE p.1. Se dau 12 portocale identice ca forma si culoare, una dintre ele fiind diferita ca greutate. Sa se determine portocala diferita din 3 cantariri. Prima data se cantaresc 8 portocale (4 si 4) luate la intamplare. Cantarirea I. Cazul I: Cele 8 portocale sunt egale, deci in cele 4 ramase necantarile se gaseste portocala diferita ca greutate. 1. Se canteresc cate 3 portocale (3 din cele 4 ramase cu 3 dintre cele deja cantarite). Cantarirea II. 2. Daca cele 6 sunt egale rezulta ca portocala diferita este cea ramasa din grupul celor necantarile la prima incercare. 3. Daca cele 3 necantarite sunt mai usoare decat celelalte 3 inseamna ca intre ele se afla cea diferita ca greutate si ca aceasta este mai usoara. 4. La a III a cantarire se iau doua portocale si se cantaresc iar aici sunt 2 cazuri: 4.1. Daca sunt egale inseamna ca cea de-a 3 a este mai mica. 4.2. Daca sunt diferite portocala cautata este cea mai usoara dintre ele. Cazul II: Cele 2 grupuri de cate 4 portocale sunt diferite. De aici rezulta ca gruparea ramasa necantarita contine portocale cu greutati identice. 1. Consideram prima grupare A cu elemente a1, a2, a3 si respectiv a3 si a doua grupare B cu elemente b1, b2, b3 si b4. Cazul I.I: A<B. Presupunem ca in A exista o portocala mai usoara si avem: A=(a1+a2+a3)+a4 B=(b1+b2)+(b3+b4) C=cele 4 portocale necantarite de greutati identice 2. La a II a cantarire luam (a1+a2+a3)+(b1+b2) si comparam cu gruparea C+a4 2.1. Daca sunt egale inseamna ca in gruparea b3+b4 avem portocala diferita ca greutate iar aceasta este mai grea. La a III a cantarire se determina exact care din ele este cea grea. Daca (a1+a2+a3)+(b1+b2)< C+a4 inseamna ca (a1+a2+a3) contine o portocala mai usoara. La a III cantarire se face acelasi lucru ca si la punctul 4. Pentru a determina portocala diferita. Daca (a1+a2+a3)+(b1+b2)> C+a4 inseamna ca a4 este mai usoara de unde rezulta ca portocala diferita se afla in gruparea b1+b2 si aceasta este mai grea. La a 3 cantarire a celor 2 porocale se determina cea cautata.

2.2.

2.3.

p.2. Duminic, Marius i Radu au fost s vad la hipodrom cursa de cai. Mai nti s-au dus s vad caii. Au fcut pariuri pe primele cinci locuri. Radu a crezut astfel: 1) Doodoo; 2) Azur; 3) Elfy; 4)Candy; 5) Emily. Marius a pariat astfel: 1) Azur; 2) Emily; 3)Candy; 4)Doodoo; 5) Elfy Rezultatele au artat c nici unul nu a ctigat: 1)Marius nu a ghicit locul nici unui cal 2)Marius nu a ghicit nici mcar ordinea a cte doi cai unul dup altul Radu a fost mai aproape de realitate: 3)A ghicit locurile a doi cai; 4)A ghicit ordinea finala a dou perechi de cai unul dup altul. Care a fost rezultatul ? 1 Radu Marius Doodoo Azur 2 Azur Emily 3 Elfy Candy 4 Candy Doodoo 5 Emily Elfy

Urmrind tabelul de mai sus putem afirma c: Pe locul I nu va fi Doodoo sau Azur Pe locul II nu va fi Emily Pe locul III nu va fi Candy Pe locul IV nu va fi Doodoo Pe locul V nu va fi Elfy Deci Doodoo poate fi pe locurile II sau V. Ordinea este: 1 2 3 4 5

Elfy

Doodoo

Azur

Candy

Emily

p.3. Se da o matrice de M linii si N coloane. Sa se pastreze si afiseze urmatoarele rezultate: a) Max si min pe linii, coloane si din intreaga matrice si pozitia lor b) Media aritmetica a elementelor nenule pe linii, coloane si matrice #include <iostream.h> int main(int argc, char *argv[]) { int i, j, m, n, maxa, mina, meda; int a[100][100]; meda = 0; cin >> m >> n; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { cin >> a[i][j]; if (j == 0 && i == 0) { maxa = a[i][j]; mina = a[i][j]; } else { if (maxa < a[i][j]) maxa = a[i][j]; if (mina > a[i][j]) mina = a[i][j]; }; meda += a[i][j]; if (j == 0) { a[i][n] = a[i][j]; //maxl a[i][n+1] = a[i][j]; //minl a[i][n+2] = 0; //medl } else { if (a[i][n] < a[i][j]) a[i][n] = a[i][j]; if (a[i][n+1] > a[i][j]) a[i][n+1] = a[i][j]; }; if (i == 0) { a[m][j] = a[i][j]; //maxc a[m+1][j] = a[i][j]; //minc a[m+2][j] = 0; //medc } else { if (a[m][j] < a[i][j]) a[m][j] = a[i][j]; a[i][n+2] += a[i][j]; a[m+2][j] += a[i][j]; }; }; cout << "Max a: " << maxa; cout << "Min a: " << mina; cout << "Med a: " << (meda/(m*n)); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { if (i == 0) { cout << "MaxC a[][" << j << "]: " << a[m][j]; cout << "MinC a[][" << j << "]: " << a[m+1] [j]; cout << "MedC a[][" << j << "]: " << a[m+2][j]; }; if (j == 0) { cout << "MaxL a[" << i << "][]: " << a[i][n]; cout << "MinL a[" << i << "][]: " << a[i] [n+1]; cout << "MedL a[" << i << "][]: " << a[i] [n+2]; }; if (a[m][j] == a[i][j]) cout << i << j; if (a[m+1][j] == a[i][j]) cout << i << j; if (a[i][n] == a[i][j]) cout << i << j; if (a[i][n+1] == a[i][j]) cout << i << j; if (maxa = a[i][j]) cout << i << j; if (mina = a[i][j]) cout << i << j; } } cin >> i; return 0; }

if (a[m+1][j] > a[i][j]) a[m+1][j] = a[i][j]; };

Citeste m,n meda =0 i=0 N

ma xa< a[i] [j]


maxa =

min a>a [i][j]


maxa =

STAR T

i< m
j=0

j< n
Citeste a[i][j]

i=i+ 1

i=0 si j=0
maxa = a[i][j] mina =

meda=meda+a

a[i] [n] < a[i][j]


a[i]

j= 0
a[i][n]=a[i][j] a[i][n+1]=a[i] [j]

a[i] [n+1] > a[i] [j]


N

a[i][n+1]=

i= 0
a[m][j]=a[i][j] a[m+1][j]=a[i] [j]

a[m] [j]< a[i] [j]


a[m]

a[m+ 1] [j]>a[i ][j]


a[m+1][j]=a[i] N a[i][n+2] = a[i][n+2] + a[i][j] a[m+2][j] = a[m+2][j] + a[i][j]

meda=meda/ afiseaza maxa,mina,meda

i=0 N

afiseaza "MaxC",j ,a[m] [j] "MinC", j, a[m+1][j] "MedC, j, a[m+2][j]

afiseaza "MaxC",j ,a[m] [j] "MinC", j, a[m+1][j] "MedC, j, a[m+2][j]

afiseaza i,j

j=j+ 1

i< m
j=0

STOP

j< n i= 0
N

i=i+ 1

j= 0
N

a[m][j] = a[i][j] sau a[m+1][j] = a[i][j]


sau a[i][n]=a[i][j] sau a[i] [n+1]=a[i][j] sau maxa=[i][j] sau mina=a[i][j]

p.4. Sa se realizeze schema logica a expresiei E=A+ #include <iostream.h> int main(int argc, char *argv[]) { Int a,b,; cin >> a >> b; if (B != 0) cout << E= << (a+sqrt(b)) else cout << E nu are sens return 0; }

Citeste a,b

B <> 0
N Afiseaza E nu are sens

p.5. Sa se realizeze schema logica structurata pentru eval expresiei: E = A+B dc C>=0 sau A-B dc C<0 #include <iostream.h> int main(int argc, char *argv[]) { Int a,b,c; cin >> a >> b >> c; if (c>=0) cout << A+B= << (a+b) else cout << A-B << (a-b); return 0; } Afiseaza e

Citeste x,n

c>=0
N E = (a-

STOP

STOP

STAR T
E=A+ Afiseaza e

STAR T
E=

p.6. Se se realizeze schema logica a expresiei f(x)=x^n (x,n introduduse de utiliz.).

int main(int argc, char *argv[]) { double x, n; cin >> x >> n; if (x!=0 || (x==0 && n>0)) cout << X la puterea n este: << pow ( x, n ) else cout << daca X=0 at. Y>0 ! return 0; }

Citeste x,n X<>0 || (x=0 && n>0)

p.7. Se se realizeze schema logica a expresiei E = (A*A+B)/(AB*B);

int main(int argc, char *argv[]) { double a, b; cin >> a >> b; if ( a-b*b != 0 ) cout << E = << ((a*a+b)/(a-b*b)) else cout << val a,b incorecte; return 0; }

Citeste a,b

a-b*b <> 0

STOP

STAR T

#include <iostream.h>

STOP

STAR T
f= Afiseaza f E = (a*a+b)/(a-b*b) Afiseaza e

#include <iostream.h> #include <math.h>

p.8. A,B,C reale si V var. booleana. Determinati V: V = A+B+C dc X=0 sau (A+B)/C dc X=1 #include <iostream.h> int main(int argc, char *argv[]) { float a,b,c; bool x; cin >> a >> b >> c >> x; if ( x ) cout << A+B/C = << ((a+b)/c) else cout << A+B+C << (a+b+c); return 0; } Afiseaza e

Citeste a,b,c,x

X=1
N E=

STOP

STAR T
E = (a+b)/c

p.10.. Sa se realizeze schema logica pentru determinarea mediei de varsta a unei colectivitati, cunoscand varsta fiecarui individ. Luati in considerare urmatoarele cazuri: a) Se stie n nr. membrilor b) Nu se stie n dar putem intreba mai sunt? #include <iostream.h> int main(int argc, char *argv[]) { int n, v, a; float med = 0; cout << "Introduceti numarul membrilor sau 0 daca nu este cunoscut "; cin >> n; if ( n > 0 ) { for (a = 0; a < n; a++ ) { cout << "Introduceti varsta membrului #" << a+1 << " "; cin >> v; med = med + v; } } else { a = 1; while (a != 0) { cout << "Mai sunt membri? (0 = nu)"; cin >> a; if (a != 0) { n++; cout << "Introduceti varsta membrului #" << n << " "; cin >> v; med = med + v; }; } }; med = med / n; cout << "Media este: " << med; return 0; }

Afiseaza Introduceti nr. membrilor sau 0 daca nu este cunoscut Citeste n Med = 0 N N >0

Afiseaza mai sunt? Citeste a A= 0 N N

Citeste v Med = med + v n = n+1

Med = med / n Afiseaza med

STAR T
A=0 N= a Citeste v Med = med + v a = a+1

STOP

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