Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [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 con il getchar iniziale...

    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);
    
    
    
    }
    Ma nulla.... non funziona nemmeno questo...

    Cosa devo fare??


    Grazie a tutti...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quando posti su un forum di programmazione (questo o altro) non devi dire

    "nulla ... non funziona"

    ma devi indicare, eventuali errori di compilazione, di runtime e comportamenti anomali ...

    Quale input fornisci al programma, quale output hai e quale ti aspettavi ...

    Cosi' faciliti coloro che ti vogliono rispondere ... altrimenti non sempre potrai avere risposte ...

    Comunque ... direi che, ottenuta la stringa in input, il calcolo lo puoi fare scrivendo

    codice:
    bin=0;
    for(i=0; i<strlen(carat); i++)
       if(carat[i]=='1')
          bin += pow(2, 3-i);
    P.S. Ovviamente esistono codici piu' efficienti (ad esempio, io non utilizzerei la pow), ma era per darti un suggerimento con quello che avevi gia' scritto tu ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il mio problema è che tutto è aposto come sintassi, il codice è pulito e gira ma non fa quello che vorrei che facesse nonostante mi sembra che come procedimento possa andare.


    codice:
    bin=0;
        for(i=0; i<strlen(carat); i++)
            if(carat[i]=='1')
            bin += pow(2, 3-i);
    cmq anche con questa variante non va...

    L'errore che mi da è che qualsiasi valore io inserisca non me lo converte da binario a decimale, mi da solo uno '0' e bon...

    Qulcuno sa cosa posso fare??

    THK...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Ov3rLo4d
    codice:
    bin=0;
        for(i=0; i<strlen(carat); i++)
            if(carat[i]=='1')
            bin += pow(2, 3-i);
    cmq anche con questa variante non va...

    Qulcuno sa cosa posso fare??
    No ... commetti qualche errore perche' questo codice che ti ho proposto funziona regolarmente (con il resto del tuo codice) ...

    A questo punto mostra TUTTO il codice che stai provando adesso e che ti da' il valore errato. E poi indica un esempio di dato in input ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    boh... così viene ora...

    codice:
    /* Scrivere un programma per la conversione di un numero binario puro
     * in intero decimale.
     * Il programma chiede in input una stringa di caratteri
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    #define MAX 100
    
    char carat[MAX];
    int i,pos,bin,n;
    
    main()
    {
        printf("Inserisci una stringa di numeri binari: ");
        scanf("%s",carat);
        bin=0;
        n=strlen(carat);
        for(i=0;i<strlen(carat);i++)
        {
            if(carat[i]=='1')
                bin += pow(2,n-i);
            else
                bin+=0;
        }
        bin=bin/2;
    
        printf("il numero decimale e': %d",bin);
    
    
    
    }
    grazie a tutti

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il codice che ti avevo indicato funzionava con la prima versione del codice che avevi proposto ... quella SENZA scanf ma con la getchar ...

    codice:
            else
                bin+=0;

    Questa parte di codice e' assolutamente inutile ... perche' sommare 0 ad un numero?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Tra parentesi:
    codice:
        n=strlen(carat);
        for(i=0;i<n;i++)
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.