Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    57

    [c] convertire un interno in binario

    ciao a tutti ancora qui per questi problemi piccoli piccoli, sono qui pe chiedere come mai non riesco a compilare sto programma, inserendo un numero decimale da tastiera lo deve convertire in binario

    avevo provato a fare na cosa del genere
    codice:
    #include <stdio.h>
    #include <math.h>
    
    int main(void)
    
    {
       int n, bit=1;
       printf("Inserisci un numero decimale");
       scanf("%d", &n);
    
       while (pow(2, bit) < n)
       bit++;
    
       printf("%d", bit);
       return 0;
    }
    ma al momento della compilazione mi da questo errore
    codice:
    gio_c/programma.c -o programma
    /tmp/cc4brl8h.o: In function `main':
    programma.c:(.text+0x4e): undefined reference to `pow'
    collect2: ld returned 1 exit status
    come mai dove sbaglio, oltre a soluzione del problema, mi potete dire se ci sono altri modi per fare questo esercizio, usando il for o if-else.

    p.s. non è consentito usare array
    ù
    grazie a tutti ciao
    †NN PUò PIOVERE PER SEMPRE†

  2. #2
    pow prende due double

  3. #3

    Re: [c] convertire un interno in binario

    Originariamente inviato da Crow©
    ciao a tutti ancora qui per questi problemi piccoli piccoli, sono qui pe chiedere come mai non riesco a compilare sto programma, inserendo un numero decimale da tastiera lo deve convertire in binario

    avevo provato a fare na cosa del genere
    codice:
    #include <stdio.h>
    #include <math.h>
    
    int main(void)
    
    {
       int n, bit=1;
       printf("Inserisci un numero decimale");
       scanf("%d", &n);
    
       while (pow(2, bit) < n)
       bit++;
    
       printf("%d", bit);
       return 0;
    }
    ma al momento della compilazione mi da questo errore
    codice:
    gio_c/programma.c -o programma
    /tmp/cc4brl8h.o: In function `main':
    programma.c:(.text+0x4e): undefined reference to `pow'
    collect2: ld returned 1 exit status
    come mai dove sbaglio, oltre a soluzione del problema, mi potete dire se ci sono altri modi per fare questo esercizio, usando il for o if-else.

    p.s. non è consentito usare array
    ù
    grazie a tutti ciao
    potresti provare secondo me a prendere il modulo della divisione di int con 2 e poi ricorsivamente della parte intera della divisione di int/2 ancora con due

    prima verifichi se il numero e' positivo o negativo
    se e' positivo metti il primo numero a 0 altrimenti a 1
    poi se int%2 == 1 allora il secondo bit e' 1, altrimenti 0
    se poi (int/2)%2 ==1 allora il terzo bit e' 1, altrimenti 0

    e cosi via ricorsivamente

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    57
    ciao duonovembre e grazie per la risposta, mi sono espresso male non devo invertire un decimale in binario ma devo solo dire quanti bit minimo occorre per rappresentare quel numero, esempio se metto 8 allora mi deve restituire 4 cioè 4bit 1000 che rappresenta 8
    †NN PUò PIOVERE PER SEMPRE†

  5. #5
    pow cmq vuole lo stesso dei double

    puoi fare:
    int n //e' la variabile che riempi con scanf

    int i = 2;
    int j = 1;
    while (i< n){
    i=i*2;
    j++;
    }

    j sara' il numero di bit


    credo ci siano soluzioni anche + efficienti

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    codice:
     # include <stdio.h>
    
     int main ()  {
     int i, num;
     int numero_binario [16]; // per interi a 16 bit
     int cifre_inserite; // contatore delle cifre binbarie effettivamente inserite
    
     cifre_inserite = 0;
    
       do {
     		printf( "inserisci un numero maggiore o uguale a 0\n");
     		scanf("%d",&num);
      		if (num<0)
       			printf("sai leggere? deve essere maggiore di 0!!!"); }
      	while(num<0);
    
      printf ("la conversione in binario (scritta correttamente) e': ");
    
      do{
      		numero_binario[cifre_inserite] = num%2;
    		cifre_inserite++;
      		num=num/2;
        }  while (num!=0);
    
     for(i=cifre_inserite-1; i>=0; i--)
               printf("%d", numero_binario[i]);
         // una sola riga per il corpo del for, le graffe non servono
    
    }

  7. #7
    la tua soluzione non funziona xke' pow vuole un double e pur essendo scritta con un codice + elegante e' meno performante di un while scritto come il mio per due motivi essenziali:

    la mia fa esattamente j moltiplicazioni

    la tua fa bit volte dei calcoli di potenza ed inoltre le potenze calcolate con pow sono calcoli molto complessi proprio perche' pow e' uno strumento matematico che lavora con i double e prevede di calcolare una potenza del tipo 1,2565^2,3656 con dei teoremi che nn conosco molto bene ma di alta complessita'

  8. #8

    Re: [c] convertire un interno in binario

    Originariamente inviato da Crow©
    ciao a tutti ancora qui per questi problemi piccoli piccoli, sono qui pe chiedere come mai non riesco a compilare sto programma, inserendo un numero decimale da tastiera lo deve convertire in binario

    avevo provato a fare na cosa del genere
    codice:
    #include <stdio.h>
    #include <math.h>
    
    int main(void)
    
    {
       int n, bit=1;
       printf("Inserisci un numero decimale");
       scanf("%d", &n);
    
       while (pow(2, bit) < n)
       bit++;
    
       printf("%d", bit);
       return 0;
    }
    ma al momento della compilazione mi da questo errore
    codice:
    gio_c/programma.c -o programma
    /tmp/cc4brl8h.o: In function `main':
    programma.c:(.text+0x4e): undefined reference to `pow'
    collect2: ld returned 1 exit status
    come mai dove sbaglio, oltre a soluzione del problema, mi potete dire se ci sono altri modi per fare questo esercizio, usando il for o if-else.

    p.s. non è consentito usare array
    ù
    grazie a tutti ciao
    In realtà compila, solo che il linker non trova la funzione pow, perchè non hai aggiunto la libreria m alle opzioni del linker. Ricorda che math.h non è una libreria, quindi il linkaggio non è automatico.
    Con gcc basta dare:
    codice:
    gcc -o eseguibile sorgente -lm

  9. #9
    Originariamente inviato da Crow©
    ciao duonovembre e grazie per la risposta, mi sono espresso male non devo invertire un decimale in binario ma devo solo dire quanti bit minimo occorre per rappresentare quel numero, esempio se metto 8 allora mi deve restituire 4 cioè 4bit 1000 che rappresenta 8
    Ci sono i logaritmi per risolvere questo genere di problemi:
    bit = trunc ((log in base 2 di 8) + 1);

    codice:
    #include <stdio.h>
    #include <math.h>
    int main(void){
    /*
    * Compiled and tested with:
    * i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
    *
    * Examples:
    * 7 = 111 -> 3 bit
    * 8 = 1000 -> 4 bit
    */
    	int n, bit=0;
    	printf("Inserisci un numero decimale");
    	scanf("%d", &n);
    	if (0 != n){
    		bit = (int) (1+log (n)/log (2.0));
    	}
    	printf("%d", bit);
    	return 0;
    }

  10. #10
    risolto?

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.