Oppure

Loading
03/10/16 16:00
Birkhoff92
salve , ho scritto questo codice ma non capisco l'errore che mi restituisce sullo switch(A) perchè me lo riporta convrertitorecompleto.cpp:84:1: error: statement requires expression of integer type ('int [100]' invalid)
switch(A)
^ ~
1 error generated.
//Sanseverino Raffaele
//Convertitore da bin
#include<iostream>
#include<stdlib.h>
using namespace std;
void binario(int n);
void ottale(int n);
void esadecimale(int n);
int main()
{
int n;
char risposta;
do
{
cout<<"Inserisci un numero decimale per convertirlo: ";
cin>>n;
if(n<0)
cout<<"Impossibile convertire";
else
{
binario(n);
ottale(n);
esadecimale(n);
cout<<endl<<"Vuoi continuare? [n=no,s=si]: ";
cin>>risposta;
system("cls");
}
}
while((risposta!='n') && (risposta!='N'));
return 0;
}
void binario(int n)
{
int A[100],c=0,i=0;
cout<<"Conversione binaria: ";
if(n==0)
cout<<"0";
else
while(n>0)
{
A[c]=n%2;
n=n/2;
c++;
}
for(i=c-1;i>=0;i--)
cout<<A;
cout<<endl;
}

void ottale(int n)
{
int A[100],c=0,i=0;
cout<<"Conversione ottale: ";
if(n==0)
cout<<"0";
else
while(n>0)
{
A[c]=n%8;
n=n/8;
c++;
}
for(i=c-1;i>=0;i--)
cout<<A;
cout<<endl;
}

void esadecimale(int n)
{

int A[100],c=0,i=0;
cout<<"Conversione esadecimale: ";
if(n==0)
cout<<"0";
else
while(n>0)
{
A[c]=n%16;
n=n/16;
c++;
}
for(i=c-1;i>=0;i--)
{
switch(A)
{
case 10: cout<<"A";
break;
case 11: cout<<"B";
break;
case 12: cout<<"C";
break;
case 13: cout<<"D";
break;
case 14: cout<<"E";
break;
case 15: cout<<"F";
break;
default: cout<<A;
}
}
cout<<endl;
}


Uso CodeRunner su macOs Sierra . Grazie per chiarimenti:hail:
aaa
03/10/16 16:16
Ultimo

for(i=c-1;i>=0;i--)
{
switch(A[i])
{
case 10: cout<<"A";
break;
case 11: cout<<"B";
break;
case 12: cout<<"C";
break;
case 13: cout<<"D";
break;
case 14: cout<<"E";
break;
case 15: cout<<"F";
break;
default: cout<<A[i];
}

// noti la differenza?






Ultima modifica effettuata da Ultimo 03/10/16 16:24
If ok Then GOTO Avanza else GOTO Inizia

03/10/16 16:28
Birkhoff92
grazie mille :) quella [ i ] dimenticata -.- mi vergogno di me
Edit: l'output però è sbagliato :( Inserisci un numero decimale per convertirlo: 1
Conversione binaria: 0x7fff5f65c6f0
Conversione ottale: 0x7fff5f65c6f0
Conversione esadecimale: 1
Ultima modifica effettuata da Birkhoff92 03/10/16 16:32
aaa
03/10/16 16:55
lumo
Prima di procedere, ti consiglio due cose
1) Indenta il codice (anche se probabilmente CodeRunner o quel che è dovrebbe farlo per te). Diventa anche più facile da leggere per noi.
2) Compila questo snippet e guarda come funziona, magari ti arriva un'illuminazione per semplificare tutto (ad esempio renderebbe inutile lo switch)

#include <iostream>
int main()
{
     using namespace std;
     char c = 'A';
     cout << c << endl;
     cout << (int) c << endl;
     char c2 = c + 3;
     cout << c2 << endl;
     cout << (int) c2 << endl;
     return 0;
}
Ultima modifica effettuata da lumo 03/10/16 16:55
aaa
03/10/16 16:57
Template
Lo stesso identico errore segnalato già da Ultimo: alla fine delle funzioni per la conversione in binario ed ottale, tu metti

cout<<A;



Invece che

cout<<A[i];
aaa
03/10/16 18:18
Birkhoff92
grazie per le risposte ;)
aaa
04/10/16 19:38
AldoBaldo
Perché non fare un'unica funzione che tratti tutte le basi restituendo una stringa da visualizzare? Impostando le cifre in un array di const char dal quale estrarre è facile trattare basi di numerazione qualsiasi. E' anche facile fare in modo che vengano accettati i valori negativi. Basta memorizzare all'inizio la condizione valore<0 (magari in un bool), invertire il segno e convertire il valore, quindi aggiungere '-' alla stringa delle cifre se il valore era negativo in partenza.
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.