Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
NOME TIPO STRUTTURA ATTRIBUTO
Informazioni di ingresso
ei float var. semplice estremo inferiore
dell'intervallo
es float -- estremo superiore
dell'intervallo
approssimazione float -- approssimazione
richiesta
Informazioni di uscita
x float -- zeri della
funzione
NOME TIPO STRUTTURA ATTRIBUTO
Informazioni di algoritmo
g1 float -- valore
parziale di f in x
g2 float -- valore parziale di
f in x+eps
3) Formulazione dell'agoritmo
L'algoritmo è costituito da un ciclo do-while il quale partendo
dal valore dell'estremo inferiore "ei" e con passo "eps" confronta
i segni assunti dalla funzione e stampa il valore x quando i segni
risultano diversi.Il ciclo viene eseguito mentre x<=es
4) Sottoprogrammi interni adoperati
4.1) Nome:funf
Tipo: funzione oggetto dello scandaglio che restituisce un float
Motivazione:funf è la funzione in esame
Parametri di ingresso: x di tipo float è la varabile della
funzione. 32
Listato.
#include "stdafx.h"
#include <math.h>
const float eps=(float)0.0001;
float ei=0;
float es=0;
float g1=0;
float g2=0;
float x=0;
float funf(float x)
{ float ritorno_valore_funzione=0;
float radianti=0;
/* radianti=(float)((6.28318*x)/360);
ritorno_valore_funzione=(float)sin(radianti);
*/ ritorno_valore_funzione=(float)(x*x-2);
return ritorno_valore_funzione;
}
int main(int argc, char* argv[])
{ printf("Calcolo zeri con il metodo dello scandaglio!\n");
do
{ printf("Inserisci l'estremo inferiore");
scanf("%f",&ei);
printf("\n");
printf("Inserisci l'estremo superiore");
scanf("%f",&es);
printf("\n");
}while (ei>es);
// assegnazione valori iniziali
g1=funf(ei);
x=ei;
do
{ x=x+eps;
g2=funf(x); 33
if((g1*g2)<=0)
{
printf("lo zero e' %.2f\n",x);
}
g1=g2;
}while (x<=es);
printf("\n Fine ricerca zeri nell'intervallo dato\n");
return 0;
}
2.9 Calcolo zeri di una funzione (metodo bisezione - ricorsivo)
1) Intestazione
Nome programma: Metodo di Bisezione-Ricorsivo
Nome file associati al programma: Nessuno
Nome del programma sorgente:zeri bisezione ricorsiva.cpp
2) Motivazione generale del programma.
Calcolo dello zero di una funzione continua nell'intervallo (a,b)
con il metodo del dimezzamento
L'algoritmo utilizzato è di tipo ricorsivo.
La funzione presa in esame e' : f(x)=x*x-2
3) Metodo di soluzione
Si dimezza iterativamente l'intervallo (x1,x2) (all'interno del
quale la funzione assume valori opposti) in cui è contenuta la
radice fino a che la sua ampiezza non diviene minore di un epsilon
assegnato.
4) Modalità d'uso
Il programma richiede in ingresso gli estremi dell'intervallo
e la approssimazione desiderata
5) Eccezioni e messaggi di errore.
Viene stampato un messaggio di errore se la funzione non assume
valori opposti nei punti a e b (estremi dell'intervallo di
definizione)
6) Interpretazione dell'output
Stampa il punto in cui la funzione e' prossima allo zero
ed il valore assunto in tale punto
Documentazione Interna 34
1) Struttura dei dati
NOME TIPO STRUTTURA ATTRIBUTO
Informazioni di ingresso
a float var. semplice estremo inferiore
dell'intervallo
b float variabile semplice estremo superiore
dell'intervallo
approssimazione float -- approssimazione
richiesta
Informazioni di uscita
z float -- punto di nullo di f
f(z) float -- f(z) in z
Informazioni di algoritmo
con (0 oppure 1) float -- vero,cioè uguale ad
1 se converge in n
iterazioni
2)Formulazione dell'algoritmo.
Utilizza il classico algoritmo di bisezione:l'intervallo (a,b)
viene iterativamente dimezzato,scegliendo il sottointervallo in cui
la funzione cambia segno.
3) Sottoprogrammi interni adoperati
3.1) Nome:fun
Tipo: funzione oggetto del calcolo dello zero
Motivazione:fun è la funzione in esame
Parametri di ingresso: x di tipo float è la varabile della
funzione che ha valore semantico in radianti.
3.2) Nome:zero (funzione)
Tipo: funzione oggetto del calcolo dello zero
Motivazione:ricerca il punto di nullo della funzione
Parametri di ingresso: x1,x2, ed eps di tipo float
Variabili Locali: x,w di tipo float
3.3) Nome:segno
Tipo: funzione che restituisce il valore 1 che codifica il segno
"+" o il valore 0 che codifica il segno "-"
Motivazione:identifica il segno della funzione nel punto valf
Parametri di ingresso: valf di tipo float. 35
Listato.
#include "stdafx.h"
#include <math.h>
float a=0; //primo estremo dell'intervallo
float b=0; //secondo estremo dell'intervallo
float approssimazione=0; //approssimazione desiderata
float z=0; //punto di nullo della funzione
float fun(float x);
float zero(float x1, float x2,float eps);
float segno(float valf);
float fun(float x)
{ float valore_di_ritorno_della_funzione;
valore_di_ritorno_della_funzione=x*x-2;
return valore_di_ritorno_della_funzione;
}
float segno(float valf)
{ float valore_di_ritorno_della_funzione;
if(valf>0)
{ valore_di_ritorno_della_funzione=1;
}
else 36
{ valore_di_ritorno_della_funzione=0;
}
return valore_di_ritorno_della_funzione;
}
float zero(float x1, float x2,float eps)
{ float valore_di_ritorno_della_funzione=0; //valore di ritorno della
funzione
float w=0; //memorizza il valore di f
float s=0; //segno di f(x1)
float x=0; //punto medio dei successivi intervalli
w=fun(x1);
s=segno(w);
x=(x1+x2)/2;
w=fun(x);
if (fabs(x-x1)<eps)
{ valore_di_ritorno_della_funzione=x;
}
else
if(s==segno(w))
{
valore_di_ritorno_della_funzione=zero(x,x2,eps);
}
else {
valore_di_ritorno_della_funzione=zero(x1,x,eps);
}
return valore_di_ritorno_della_funzione;
}
int main(int argc, char* argv[])
{ printf("Metodo di bisezione ricorsivo!\n");
do
{ printf("\n");
printf("Metodo di bisezione ricorsivo\n");
printf("Funzione di prova x*x-2=0");
printf("Immetti gli estremi dell'intervallo (a<b)");
printf("a= ");
scanf("%f",&a);
printf("b= ");
scanf("%f",&b);
}while(a>b);
printf("\n");
printf("Immetti l'approssimazione desiderata :");
scanf("%f",&approssimazione); 37
if(fun(a)*fun(b)<0)
{
z=zero(a,b,approssimazione);
printf("\n");
printf("Il punto in cui la funzione f, con l'approssimazione\n");
printf("data, e' prossima allo zero e':");
printf("%f\n",z);
printf("\n");
printf("Il valore assunto dalla funzione in tale punto è :\n");
printf("%f\n",fun(z));
printf("\n");
}
else {
printf("\n");
printf("Errore : la fuzione deve assumere valori opposti\n");
printf("negli estremi dell'intervallo [a,b]\n");
}
return 0;
}
2.10 Calcolo Integrale definito (applicando la definizione)
1) Intestazione
Nome programma: Calcolo integrale definito
Nome file associati al programma: Nessuno
Nome del programma sorgente: Calcolo Integrale.cpp
2) Motivazione generale del programma.
Data una qualsiasi funzione definita nel dominio dei numeri reali
avente valori nel dominio degli stessi numeri reali,
il programma in questione ne calcola l'integrale definito tra due
estremi appartenenti al dominio di definizione.
La funzione presa in esame e' : f(x)=sin(x)
3) Metodo di soluzione
Si applica la definizione di integrale definito.
4) Modalità d'uso
Il programma richiede in ingresso gli estremi dell'intervallo
ed il numero di intervallino (numero di campioni) in cui viene
suddiviso tutto l’intervallo di definizione della funzione
5) Eccezioni e messaggi di errore.
Non ci sono ne eccezioni ne messaggi di errore
6) Interpretazione dell'output
Stampa il mappaggio della struttura lineare in una struttura
bidimensionale. Stampa i valori della formula, che sommando tutti
rettangoli che hanno come base gli intervallini elementari in cui
viene suddiviso l’intervallo di definizione, culmina con il
valore del rettangoloide che approssima per difetto il valore
dell’integrale. 38
Documentazione Interna
1) Struttura dei dati
NOME TIPO STRUTTURA ATTRIBUTO
Informazioni di ingresso
Primo_estremo float var. semplice estremo inferiore
di integrazione
Secondo_estremo float var.smeplice estremo superiore
di integrazione
numero_di_campioni float var. semplice numero di
intervallini
Informazioni di uscita
area_rettangoloide float var.semplice valore dell’integrale
Informazioni di algoritmo
Sequenza float array punti in cui viene
suddivisol’intervallo
di integrazione
Primo termine float variabile estremo inferiore
Strutturata intervallini di base
dei rettangoli che
formano il
rettangoloide
Secondo termine float variabile contiene l’estremo
strutturata superiore degli
intervallino di base
dei rettangoli che
formano il
rettangoloide
sommatoria float variabile valore area del
semplice rettangoloide
estremo_inferiore_ float variabile estremo inf.
intervallino semplice intervallino
estremo_superiore_ float variabile estremo sup.
intervallino semplice intervallino
valore_della_ float variabile valore della
funzione semplice funzione
nell’intervallino
2)Formulazione dell'algoritmo.
A partire dal segmento che delimita sull'asse reale l'estremo
inferiore e superiore di integrazione, lo stesso segmento
è suddiviso in un numero di parti definito dal numero in ingresso, il
quale rappresenta il numero di campioni per calcolare il
rettangoloide che approssimerà per difetto la funzione. L'area di
detto rettangoloide sarà il valore dell' integrale cercato.
In modo particolare il programma richiede l'immissione
dell'intervallo di integrazione a seconda che l'estremo inferiore
sia in valore assoluto maggiore dell'estremo superiore in valore
assoluto, inverte gli estremi di integrazione.
Questa operazione viene fatta per dare in ingresso ad una funzione di mappaggio
di una struttura dati lineare una struttura dati bidimensionale.
Si necessita il mappaggio perché si vuole applicare la formula:
area_rettangolino=f(primo_estremo_intervallino)*(primo_e