Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    44

    Principiante: Convertitore binario

    Ciao a tutti! Ho iniziato da pochissimo a programmare in C e stavo provando a scrivere un semplice convertitore binario. Il codice che ho scritto è questo:

    codice:
    #include<stdio.h>
    
    int main() {
    
    int n, q=n/2, r=n%2;
    
    printf("Numero decimale: -> ");
    scanf("%d", &n);
    printf("Ecco il numero binario: -> ");
    
    for (n; q!=0; n/2) {
    
    	n/2;
    	printf("%d", r);
    	}
    
    printf("\n");
    
    }
    Premetto che lavoro su linux, quindi compilo con gcc e uso il terminale per far partire i programmi.

    Il problema è che non stampa la successione di resti, che sarebbero le cifre del numero binario, e, anche una volta risolto questo problema, penso che stamperà il numero al contrario.
    Potete darmi una mano??

    Grazie in anticipo!
    Massimo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti mostro il codice corretto senza spiegarti gli errori ... li capirai da solo studiando riga per riga ... naturalmente i resti sono al contrario ma, per ora, lascia perdere questo problema e concentrati sugli errori fatti. Devi capire perche' li hai fatto dato che sono errori che denotano il fatto che non sei ancora padrone delle basi del linguaggio ... e senza quelle ...

    codice:
    int main()
    {
      int n, q, r;
    
      printf("Numero decimale: -> ");
      scanf("%d", &n);
    
      printf("Ecco il numero binario: -> ");
    
      for (q=n; q!=0; n=n/2) 
      {
        r=n%2;
        q=q/2;
        printf("%d", r);
      }
    
      printf("\n");
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    44
    Perfetto! Ho anche voluto fare lo sborone e ho anche dato la possibilità di scegliere la base.

    Ora rimane l'altro problema... Come ordinare il numero visto che lo stampa al contrario?? ho cercato e immagino che dovrei impostare un array e farlo stampare al contrario. Ho trovato questo ma temo che non sarebbe più un semplice convertitore binario, ma un convertitore numerico oltre le mie conoscenze... C'è un altro modo??
    Massimo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' non utilizzi un vettore come hai detto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    44
    perchè non lo so fare...
    Massimo

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    44
    Ho provato a scrivere il codice per il vettore e ho scritto questo però non funziona... l'idea è poi di invertire l'array con un altro ciclo di for...

    codice:
    #include<stdio.h>
    
    int main() {
    
    int n, q, r, b, i;
    char num[i];
    
    /* SCELTA NUMERO DECIMALE*/
    printf("Numero decimale: -> ");
    scanf("%d", &n);
    
    /*SCELTA BASE*/
    printf("Base: -> ");
    scanf("%d", &b);
    
    /*RISULTATO*/
    printf("Ecco %d in base %d: -> ",n, b);
    
    for (q=n, i=0; q!=0; n=n/b, i++) {
    	r=n%b;
    	q=q/b;
    	num[i]=r;
    	}
    
    	putchar(num[i]);
    	printf("\n");
    }
    Che ne dite??
    Massimo

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    cosa significa "non funziona"?

    cmq non credo che il c++ accetti una definizione dell'array con un i non dichiarato.. anzi se non ricordo male

    int i; equivale a int i = 0;

    quindi tu hai un array di 0 elementi da riempire.. ti andrà "out of range"

  8. #8
    Le dimensioni degli array devono essere note a compile-time; se ti serve una struttura dinamica devi usare qualche altro sistema (tipo una lista) o allocare dinamicamente l'array riallocandolo ogni volta che lo devi ingrandire.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    44
    i varia nel ciclo for... aumenta di 1 ogni ciclo... non so come posso fare... mi potete almeno indirizzare verso il codice corretto??

    P.S. è C non C++...
    Massimo

  10. #10
    Originariamente inviato da Stoicenko
    int i; equivale a int i = 0;
    No, int i definisce una variabile intera dal contenuto non definito.
    i varia nel ciclo for... aumenta di 1 ogni ciclo... non so come posso fare... mi potete almeno indirizzare verso il codice corretto??
    Puoi seguire due approcci: determinare il numero di cifre che ti servono utilizzando i logaritmi
    (numero di cifre necessarie = log(numero) / log(base)) e allocare l'array al volo con una malloc oppure considerare l'array più grande che ti potrebbe servire. In quest'ultimo caso devi considerare la lunghezza del numero binario più grande rappresentabile da un int, per cui
    codice:
    char num[sizeof(int)*8]={0};
    .
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.