Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30

    [LINGUAGGIO C] conversioni decimale a binario

    ...Ciao a tutti.. Forse mi prenderete in giro per questo esercizio che io non riesco a risolvere...ma senza l'uso dei vettori mi risulta veramente difficile.
    L'esercizio mi chiede dato un intero calcolarne il corrispondente binario senza l'uso dei vettori.
    Io sono arrivata a risolverlo in parte..... mi manca solo riscriverlo da destra verso sinistra....
    questo è il codice da me scritto.
    Ditemi se sto facendo bene:
    #include<stdio.h>

    main()
    {
    int a;

    printf("Inserisci un numero intero: ");
    scanf("%d", &a);

    if(a<128)
    {
    while(a!=0){


    if(a%2==0)
    printf("0 ");

    if(a%2!=0)
    printf("1 ");
    a=a/2;
    }
    }else
    printf("Numero fuori scala!");



    fflush(stdin);
    getchar();
    }

  2. #2
    Puoi ottenere le cifre binarie direttamente nell'ordine giusto cambiando approccio...
    codice:
    #include <stdio.h>
    
    int main(void)
    {
        int inputN, first1=0, counter;
        printf("Inserisci il numero: ");
        scanf("%d",&inputN);
        if(inputN<0)
        {
            putchar('-');
            inputN=-inputN;
        }
        for(counter=sizeof(inputN)*8;counter;counter--)
        {
            if(inputN&(1<<(counter-1)))
            {
                first1=1;
                putchar('1');
            }
            else if(first1)
                putchar('0');
        }
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    Non ho capito il tuo procedimento.........

  4. #4
    Ciclo sui bit del numero da quello più significativo a quello meno significativo, e uno per uno verifico se sono impostati (utilizzando l'operatore &). Se il bit è impostato stampo un 1, se no uno 0 (a meno che non sia ancora stato stampato nessun 1, nel qual caso non stampo niente).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    Ma non stai usando il linguaggio c, vero??? è diversa la sintassi, o sbaglio?????????

  6. #6
    È normalissimo C... cosa non ti torna?
    ---EDIT---
    Avevo inserito una parola chiave C++ per errore (true), ora l'ho rimossa, adesso è C puro.
    ---RIEDIT---
    Una versione con qualche piccola miglioria "estetica" e con controllo della validità dell'input:
    codice:
    #include <stdio.h>
    
    int main(void)
    {
        int inputN, first1=0, counter;
        printf("Inserisci il numero: ");
        if(scanf("%d",&inputN)==0)
        {
            fputs("Valore non valido.\n",stderr);
            return 1;
        }
        if(inputN<0)
        {
            putchar('-');
            inputN=-inputN;
        }
        for(counter=sizeof(inputN)*8;counter;counter--)
        {
            if(inputN&(1<<(counter-1)))
            {
                first1=1;
                putchar('1');
            }
            else if(first1)
                putchar('0');
        }
        putchar('\n');
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    ....posso commentare il tuo codice...così capisci i punti che mi sono un pò oscuri!!!

    int main(void)
    {
    int inputN, first1, counter;
    printf("Inserisci il numero: ");
    scanf("%d",&inputN);

    if(inputN<0)//se il numero inserito è <0

    { //in questo modo lo fai diventare positivo??
    putchar('-');
    inputN=-inputN;
    }
    for(counter=sizeof(inputN)*8;counter;counter--) // nn capisco perchè moltiplichi per 8
    {
    if(inputN&(1<<(counter-1))) //anche questo non lo capisco
    {
    first1=1;
    putchar('1');
    }
    else if(first1)
    putchar('0');
    }
    return 0;
    }

  8. #8
    Originariamente inviato da bucciula
    //in questo modo lo fai diventare positivo??
    putchar('-');
    inputN=-inputN;
    Sì, e stampo sullo schermo un meno. In questa maniera il programma funziona correttamente anche con i numeri negativi.
    for(counter=sizeof(inputN)*8;counter;counter--) // nn capisco perchè moltiplichi per 8
    sizeof(inputN) mi dà le dimensioni della variabile inputN (che possono variare a seconda del compilatore e della piattaforma su cui compilo il programma) in byte, e ciascun byte contiene 8 bit*; così quindi ottengo il numero totale di bit e parto a ciclare da quello più significativo, andando verso il meno significativo.
    if(inputN&(1<<(counter-1))) //anche questo non lo capisco
    In questa maniera verifico se il counter-1-esimo bit del numero è impostato o meno. Ripassati eventualmente il significato dell'operatore <<, dell'operatore & e come funziona il sistema binario.

    * in realtà ad essere pignoli secondo lo standard sizeof restituisce le dimensioni dei tipi in char (che non sarebbero necessariamente byte), e un byte non è necessariamente 8 bit, ma salvo rarissimissimissimissimissime eccezioni 1 char = 1 byte = 8 bit.

    P.S.: quando inserisci del codice nel messaggio usa i tag [code] ... [/code].
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    Sei stato veramente pazientoso e gentile.... Ti ringrazio!!!
    Per quanto riguarda gli operatori & e >> ci credi che il nostro proff non ce li ha fatti mai utilizzare?? e' per questo che a me veniva difficile capire.... cmq... ti ringrazio veramente tanto.........
    Ciaoooo Ciaoooo

  10. #10
    Di niente, alla prossima!
    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.