questo programma serve a calcolare le radici di una qualsiasi equazione ma ogni volta devo sempre modificare la funzione alla fine, quindi se non avrei visual c++ non lo potrei farlo, la stessa cosa vale per un altra persona, magari un'ignorante che deve solo utilizzare questo programma, come posso modificare la funzione tramite il prompt comandi, quando il programma è già avviato?
/* programma per la ricerca delle radici di equazioni.
occorre che il primo membro dell'equazione eguagliata a zero sia una funzione continua.
Procedimento adottato: divisioni per due dell'intervallo.
*/
#include <stdafx.h>
#include <iostream>
#include <math.h>
using namespace std;
//prototipo della funzione
double Funzione(double);
//input:valore di x;output:valore di y
//la funzione è dichiarata con i suoi coefficienti fissi
void main ()
{
double a; // estremo sinistro dell'intervallo
double b; // estremo destro dell'intervallo
double c; // passo
double d; // incremento
double e; //precisione
double x;
double p, q;
double i;
double val_abs;
int u; // flag: 0 non ci sono soluzioni nell'intervallo;1 ci sono soluzioni
int sp = 0; // numero di segni positivi
int sn = 0; // numero di segni negativi
double f; // valore della funzione
double z; // valore della funzione
do
{
cout << "\n Inserisci estremo sinistro dell'intervallo";
cin >> a;
cout << "\n Inserisci estremo destro dell'intervallo";
cin >> b;
} while ( a >= b);
do
{
cout << "\n Inserisici l'incremento ";
cin >> d;
} while ( d <= 0);
do
{
cout << "\n Inserisici precisione ";
cin >> e;
} while ( e < 1 || e > 6);
e = pow(10, -e);
c = (b-a)/10000;
for (i = 1; i <= 10000; i++)
{
x = a + i * c;
f = Funzione(x);
if (f > 0)
sp++;
if (f < 0)
sn++;
}
cout << "\n sp = " << sp;
cout << "\n sn = " << sn;
cout << "\n i = " << i;
if (sp ==0 || sn ==0)
cout << "\n Non e' possibile applicare questo metodo risolutivo !!!";
else
{
u = 0;
for ( i = a; i < b-d; i=i+d)
{
x = i;
f = Funzione(x);
if ( f == 0)
{
cout << "\n Una radice ------------ = " << x;
u = 1;
continue;
}
else
{
z = f;
x = i + d;
f = Funzione(x);
if ( x == b && f == 0)
{
cout << "\n Una radice *********** = " << x;
u = 1;
continue;
}
else
{
if ( f ==0 )
continue;
else
{
if ( z * f > 0)
continue;
else
{
p = i;
q = i + d;
ciclo:
x = (p + q )/2;
//val_abs = ((q-p) < 0) ? -(q-p) : q-p;
val_abs = fabs(q-p);
if ( val_abs < e )
{
cout << "\n Una radice °°°°°°°°°°° = " << x;
u = 1;
continue;
}
f = Funzione(x);
if (f == 0)
{
cout << "\n Una radice /////////// = " << x;
u = 1;
continue;
}
if (f*z > 0)
p = x;
else
q = x;
goto ciclo;
}
}
}
}
} // fine for
if ( u == 0)
cout << "\n Non ci sono soluzioni nell'intervallo scelto !!";
} // end else
} // end main
// sviluppo della funzione
double Funzione(double x)
{
double y;
y= pow(x,2)-1;
return y;
}