Algoritmi de programare • Algoritmul: – Reprezintă o mulțime ordonată și finită de pași executabili prin care se definește fără echivoc modul în care se poate rezolva o anumită sarcină – Proprietățile algoritmilor: • Claritate-să fie precis definit, fără ambiguități (interpretări personale/diferite) • Finitate-să fie format dintr-un număr finit de pași • Succesiunea determinată a pașilor-pașii să fie executați într-o anumită ordine • Universalitate-să permită rezolvarea unei clase de probleme, care sunt de același tip și care diferă între ele numai pribn datele de intrare • Realizabilitate-pașii algoritmului să poată fi executați cu mijloacele disponibile • Eficiență-soluția problemei să fie obținută după un număr minim de pași, cu precizie prestabilită sau satisfăcătoare și să utilizeze un număr minim de resurse Algoritmi de programare • Structura de control a algoritmului: – Definește ordinea de executarea pașilor,adică un pas executat la un moment dat cărui pas îi predă controlul – Tipuri de structuri de control: • Structura liniară • Structura alternativă • Structura repetitivă • Structura liniară – Ordinea executării pașilor este dată de ordinea scrierii acestora în cadrul algoritmului (fiecare pas predă controlul pasului următor) – Structura liniară apare în cazul acțiunilor de comunicare (introducere date/afișare rezultate) sau calcul Algoritmi de programare • Structura liniară – Exemplu: Pas1. Început Pas2. Introducere valori pentru x,y Pas3. Calculare ma<-(x+y)/2 Pas3. Calculare mg<-sqrt(x*y) Pas5. Afișează valorile ma, mg Pas5. Încheiere – Dacă x=4 și y=9 algoritmul va afișa 6,5 și 6 Algoritmi de programare • Structura alternativă – Ordinea executării pașilor se face selectând între două variante, în funcție de îndeplinirea sau neîndeplinirea unei condiții. – Exemplu: • Dacă afară este înnorat îmi iau umbrela, altfel îmi iau ochelarii de soare – Condiția este existența norilor în momentul respectiv – În funcție de răspunsul DA/NU la îndeplinirea condiției se execută o acțiune (”îmi iau umbrela”) sau alta (”îmi iau ochelarii de soare”) – Formă pseudocod: • dacă condiție – atunci acțiune1 – altfel acțiune2 • sfîrșit_dacă – Dacă condiție este adevărată se execută acțiune1 apoi se sare la pasul aflat după sfârșit_dacă – Dacă condiție este falsă se execută acțiune2 apoi se sare la pasul aflat după sfârșit_dacă Algoritmi de programare • Structura alternativă – Exemplu: Pas1. Început Pas2. Introducere valori pentru x,y Pas3. Dacă x!=0 atunci execută Pas4. Calculare a<-y/x Pas5. Afișează valoarea lui a altfel execută Pas6. Afișează ”Împărțire imposibilă” Pas7. Încheiere – Dacă x=3 și y=6 algoritmul va afișa 2 – Dacă x=0 și y are orice valoare algoritmul va afișa Împărțire imposibilă Algoritmi de programare • Structura repetitivă – Prin această structură se execută repetat o acțiune (unul sau mai mulți pași), cât timp: • Este îndeplinită o condiție (structură repetitivă cu număr necunoscut de pași) • Nu s-a ajuns la numărul de repetiții dorit (structură repetitivă cu număr cunoscut de pași) – Exemplu: • Dacă nu este jumătatea orei prof-ul de info ascultă elevi • Prof-ul de info ascultă 4 elevi într-o oră de curs – Structura repetitivă cu număr necunoscut de pași poate fi cu test inițial sau test final – Structura repetitivă cu număr necunoscut de pași cu test inițial verifică îndeplinirea condiției înainte de a începe repetiția (acțiunea poate să nu fie executată niciodată) – Structura repetitivă cu număr necunoscut de pași cu test final verifică îndeplinirea condiției după executarea acțiunii (aceasta este executată cel puțin o dată) Algoritmi de programare • Structura repetitivă cu număr cunoscut de pași – Formă pseudocod: • În acest caz algoritmul trebuie să fie prevăzut cu un contor care ține evidența repetițiilor • pentru contor <-vi,vf,p execută – Acțiune • sfârșit_pentru – Inițial contorului i se atribuie valoarea vi (de obicei 1) – Se verifică dacă valoarea contorului >vf – Dacă nu : • Se execută acțiune • Se revine la pasul pentru și se mărește valoarea contorului cu p și se trece din la verificarea valorii contorului – Dacă da se sare la pasul aflat după sfârșit_pentru Algoritmi de programare • Structura repetitivă cu număr cunoscut de pași: – Exemplu: Pas1. Început Pas2. Introducere valori pentru x,y Pas3. Pentru contor<-x,y,1 execută Pas4. Afișează valoarea lui contor Pas7. Încheiere – Dacă x=3 și y=8 algoritmul va determina afișarea numerelor 3, 4, 5, 6, 7, 8 Algoritmi de programare • Structura repetitivă cu număr necunoscut de pași cu testare inițială – Formă pseudocod: • cât timp condiție execută – Acțiune • sfârșit_cât timp – Se testează condiție: • Dacă este adevărată: – Se execută acțiune – Se revine la pasul cât timp reluîndu-se acțiunea • Dacă este falsă se sare la pasul aflat după sfârșit_cât timp Algoritmi de programare • Structura repetitivă cu număr necunoscut de pași cu testare inițială: – Exemplu: Pas1. Început Pas2. Introducere valori pentru x,y Pas3. cât timp x<y execută Pas4. Afișează valoarea lui x Pas5. Incrementează x Pas6. Sfârșit cât timp Pas7. Încheiere – Dacă x=3 și y=8 algoritmul va determina afișarea numerelor 3, 4, 5, 6, 7 Algoritmi de programare • Structura repetitivă cu număr necunoscut de pași cu testare finală – Formă pseudocod: • repetă – Acțiune • până când condiție – Se execută acțiune – Se testează condiție • Dacă este falsă: – Se execută acțiune – Se revine la pasul până când reluîndu-se acțiunea • Dacă este adevărată se sare la pasul aflat după până când Algoritmi de programare • Structura repetitivă cu număr necunoscut de pași cu testare finală: – Exemplu: Pas1. Început Pas2. Introducere valori pentru x,y Pas3. repetă Pas4. Afișează valoarea lui x Pas5. Incrementează x Pas6. până când x>y Pas7. Încheiere – Dacă x=3 și y=8 algoritmul va determina afișarea numerelor 3, 4, 5, 6, 7, 8