Esercizio 5
Scrivi un programma che preveda la classe X che possa essere inizializzata indifferentemente con un numero binario (max 8 bit) o decimale e possa restituire in uscita lo stesso numero, indifferentemente in formato binario (max 8 bit) o decimale .
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
const int n=8;
class X {//(contatore)
int d,pos;//d valore
in decimale del numero
int T[n];
void db();
void bd(char *s);
public:
void outd();//output
in decimale
void outb();//output
in binario
X(int num);//costruttore
per i num.dec
X(char *str);//costruttore
per i num.bin
}; //implementazione dei metodi
void X::db(){//da dec a bin
int i=1,
q;//q=quoto
for(int j=0;j < n;j++)T[j]=0;//reset vettore
q=d;
do{
T[n-i]=q%2;
q=q/2;
i++;
}while(q!=0);
for(i=0;i < n;i++){
if(T[i]!=0){//alla 1a
ricorrenza di un valore !=0 in T pos=i;//esce
dal ciclo forzatamente (break) break;//memorizzando
in pos la posizione
//della
prima cifra!=0 partendo da sn
}//fine if
}//fine for
}//fine db()
void X::bd(char *s){//da bin a dec
int j=0,i,lg; //lg=numero di bit della parola binaria,
for(i=0;i < n;i++)T[i]=0;//reset vettore
lg=strlen(s);
for(i=0;i < lg;i++){
if((int)s[i]==48)T[i]=0;
else T[i]=1;
}//fine for
for(i=lg-1;i > =0;i--){
d=d+T[i]*pow(2,j);
j++;
}//fine for
db();
}//fine bd()
void X::outd(){ //ouput in decimale
cout << endl << d << endl;
}
void X::outb(){ //output in binario
for(int i=pos;i < n;i++)cout << T[i];
}
X::X(int num){//costruttore per i decimali
d=num;
db();
}
X::X(char *str){//costruttore per i binari
d=0;
bd(str);
}
main(){
X h(5);//istanza
h.outb();
h.outd();
X k("110");//altra istanza
k.outd();
k.outb();
}//__________fine main
Il listato si caratterizza, più che altro, per
la presenza di due costruttori:
X(int num);
X(char *str);
che si distinguono solo per la segnatura (overload di metodi).