Ciao, sto cercando di capire un programma che ricevuto in ingresso un numero, calcola il segno, calcola il valore assoluto, lo divide in parte intera e parte frazionaria, poi riceve in input la base in cui vuole convertire sia la parte intera che la parte frazionaria..
codice:
//Intestazioni
#include <iostream>
using namespace std;
#include <stdlib.h>
int main ()
{
/*dichiarazioni: x è variabile di input; pfaz_x, pint_x, b, Q, Qprec, segno, cont, P sono variabili di algoritmo; R,I sono variabili di output. */
float x,pfraz_x,F,Fprec,P;
int pint_x, b, Q, R, Qprec, I, cont;
bool segno;
//input numero reale da convertire in base b
cout<<"assegna un numero reale: \t";
cin>>x;
/*memorizzazione del segno e calcolo del valore assoluto*/
if(x<0)
segno=true;
else
segno=false;
x=abs(x);
//calcolo parte intera
pint_x=(int)x;
//calcolo parte frazionaria
pfraz_x=x - pint_x;
cout<<"la parte intera e\':"<<pint_x<<"\n";
cout<<"la parte frazionaria e\':"<<pfraz_x<<"\n";
cout<<"Scegli una base da 2 a 16 \n"; //scelta base
cin>>b;
/*calcolo e stampa della stringa rappresentativa in base b della parte intera del numero.
ATTENZIONE: vedi commento successivo!*/
cout<<"La rappresentazione in base b della parte intera del numero e\': \n";
if(segno)
cout<<"-";
Q=pint_x;
while (Q>0)
{Qprec=Q;
Q=Q/b;
R=Qprec - Q*b;
cout<<R;
} //end while
cout<<"\t ERRORE";
/*N.B.: I resti R sono stampati nell'ordine in cui sono calcolati, mentre dovrebbero essere stampati in ordine inverso rispetto a quello in cui sono calcolati. Le cifre della parte intera quindi visualizzate in ordine inverso. Come si può ottenere la visualizzazione corretta?*/
/*Calcolo e stampa della stringa rappresentativa in base b della parte frazionaria del numero. ATTENZIONE: vedi commento successivo!*/
cout<<"La rappresentazione in base b della parte frazionaria del numero e\': \n";
cout<<"0. \n";
cont=0;
F= pfraz_x;
do
{ P=F*b;
I=(int)P;
F=P-I;
//cout<<"\n test \t F="<<F<<"\n";
cout<<I;
cont++;
}while (F!=0 && cont<10); //end do..while
/*N.B.: Le condizioni di permanenza del ciclo, benchè on scorrette,
non sono del tutto adeguate. Occorrerebbe verificare che la F corrente
non sia uguale ad una precedente, in modo da sospendere il ciclo appena
individuato l'eventuale periodo. Come si può rendere operativo tale controllo?*/
cout<<"\n\n";
system("PAUSE");
return 0; }
perchè è scritto if(segno) cout<<"-"; ??? non dovrebbe essere scritto (segno== true) o (segno==false) ??? thx