/*SOLUZIONE ESERCIZIO ERONE DEL GIORNO 28/10/2013*/ #include #include #include main(){ double x,epsilon,a0,a1; int n; /*LETTURA PARAMETRI DI INPUT*/ printf("Inserisci valore x\n"); scanf("%lf",&x); while(x<=0){ printf("Errore sono ammessi solo valori strettamente positivi, reinserisci x\n"); scanf("%lf",&x); } printf("Inserisci valore epsilon\n"); scanf("%lf",&epsilon); while(epsilon<=0){ printf("Errore sono ammessi solo valori strettamente positivi, reinserisci epsilon\n"); scanf("%lf",&epsilon); } /*ORA MOSTREREMO ALCUNI POSSIBILI MODI TUTTI TRA LORO EQUIVALENTI, EQUIVALENTI QUI VUOL DIRE*/ /* STESSO NUMERO DI OPERAZIONI ARITMETICHE E/O LOGICHE */ /*PRIMO CICLO WHILE*/ a0=x; a1=0.5*(a0+x/a0); n=1; while(fabs(a1-a0)>epsilon){ a0=a1; a1=0.5*(a0+x/a0); n++; } printf("Stima radice di %20.10lf e' %20.10lf ottenuta in %i iterazioni \n",x,a1,n); printf("Valore esatto %20.10lf \n",sqrt(x)); /*SECONDO CICLO DO WHILE*/ a0=x; a1=0.5*(a0+x/a0); n=1; if ( fabs(a1-a0)epsilon); printf("Stima radice di %20.10lf e' %20.10lf ottenuta in %i iterazioni \n",x,a1,n); printf("Valore esatto %20.10lf \n",sqrt(x)); } /*TERZO CILO FOR, COME MOSTRATO A LEZIONE E' EQUIVALENTE AL WHILE*/ /*QUESTO SIGNIFICA CHE E' SOLO QUESTIONE DI ESTETICA MA NON DI LOGICA;*/ /*SEBBENE L'ESPRESSIONE DI SEGUITO SIA PIU' COMPATTA E' MENO LEGGIBILE*/ for(a0=x, a1=0.5*(a0+x/a0),n=1; fabs(a1-a0)>epsilon; a0=a1,a1=0.5*(a0+x/a0),n++); printf("Stima radice di %20.10lf e' %20.10lf ottenuta in %i iterazioni \n",x,a1,n); printf("Valore esatto %20.10lf \n",sqrt(x)); exit(0); }