Salve, sarò breve:
#include <iostream>
#include <cmath>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
double conv(string prova)
{
stringstream ss(prova);
double s_to_i;
ss >> s_to_i;
return s_to_i;
}
string sost(string prova5)
{
int meno;
do
{
meno = prova5.find("-");
if(meno!=-1)
{
prova5.replace(meno, 1, "+m");
}
}while(meno!=-1);
prova5.replace(prova5.find("="), 1, "+=");
return prova5;
}
string unsost(string prova10)
{
do
{
if(prova10.find("m")!=-1)
{
prova10.replace(prova10.find("m"), 1, "-");
}
}while(prova10.find("m")!=-1);
return prova10;
}
int separ(string prova3)
{
if(prova3.find("+")!=-1)
{
int prova4=prova3.find("+");
return prova4;
}
else
{
return -1;
}
}
string spezz(int prova9, string prova7)
{
if(separ(prova7)!=0)
{
while(prova9!=0)
{
prova9--;
prova7.erase(0, separ(prova7)+1);
}
string prova6=prova7.substr(0, separ(prova7));
return prova6;
}
else
{
return 0;
}
}
int main()
{
string equazione;
cout << "Inserisci la tua equazione: ";
cin >> equazione;
int lunghezza = equazione.length();
int ugu = equazione.find("=");
if(ugu == -1)
{
equazione.replace(lunghezza, 1, "=0");
}
equazione = sost(equazione);
lunghezza = equazione.length();
equazione.replace(lunghezza, 1, "+");
cout << "Equazione ricevuta: " << equazione << endl;
//FINE SOSTITUZIONI INIZIALI
string equa_p=equazione.substr(0, equazione.find("="));
string equa_d=equazione.substr(equazione.find("=")+1, equazione.length());
//DIVISIONE DELL'EQUAZIONE IN PRIMA DELL'UGUALE E DOPO DELL'UGUALE
if(equa_d.find("m")==1)
equa_d.replace(0, 2, "m");
string eq_p[100], eq_d[100];
double coeffx[100], coeffnoto[100];
int quant1=0, quant2=0, quantx=0, quantnoto=0;
cout << "prima della sostituzione: " << equa_d << endl;
cout << "prima della sostituzione: " << equa_p << endl;
equa_d=unsost(equa_d); // sostituzione dell m con - al secondo membro
cout << "dopo la sostituzione: " << equa_d << endl;
equa_p=unsost(equa_p); // sostituzione dell m con - al primo membro
cout << "dopo la sostituzione: " << equa_p << endl;
size_t ndopo = count(equa_d.begin(), equa_d.end(), '+');
size_t nprima = count(equa_p.begin(), equa_p.end(), '+');
int i;
for(i=0;i<(ndopo+nprima);i++)
{
eq_d[i]=spezz(i, equa_d);
if(eq_d[i]!="0")
quant1++; // secondo membro
eq_p[i]=spezz(i, equa_p);
if(eq_p[i]!="0")
quant2++; // primo membro
}
for(i=0;i<quant1;i++)
{
if(eq_d[i].find("x")!=-1)
{
coeffx[quantx]=conv(eq_d[i])*-1;
quantx++;
}
else
{
coeffnoto[quantnoto]=conv(eq_d[i])*-1;
quantnoto++;
}
}
for(i=0;i<quant2;i++)
{
if(eq_p[i].find("x")!=-1)
{
coeffx[quantx]=conv(eq_p[i]);
quantx++;
}
else
{
coeffnoto[quantnoto]=conv(eq_p[i]);
quantnoto++;
}
cout << i << " , "; //SE IL COUT VIENE TOLTO DAL COMMENTO IL RISULTATO CAMBIA
}
double sommax=0, sommanoto=0;
for(i=0;i<quantx;i++){
sommax+=coeffx[i];}
cout << sommax << endl;
for(i=0;i<quantnoto;i++){
sommanoto+=coeffnoto[i];}
cout << sommanoto << endl;
return 0;
}
questo è il programma che ho creato, serve per "provare a risolvere equazioni", il suo funzionamento è questo: una volta inserita l'equazione (tipo string), dato che dopo ogni termine si trova un + o un - (per iniziare ho preferito usare solo + e -), nel caso ci fosse un - lo sostituisce con "+m" (la emme la risostituisco dopo con la funzione 'unsost').
In questo modo fra due + c'è sempre un termine, che viene separato e preso singolarmente dal programma.
Successivamente ogni termine viene trasformato da string a double e messo in un array (coeffnoto); se nella stringa si trovava una x, viene tolta e il numero double viene messo in un array a parte (coeffx).
Dopo di che, il mio intento era quello di fare i calcoli con i numeri e ridare il risultato, ma non capisco perché i calcoli sono sbagliati!
In particolare nel punto dove c'è:
cout << i << " , ";
(verso la fine del programma)
se questo cout viene commentato (//) il risultato è uno, se non viene commentato è un'altro!!!!
E non capisco perché il cout influisce sul programma, è una settimana che provo a risolverlo da solo, ma non ce la faccio.
Ringrazierò a vita chi mi può aiutare!!! Accetto qualsiasi consiglio anche sulla struttura del programma!!
Grazie mille! (non sono stato breve come avevo detto inizialmente)