| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  09-06-2008, 12:58 | #1 | 
| Member Iscritto dal: Oct 2007 
					Messaggi: 44
				 | 
				
				[C] Problemi stringa intero
			 
		Ciao a tutti, ho un problema con questo programma: /* Scrivere un programma per la conversione di un numero binario puro * in intero decimale. * Il programma chiede in input una stringa di caratteri */ Il problema è che deve essere data una stringa di caratteri e poi dopo deve essere convertita in un numeri intero da binario a decimale.... Io ho provato a fare questo: Codice: #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 4
char carat[MAX],c;
int i=0,pos,bin;
main()
{
    pos=strlen(carat)-1;
    printf("Inserisci una stringa di numeri binari: ");
    while((c=getchar()) != '\n')
    {
        carat[i++]=c;
    }
    for(i=0;i<strlen(carat);i++)
    {
        if(carat[i]=='1')
            carat[i]=pow(2,pos)*1;
        else
            carat[i]=0;
        pos--;
    }
    for(i=0;i<strlen(carat);i++)
    {
        bin=carat[i]+bin;
    }
    printf("il numero decimale e': %d",bin);
}ho provato anche a dare una semplice stringa in questo modo senza getchar: Codice: #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 4
char carat[MAX];
int i,pos,bin;
main()
{
    printf("Inserisci una stringa di numeri binari: ");
    scanf("%s",carat);
    for(i=0;i<strlen(carat);i++)
    {
        pos=strlen(carat);
        if(carat[i]==1)
            carat[i]=(2^pos)*1;
        else
            carat[i]=0;
        pos--;
    }
    for(i=0;i<strlen(carat);i++)
    {
        bin=carat[i]+bin;
    }
    printf("il numero decimale e': %d",bin);
}Cosa devo fare?? Grazie a tutti... | 
|   |   | 
|  09-06-2008, 15:30 | #2 | 
| Senior Member Iscritto dal: Jun 2005 Città: Napoli 
					Messaggi: 2599
				 | 
		io avevo fatto tempo fa un programma simile...te lo mostro: Codice: #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int pow2(int value){
        int ris = 1;
        int i;
        for (i = 1; i <= value; i++) {
                ris *= 2;
        }
        return ris;
}
int main(void)
{
        char bin[10]; /*max 10 bit*/
        int dec = 0;
        int i;
        printf("Inserisci il numero binario\n");
        scanf("%s", bin);
        for (i = 0; i <= strlen(bin) - 1; i++) {
                if (bin[i] == '1') {
                        dec += pow2(strlen(bin) - i - 1);
                }
        }
       printf("il numero in decimale  e': %d\n", dec);
return 0;
}La funzione pow del C l'ho usata poche volte, perchè nn riucivo a capire coe funzionava bene (mah) perciò l'ho riscritta. Dimmi se va bene. Poi perchè usi delle variabili globali? 
				__________________ Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread Ultima modifica di gepeppe : 09-06-2008 alle 15:34. | 
|   |   | 
|  09-06-2008, 15:43 | #3 | |
| Member Iscritto dal: Feb 2006 
					Messaggi: 134
				 | Quote: 
 Codice:     i = strlen(carat) - 1;
    do
    {
        bin += (carat[i] == '1' ? (int)pow(2, (strlen(carat) - 1 - i)) : 0);
    }
    while(i--);  | |
|   |   | 
|  09-06-2008, 23:05 | #4 | |
| Senior Member Iscritto dal: Sep 2002 Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello 
					Messaggi: 9571
				 | Quote: 
   | |
|   |   | 
|  10-06-2008, 18:04 | #5 | 
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | 
		niubbi   Codice: #include <iostream>
#include <string>
using namespace std;
int main()
{
	cout << "enter binary number: ";
	string strInput;
	cin >> strInput;
	unsigned int nOutput = 0;
	for (unsigned i = 0; i < strInput.length(); i++)
	{
		nOutput = nOutput * 2;
		if (strInput[i] == '1')
		{
			nOutput++;
		}
		else if (strInput[i] != '0')
		{
			cout << "invalid input" << endl;
			return 1;
		}
	}
	cout << nOutput;
	return 0;
} | 
|   |   | 
|  10-06-2008, 19:04 | #6 | 
| Senior Member Iscritto dal: Jun 2005 Città: Napoli 
					Messaggi: 2599
				 | 
		già..peccato che lo voleva in C..."non niubbio"   skerzo è!   
				__________________ Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread Ultima modifica di gepeppe : 10-06-2008 alle 19:10. | 
|   |   | 
|  10-06-2008, 19:09 | #7 | 
| Senior Member Iscritto dal: May 2004 Città: Londra (Torino) 
					Messaggi: 3692
				 | 
		strtoi dovrebbe essere standard Codice: int res=strtoi(stringa,NULL,2); Ma forse al prof. non va bene troppo corto... e usare almeno all'inizio un po' di matematica binaria non puo' che fare bene. In qualsiasi caso eviterei funzioni come pow, esponenti o simili. Meglio l'uso di << e | 
				__________________ Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 09:10.









 
		 
		 
		 
		











 
  
 



 
                        
                        










