edutecnica

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).