Documente Academic
Documente Profesional
Documente Cultură
Mixtă : Metode de Învăţământ
Mixtă : Metode de Învăţământ
1
Comunicarea noilor cunoştinţe:
Să se determine elementul maxim dintr-un şir de n numere ȋntregi, folosind metoda Divide et
Impera.
Se urmăreşte modelul general şi valorile din şir se memorează ȋntr-un vector
(x[0], x[1],...,x[n-1]).
Se descompune problema ȋn două probleme de acelaşi tip, se ȋmparte vectorul ȋn doi vectori
aproximativ egali ca număr de elemente; primul vector va conţine elementele aflate până la poziţia
de mijloc inclusiv, iar al doilea vector va fi alcătuit din elementele de după poziţia de mijloc.
Se determină elementul maxim al fiecăruia dintre cei doi subvectori, apoi maximul ȋntregului
vector va fi cea mai mare dintre cele două valori maxime.
Dacă primul subvector nu s-a redus la un singur element, el trebuie descompus la rândul lui ȋn
două jumătăţi; la fel şi la al doilea vector. Procedeul continuă până se obţin numai subvectori cu un
singur element. Maximul unui subvector cu un singur element este chiar elementul respectiv. Un
vector cu un singur element va fi considerat problemă elementară.
Se consideră că la un anumit pas se prelucrează subvectorul: (x[p],...,x[q]), ce conţine
elementele cuprinse ȋntre poziţiile p şi q. Se porneşte de la vectorul dat (x[0], x[1],...,x[n-1]), deci
iniţial capetele intervalului sunt p=0 şi q=1. Poziţia de mijloc care determină vectorii descompunerii
este mij=[(p+q)/2], iar subvectorii vor fi x1= (x[p],...,x[mij]) şi x2=(x[mij+1],...,x[q]).
Se face exemplificare pe vectorul x=(-1,2,8,-3,1,9,6), având n=7 elemente.
Procesul de descompunere ȋncepe cu vectorul iniţial:
x: p=0 1 2 3 4 5 6=q
-1 2 8 -3 1 9 6
- se calculează mij=[(p+q)/2]=[(0+6)/2]=3
- vectorul x1 este cuprins ȋntre poziţiile p şi mij, mij devine noul q
p=0 1 2 3=q
-1 2 8 -3
- vectorul x2 este cuprins ȋntre poziţiile mij +1 şi q, iar mij+1 devine noul p
p= 4 5 6=q
1 9 6
-1 2 8 -3
Pentru x2, mij=6 şi se obţin subvectorii:
x21 x22
p=4 5 =q p=6 =q
1 9 6
Următoarele descompuneri ale vectorilor conduc la probleme elementare:
x11→ x111: -1 şi x112: 2
x12→ x121: 8 şi x122: -3
x21→ x211: 1 şi x212: 9
x22 este 6, problemă elementară.
Determinarea maximului se face combinând problemele astfel:
- valoarea maximă a lui x11 este maximul dintre x111 şi x112, adică 2;
- valoarea maximă a lui x12 este maximul dintre x121 şi x122, adică 8;
- valoarea maximă a lui x21 este maximul dintre x211 şi x212, adică 9;
- valoarea maximă a lui x22 este 6;
ȋn continuare:
2
- maximul dintre x11 şi x12 este 8, adică maximul lui x1 este 8;
- maximul dintre x21 şi x22 este 9, adică maximul lui x2 este 9;
- maximul dintre maximul lui x1 şi maximul lui x2 este 9.
Se defineşte o funcţie recursivă care returnează valoarea maximă a subvectorului
(x[p],...x[q]) :
- dacă subvectorul conţine un singur element, adică p=q, atunci acel element va fi maximul
şi va fi returnat de către funcţie;
- ȋn caz contrar:
se determină poziţia de mijloc;
se determină valoarea maximă a subvectorului (x[p],…,x[mij]), max1;
se determină valoarea maximă a subvectorului (x[mij+1],…,x[q]), max2;
se recombină cele două probleme, maximul din tot vectorul, max, va fi
cea mai mare dintre cele două valori maxime:max1 şi max2.
int div_imp(int p, intq)
{int mij, max1, max2;
if(p==q)
return x[p];
else
{mij=(p+q)/2;
max1=div_imp(p,mij);
max2=div_imp(mij+1,q);
if(max1>max2)
return max1;
else
return max2;
}
}
Fişa de lucru
Să se editeze în limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
Să se completeze tabelul de variaţie următor pentru un vector ales,cu maxim 8 elemente, apoi
să se verifice cu rezultatele obţinute prin rularea programului pentru aceleaşi valori.
Să se ruleze programul şi în varianta pas cu pas (step over).
3
Fişa de lucru
Să se editeze în limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
Să se completeze tabelul de variaţie următor pentru un vector ales,cu maxim 8 elemente, apoi
să se verifice cu rezultatele obţinute prin rularea programului pentru aceleaşi valori.
Să se ruleze programul şi în varianta pas cu pas (step over).
Fişa de lucru
Să se editeze în limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
Să se completeze tabelul de variaţie următor pentru un vector ales,cu maxim 8 elemente, apoi
să se verifice cu rezultatele obţinute prin rularea programului pentru aceleaşi valori.
Să se ruleze programul şi în varianta pas cu pas (step over).