online: 7; azi: 1452; total: 53458 Manual clasa a xi a - Tehnici de programare - Divide et impera

Manual clasa a Xi a

Tehnici de programare

Divide et impera

Să se calculeze radicalul de ordinul 3 din numărul a, cu o aproximaţie de 4 zecimale.
Pentru a calcula radicalul de ordinul 3 din numărul a cu o aproximație de 4 zecimale folosind metoda divide et impera , putem folosi o abordare similară cu cea pentru calculul părții întregi a radicalului de ordinul 3.
Putem împărți intervalul [0, a] în două sub-intervale, verificând în care sub-interval se află soluția. Apoi, putem repeta acest proces în sub-intervalul în care se află soluția, împărțind acest sub-interval în două și verificând în care sub-interval se află soluția. Acest proces poate fi repetat până când diferența dintre valoarea reală a rădăcinii și valoarea aproximată a rădăcinii este mai mică decât 0,0001.
# include < iostream >
# include < math.h >
using namespace std ;
double cubeRoot ( double a, double low , double high ) {
double mid = ( low + high ) / 2 ;
double diff = mid * mid * mid - a;
if ( diff < 0 ) {
diff = - diff ;
}
if ( diff <= 0.0001 ) {
return mid ;
} else if ( mid * mid * mid < a) {
return cubeRoot (a, mid , high );
} else {
return cubeRoot (a, low , mid );
}
}
int main () {
double a;
cout << " Introduceti numarul a pentru care sa se calculeze radicalul de ordinul 3: " ;
cin >> a;
double approxCubeRoot = cubeRoot (a, 0 , a);
double actualCubeRoot = cbrt (a);
cout << "Aproximarea radicalului de ordinul 3 al lui " << a << " este: " << approxCubeRoot << endl ;
cout << "Valoarea reala a radicalului de ordinul 3 al lui " << a << " este: " << actualCubeRoot << endl ;
return 0 ;
}

Algoritmul folosește o abordare divide et impera pentru a se apropia de soluția ecuației x^3 = a, astfel încât diferența dintre valoarea reală a rădăcinii și valoarea aproximată a rădăcinii să fie mai mică decât 0,0001. În funcția cubeRoot () , se împarte intervalul [0, a] în două sub-intervale, verificând în care sub-interval se află soluția. Dacă mijlocul sub-intervalului ridicat la puterea a treia este mai mic decât a, se continuă căutarea în sub-intervalul din dreapta. În caz contrar, se continuă căutarea în sub-intervalul din stânga. Acest proces se repetă recursiv până când diferența dintre valoarea reală a rădăcinii și valoarea aproximată a rădăcinii este mai mică decât 0,0001.