24.2.3.24010930. Još je Heronu prije 2000 godina bio poznat sljedeći postupak (algoritam) za računanje kvadratnog korijena proizvoljnog broja x: formira se niz brojeva a0, a1, a2 itd. po sljedećem pravilu:
a0 = 1; ak+1 = (ak + x / ak) / 2 za k > 0
Ovaj niz konvergira vrlo brzo ka korijenu iz x. U praksi je dovoljno izračunati samo nekoliko elemenata ovog niza, jer se vrlo brzo elementi počinju praktično ponavljati (sa onolikom tačnošću koliku dopušta realni tip podataka). Tada postupak možemo obustaviti, i posljednju izračunatu vrijednost ak proglasiti traženim korijenom. Napraviti funkciju “korijen” koja računa korijen svog argumenta Heronovim postupkom. Za realizaciju funkcije ne koristiti nizove. Napisanu funkciju testirati u glavnom programu koji za argument unesen sa tastature ispisuje vrijednosti korijena korištenjem funkcije “korijen” kao i korištenjem ugrađene funkcije “sqrt” (naravno, rezultati treba da budu isti).

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
void korijen(double br){
    double a(1.),b((1+br)/2);
    while(a!=b){
        a=b;
        b=(a+br/a)/2;
    }
    cout<<a;
}
int main()
{
int main(){
double x;
cin>>x;
korijen(x);
cout<<endl<<sqrt(x);
getch();
return 0;
}

Ispis na ekranu:

Riješeni zadaci 2    Index