PDA

Visualizza la versione completa : [C/C++] Convertire numero in binario


AngeloV
04-12-2010, 09:10
Buongiorno a tutti,

sono alle prime armi con il ling. di programmazione e devo risolvere un esercizio:
convertire un numero in binario


//Direttiva al preprocessore

#include <iostream>
using namespace std;

#include <math.h>
//N=100
#define N 100

//Definisco il tipo intero array: vettore[N]
typedef int vettore[N];

int main () {
//Dichiaro le variabili
int numero,uscita;
int i=0;
int j=0;
int n;
vettore resto;
vettore definitivo;

cout<<"Inserire il numero che vuoi trasformare in binario: ";
cin>>numero;

cout<<endl;

uscita=numero;

do{
resto[i++]=uscita%2;
uscita=uscita/2;
}
while ( uscita>=1 );

/*********
SCRITTURA MANUALE
cout<<"il valore in binario e': " <<resto[0]<<resto[1]<<resto[2]<<resto[3]<<endl;
********/

//Scrittura con il ciclo for
n=i;
for (i=0;i<n;i++)
cout << resto[i];
cout<<endl;

/*************************
Da questo punto in poi, ho tentato pi volte di riuscire ad ordinare l'array, senza alcun risultato positivo.
So che devo far corrispondere al resto[i] (nel caso in cui i=max) l'array definitivo[j] (con j=0),
per non riesco a scriverlo in un codice accettabile.



********************************/


//Numero in binario invertendo la divisione in successione
for (j=0; j<n; j++){
definitivo[j++];
for (i=n;i>0;i--)
definitivo[j]=resto[i];
cout << definitivo[j];
}


cout<<endl;













system ("PAUSE");
return 0;




}

YuYevon
04-12-2010, 09:52
La prossima volta che posti il codice usa i tag "code", vedi il punto 6 del regolamento interno.

Comunque rivediti il ciclo di inversione...



for (j = 0; j < n; j++) {
definitivo[j] = resto[n-j-1];
cout << definitivo[j];
}

AngeloV
04-12-2010, 10:15
Grazie, mi puoi spiegare perch si mette quell'apice?


definitivo[n-j-1]

YuYevon
04-12-2010, 10:16
Originariamente inviato da AngeloV
mi puoi spiegare perch si mette quell'apice?


Quale apice? :spy:

AngeloV
04-12-2010, 10:18
scusa, l'indice tra le parentesi quadre, perch proprio [n-j-1]?

YuYevon
04-12-2010, 10:31
Se ti fai i conti noterai che in quel modo in "definitivo" hai proprio il numero binario invertito alla fine del ciclo.

Se n (che la lunghezza del numero binario) ad esempio 5, alla prima iterazione (j=0) hai

definitivo[0] = resto[5-0-1] -> definitivo[0] = resto[4]

dove definitivo[0] il primo elemento di "definitivo" e resto[4] l'ultimo elemento di "resto".

All'iterazione successiva (j=1) hai

definitivo[1] = resto[5-1-1] -> definitivo[1] = resto[3]

quindi al secondo elemento di "definitivo" assegni il penultimo di "resto" e cos via... alla fine all'ultimo elemento di "definitivo" assegnerai il primo di "resto" e il ciclo termina.

AngeloV
04-12-2010, 12:10
Sei gentilissimo, ti ringrazio!

Ho capito l'errore che facevo.

AngeloV
04-12-2010, 14:15
Posto uno simile che sto tentando di fare. Penso sempre che al ciclo for sbaglio qualcosa.



//direttiva al preprocessore
#include <iostream>
using namespace std;
//sostituzione N con 100
#define N 100
//definisco il tipo array
typedef int vettore[N];
#include <math.h>

//funz. principale

int main(){
//dichiarazioni variabili
vettore numbin;
int nummax;


//dato un numero in input
cout<<"Inserisci il numero massimo di cifre che dovrai inserire: ";
cin>>nummax;
cout<<"Inserisci il numero in binario: ";
cin>>numbin[nummax];

cout<<"il numero e': " <<numbin[nummax] <<endl;

//in numbin[nummax] c' il valore massimo dell'indice scelto dall'utente

int somma=0;
int i=nummax;
for(i=nummax;i>0;i--)
somma += (numbin[i]*(2^(nummax-i)));
cout<<"il numero e': " <<somma <<endl;







system ("PAUSE");
return 0;



}

YuYevon
04-12-2010, 17:01
Se il tuo scopo con queste righe



cout<<"Inserisci il numero in binario: ";
cin>>numbin[nummax];


quello di leggere un numero binario e di salvare ogni cifra in un elemento dell'array diverso, stai sbagliando. Per assegnare ogni cifra binaria ad un elemento diverso devi leggerle una per una in un ciclo iterativo e procedere con l'assegnazione; in quel modo stai soltanto salvando il numero binario (tra l'altro letto come un normalissimo numero decimale) nella componente di indice "nummax" dell'array numbin.

AngeloV
04-12-2010, 17:04
Io ti ringrazio sempre per l'aiuto. Ho modficato infatti ed ora mi trovo in questo punto



//direttiva al preprocessore
#include <iostream>
using namespace std;
//sostituzione N con 100
#define N 100
//definisco il tipo array
typedef int vettore[N];
#include <math.h>

//funz. principale

int main(){
//dichiarazioni variabili
vettore numbin, definitivo;
int nummax;
int i=0;

//dato un numero in input
cout<<"Inserisci il numero massimo di cifre che dovrai inserire: ";
cin>>nummax;
cout<<"Inserisci ogni cifra del numero in binario e premi invio:\n";
do
for (i=0;i<nummax;i++)
cin>>numbin[i];
while((numbin[i]>1)&&(numbin[i]<0));
cout<<endl;
cout<<"Il numero in binario che hai scritto e': ";
for (i=0;i<nummax;i++)
cout<<numbin[i];
cout<<endl;

int j=0;

cout<<"Il numero ordinato e': ";
for (j=0;j<nummax;j++){
definitivo[j]=numbin[nummax-j-1];
cout << definitivo[j];
}

cout<<endl;

//uscita del numero in decimale

int somma=0;

for (j=0;j<nummax;j++)
somma += ((definitivo[j])*(2^(j)));

cout<<"Il numero in decimale e': " <<somma <<endl;





system ("PAUSE");
return 0;



}


Come vedi mi trovo sempre male con il definitivo... Poi prima ancora quando ho impostato il Do...while, non riesco a dirgli che se il numero non (0,1) deve far riscrivere.

Loading