Domanda Risolto Conversione binario decimale con Array.

Stato
Discussione chiusa ad ulteriori risposte.

xDrawingel

Utente Gold
1 Aprile 2012
731
31
110
239
Buon giorno, la mia professoressa mi ha lasciato questo esercizio, dove devo convertire un numero binario a decimale usando un Array (vettore).
Non ho capito bene cosa si intende per utilizzare il vettore, poichè non credo che ne ho bisogno... Ci ho provato da me, ma il problema sta che mi moltiplica solo un numero binario, anzichè tutto: cioè ho il numero (101) che sarebbe 5, mi moltiplica solo il primo numero (1) per 2*0 e non so come risolvere.
Qui c'è il codice, grazie mille in anticipo.


Codice:
//Conversione Binario a Decimale
#include<iostream>
using namespace std;

const int MAX=10;

void Conversione(int v[],int n)
{
    for(int i=0;i<1;i++)
    {
        v[i]=v[i]*(2*i);
        cout<<v[i];
    }
    
}
int main()
{
    int n,v[MAX];
    cout<<"Inserisci il numero binario da convertire:  ";
    cin>>n;
    Conversione(v,n);
    system("pause");
    return 0;
}
 
Buon giorno, la mia professoressa mi ha lasciato questo esercizio, dove devo convertire un numero binario a decimale usando un Array (vettore).
Non ho capito bene cosa si intende per utilizzare il vettore, poichè non credo che ne ho bisogno... Ci ho provato da me, ma il problema sta che mi moltiplica solo un numero binario, anzichè tutto: cioè ho il numero (101) che sarebbe 5, mi moltiplica solo il primo numero (1) per 2*0 e non so come risolvere.
Qui c'è il codice, grazie mille in anticipo.


Codice:
//Conversione Binario a Decimale
#include
using namespace std;

const int MAX=10;

void Conversione(int v[],int n)
{
for(int i=0;i {
v[i]=v[i]*(2*i);
cout }

}
int main()
{
int n,v[MAX];
cout cin>>n;
Conversione(v,n);
system("pause");
return 0;
}
Il for va da 0 a i < 1... Quindi ovvio che ti fa solo il primo.. Comunque sinceramente nemmeno io ho capito a cosa serve l array , se riesci a informarti meglio posso darti una mano a fare qualcosa di meglio

Inviato dal mio LG-H870 utilizzando Tapatalk
 
  • Mi piace
Reazioni: xDrawingel
Ultima modifica:
Il for va da 0 a i < 1... Quindi ovvio che ti fa solo il primo.. Comunque sinceramente nemmeno io ho capito a cosa serve l array , se riesci a informarti meglio posso darti una mano a fare qualcosa di meglio

Inviato dal mio LG-H870 utilizzando Tapatalk
Ciao, allora forse ho capito.
Dovrei mettere ogni numero (binario) in ogni singola cella dell'array cioè : ho il numero 101 devo andare a mettere su v[0]=1; e così via (almeno credo).
E successivamente devo fare stampare il risultato della conversione in decimale
Codice:
//Conversione Binario a Decimale
#include<iostream>
using namespace std;

const int MAX=10;

void caricaArray (int v[])
{
    int x;
    cout<<"Inserisci un numero alla volta da convertire a decimale, premi 'x' per uscire dal ciclo ";
    for (int i=0;i<100;i++)
    {
        cin>>v[i];
        if(v[i]==x)
        {
            cout<<"Sei uscito dal ciclo";
        }
    }
}


void Conversione(int v[])
{
    for(int i=0;i<10;i++)
    {
        v[i]=v[i]*(2*i);
        cout<<v[i];
    }
   
}
int main()
{
    int v[MAX];
    caricaArray(v);
    Conversione(v);
    system("pause");
    return 0;
}

Ho provato a cambiare il valore del for ( dove ho messo i<1) adesso, mi stampa ogni singolo risultato della cella es. 00408480127207466713600
 
Spero non sia troppo avanzato e che sopratutto sia capibile...

C++:
#include <stdio.h> //printf , scanf
#include <string.h> //strlen , memset
#include <string> //std::string
#include <cstdlib> //strtol
#include <cmath> //pow

using namespace std;

bool dialog();
unsigned long int CalcolateConversion(int* pInfo , size_t len);

int main()
{
    //main Loop
    while(dialog())
    {
        //repeat question
        printf("Vuoi ripetere l'operazione?\n1. Si\n2. No\n");
        char ans = 0;
        scanf(" %c",&ans);
        
        if(ans != '1')
            break;
    }
    
    printf("Sei uscito dal programma.. \n");
}



bool dialog()
{
    //take info
    static char buffer[256];
    memset(buffer , 0 , sizeof(buffer));
    printf("Inserisci il numero binario.\n");
    scanf(" %s",buffer);
    buffer[sizeof(buffer)-1] = '\0'; //safer
    
    //create conteiners
    string stNumber(buffer);
    int* pInfoConteiner = new int[stNumber.length()];
    memset(pInfoConteiner,0,sizeof(int) * stNumber.length());
    
    //exams input
    for(int i = 0 ; i < stNumber.length() ; i++)
    {
        char read = stNumber.at(i);
        
        if(read != '0' && read != '1')
        {
            delete[] pInfoConteiner;
            printf("Non hai inserito un numero binario.\n");
            return true;
        }
        
        
        pInfoConteiner[i] = read - '0';
    }
    
    unsigned long int result = CalcolateConversion(pInfoConteiner,stNumber.length());
    printf("Il risultato è %d. \n",result);
    
    delete[] pInfoConteiner;
    return true;
}



unsigned long int CalcolateConversion(int* pInfo , size_t len)
{
    unsigned long int result = 0;
    
    for(int i = len-1 ; i >= 0; i--)
    {
        result += (unsigned long int) (pow(2.0 , (float)i ) * pInfo[i]);
    }
    
    return result;
}

per eventuali chiarimenti sono qui
 
  • Mi piace
Reazioni: xDrawingel
Spero non sia troppo avanzato e che sopratutto sia capibile...

C++:
#include <stdio.h> //printf , scanf
#include <string.h> //strlen , memset
#include <string> //std::string
#include <cstdlib> //strtol
#include <cmath> //pow

using namespace std;

bool dialog();
unsigned long int CalcolateConversion(int* pInfo , size_t len);

int main()
{
    //main Loop
    while(dialog())
    {
        //repeat question
        printf("Vuoi ripetere l'operazione?\n1. Si\n2. No\n");
        char ans = 0;
        scanf(" %c",&ans);
       
        if(ans != '1')
            break;
    }
   
    printf("Sei uscito dal programma.. \n");
}



bool dialog()
{
    //take info
    static char buffer[256];
    memset(buffer , 0 , sizeof(buffer));
    printf("Inserisci il numero binario.\n");
    scanf(" %s",buffer);
    buffer[sizeof(buffer)-1] = '\0'; //safer
   
    //create conteiners
    string stNumber(buffer);
    int* pInfoConteiner = new int[stNumber.length()];
    memset(pInfoConteiner,0,sizeof(int) * stNumber.length());
   
    //exams input
    for(int i = 0 ; i < stNumber.length() ; i++)
    {
        char read = stNumber.at(i);
       
        if(read != '0' && read != '1')
        {
            delete[] pInfoConteiner;
            printf("Non hai inserito un numero binario.\n");
            return true;
        }
       
       
        pInfoConteiner[i] = read - '0';
    }
   
    unsigned long int result = CalcolateConversion(pInfoConteiner,stNumber.length());
    printf("Il risultato è %d. \n",result);
   
    delete[] pInfoConteiner;
    return true;
}



unsigned long int CalcolateConversion(int* pInfo , size_t len)
{
    unsigned long int result = 0;
   
    for(int i = len-1 ; i >= 0; i--)
    {
        result += (unsigned long int) (pow(2.0 , (float)i ) * pInfo[i]);
    }
   
    return result;
}

per eventuali chiarimenti sono qui
Ciao grazie, si è chiarissimo! Grazie mille! Ti devo un favore!, chiudo in quanto ho risolto il problema :D
 
Stato
Discussione chiusa ad ulteriori risposte.