110 likes | 212 Views
Situa ţ ie î ncheiere an ş colar. Realizator grupa: .............................. Elevi:. Incercăm să răspundem la întrebări cum ar fi :. Cum putem căuta eficient un element într-un şir? Ce modalităţi de ordonare a elementelor unui şir există? Cum se pot interclasa două şiruri?
E N D
Situaţie încheiere an şcolar Realizator grupa: .............................. Elevi: .............................. ............................... ...............................
Incercăm să răspundem la întrebări cum ar fi: • Cum putem căuta eficient un element într-un şir? • Ce modalităţi de ordonare a elementelor unui şir există? • Cum se pot interclasa două şiruri? • Cum se poate utiliza un limbaj de programare pentru reprezentarea acestor algoritmi? • Cum stabilim, pentru o anumita operaţie cu şiruri, ce algoritm este mai eficient?
PROBLEMA Într-o şcoală elevii sunt identificaţi prin numarul matricol. La sfârşitul anului şcolar se solicită următoarele: - Căutarea unui elev într-o clasa; - Sortarea elevilor unei clase după medii - Interclasarea elevilor claselor în vederea obţinerii unei sortari pe şcoala
OBSERVAŢIE Date de intrare:- n- numarul de elevi- vectorul numerelor matricole a - vectorul mediilor b Orice modificare în vectorul mediilor trebuie făcută şi în celălalt pentru păstrarea corespondenţei.
Căutarea secvenţială a unui elev într-o clasă Secvenţa de program: i=0; while (i<n && a[i]!=x) i++; //sau for(i=0;i<n && a[i]!=x; i++); if (i!=n) cout<<“S-a găsit numărul matricolîn poziţia”<<i+1<<“ si are media”<<b[i]; else cout<<“Nu s-a găsit elementul”;
In vectorul numerelor matricole a=(105,243,138,336,410,255) se cauta elevul cu nr.matricol x=336. Desfasurarea algoritmului: • Pentru i=0,x!=a[0] deci i++(i=1); • Pentru i=1,x!=a[1] deci i++; • Pentru i=2,x!=a[2] deci i++; • Pentru i=3,x=a[3] deci iesim din structura repetitiva si se afiseaza “s-a gasit numarul matricol in pozitia 4 si are media b[3].
Căutare secvenţială într-un tablou ordonat Secvenţa de program:
Căutare binară Secventa de program: st=0;dr=n-1;gasit=0; while (st<=dr && !gasit) { mijl=(st+dr)/2; if (a[mijl]==x) gasit=1; else if (x<a[mijl] dr=mijl-1; else st=mijl+1;} if (st<dr) cout <<“Nu s-a gasit elementul”; else cout<<“S-a gasit elementul in pozitia”<<mijl+1;
Sortarea prin selecţie Secvenţa de program: for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (b[i]>b[j]) {aux=b[i];b[i]=b[j];b[j]=aux; aux=a[i];a[i]=a[j];a[j]=aux;} cout<<“Mediile în ordine crescătoare şi elevii corespunzători“<<endl; for (i=0;i<n;i++) cout<<b[i]<<“ pentru elevul “<<a[i]<<endl;
Sortare prin metoda bulelor Secvenţa de program: inversare=0 while (inversare) { for (i=0;i<n-1;i++) if (b[i]>b[i+1]) {aux=b[i];b[i]=b[i+1];b[i+1]=aux; aux=a[i];a[i]=a[i+1];a[i+1]=aux; inversare=1;}} for (i=0;i<n;i++) cout<<“Media “<<b[i]<<“pentru elevul “<<a[i]<<endl;
Interclasarea a doi vectori Secvenţa de program: i=0;j=0;k=0; while ( i<n &&j<m) {if (a[i]<b[j] {c[k]=a[i];i++;} else {c[k]=b[j];j++;} k++;} If (i<n) while (i<n) {c[k]=a[i];k++;i++;} else while (j<m) {c[k]=b[j];k++;j++;} for (k=0;k<n+m;k++) cout<<c[k]<<“ “;