Newsgroup: it.comp.lang.c++
Titolo: [AIUTO] Aiuto per esercizio...convertitore binario

Un cordiale saluto.
Sono un novizio in c++ ... molto novizio ...:-)
Sto cercando di fare un esercizio 'commissionato' da un amico ma trovo
difficoltà a capire bene le classi e in particolar modo
la realizzazione dell'esercizio...
"Un convertitore binario in c++ realizzato con l'utilizzo di classi
e due funzioni"
Utilizzo Microsoft Visual C++ 6
Se non sbaglio per la struttura occorre realizzare
un file header, un file di implementazione
e un file contenete la main ...
Qualcuno gentilmente mi può aiutare ?
Grazie di cuore.
Dxer

 Grazie di cuore.
Volentieri. Ma cosa intendi per "convertitore binario"? Un programma che
converta un numero da decimale in binario?

 
Sì ... grazie ... un convertitore da decimale a binario e viceversa
utilizzando le classi, due funzioni e le etichette per un 'menu' ...
esempio: 0 = Fine Programma, 1 = Converti in Binario, 2 = Converti in
Decimale ... accidenti ... sono in panne ... faccio ancora difficoltà a
capire le classi e i puntatori ... :-(
Grazie di cuore per l'aiuto...:-)
Dxer

 utilizzando le classi, due funzioni e le etichette per un 'menu' ...
/*
*******************************************************
*Non sono sicuro che sia portabile.
*******************************************************
*Inoltre, ha dei problemi a convertire un numero
*binario dispari in base 10. Se avrň il tempo
*necessario per risolverlo, sta sicuro che ti darň
*le correzioni.
**Suggerirei* di introdurre un controllo sugli errori
*(ad esempio, al programma puň venir chiesto di
*con vertire in decimale 108), anche se non si blocca.
*/
#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>
#define SIZE sizeof(long)*NBITES
const int NBITES=8;
using std::cout;
using std::endl;
class numero{
 std::string num;
public:
 numero():num(){}
 numero(const char *s):num(s){}
 numero(const std::string &s):num(s){}
 numero(int i);
 //Beh, tutti 'sti operatori sono un po' eccessivi (forse)...
 //...ma io ne aggiungerei qualcun altro!
 numero &operator=(const std::string &s) {num=s; return *this;}
 numero &operator=(int i);
 friend ostream &operator<<(ostream &, const numero &);
 friend istream &operator>>(istream &, numero &);
 inline long todec() const;
 inline const std::string tobin() const;
};
ostream &operator<<(ostream &s, const numero &n)
{
 s << n.num;
 return s;
}
istream &operator>>(istream &s, numero &n)
{
 s >> n.num;
 return s;
}
numero::numero(int i)
{
 std::stringstream temp;
 temp << i;
 num=temp.str();
}
numero &numero::operator=(int i)
{
 std::stringstream temp;
 temp << i;
 num=temp.str();
 return *this;
}
long numero::todec() const
{
 long _num=0;
 for(unsigned i=1; num[i]!='\0' && i < SIZE; ++i){
  if(num[i]=='1') _num|= (1 << i);
  else _num <<=1;
 }
#ifdef DBG
 for(int i=0; i < SIZE; ++i) cout << (_num & (1 << i) ? '1' :  '0');
#endif
 return _num;
}
const std::string numero::tobin() const
{
 std::string _num;
 long tmp=atol(num.c_str());;
 bool nozeri=(tmp<0);
 for(int i=SIZE-1; i > -1; --i){
  if(nozeri){
   if(tmp & (1 << i)){
    _num.push_back('1');
    nozeri=false;
   }
   else continue;
  }
  else{
   _num.push_back((tmp & (1 << i) ? '1' : '0'));
  }
 }
#ifdef DBG
 cout << " ";
 for(int i=0; i < SIZE; ++i) cout << (tmp & (1 << i) ? '1' :  '0');
#endif
 return _num;
}
int main()
{
 char scelta;
 numero num;
 cout << "Convertitore binario-decimale";
 for(;;){
  cout << "\n\tMenů:\n" << "\t\tA: convertire da base due a base dieci\n"
  << "\t\tB: convertire da base dieci a base due\n"
  << "\t\tX: uscire" << endl;
  scelta=cin.get();
  std::cin.get();
  if(scelta=='X') break;
  //Qui, se si digita un'opzione non offerta,
  //viene richiesto comunque di inserire il
  file://numero; si dovrebbe avvisare _prima_...
  cout << "Immettere il numero: ";
  std::cin >> num;
  std::cin.get();
  switch(scelta){
   case 'B':
    cout << "\nIl numero, in binario, č: " << num.tobin();
   break;
   case 'A':
    cout << "\nIl numero, in base dieci č: " << num.todec();
   break;
   default: cout << "\nOpzione non riconosciuta: " << scelta;
   break;
  }
 }
 return 0;
}

 
Grazie "Zero_su_win" ...:-)
Mi metto subito a studiarla per benino ...
Non c'è che dire ... sarà un lavorone per me novizio ...
tanti bei comandi nuovi ... e la cosa mi piace ...:-)
Grazie di cuore ...
Spero di poter ricambiare un giorno ... :-)
Dxer