[C] Come inserisco una serie di cifre in ogni cella di un vettore?
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 13 di 13

Discussione: [C] Come inserisco una serie di cifre in ogni cella di un vettore?

Cambio titolo
  1. #1
    aka Mister_Birra L'avatar di aleword
    Registrato il
    03-03
    Località
    Nella birra
    Messaggi
    6.752

    [C] Come inserisco una serie di cifre in ogni cella di un vettore?

    Stamattina cazzeggiavo con C e mi sono fatto un programmino per convertire un numero binario in decimale. Questo:

    Codice:
    #include <stdio.h>
    #define MAX 50
    
    int main(){
    	
    	int a,b,c,dec, bin_arr[MAX];
    	printf("\n\n   CONVERTITORE BINARIO->DECIMALE (v.1.2) \n\nDigita il numero da convertire e poi scrivi 2:\n");
    
    	// Inserisce ogni cifra nel vettore, quindi anche il 2
    	for (a=0; bin_arr[a-1]!=2; a++)	scanf("%d", &bin_arr[a]);
    
    	printf("\nQuesto è il binario: ");
    
    	// Stampa il binario senza il 2
    	for (b=0; bin_arr[b]!=2; b++) printf("%d", bin_arr[b]);
    
    	printf(" che in decimale è ");
    
    	dec=0;
    	b--;
    	// L'indice c aumenta mentre l'indice b (b-1) diminuisce. b fa anche da potenza
    	for (c=0; b>=0; c++){
    		dec=dec+(bin_arr[c]*potenza(2,b));
    		b--;		
    	}
    	printf("%d\n\n", dec);
    }
    
    // Funzione potenza
    int potenza (int base, int n)
    {
    	int i, p;
    	p=1;
    	if(n==0) return 1;
    	else{
    		for (i=1; i<=n; i++) p=p*base;
    		return p;
    		}
    }
    Vorrei che vi focalizziate sulla prima parte, in pratica ho usato come metodo quello di riempire un vettore di 0 e 1 (dettati dall'utente) e poi agire piano piano su ogni singola cella. Il problema è che l'unico modo che ho trovato per formare il vettore è questo:

    Per esempio, per mettere 010111 si deve fare: 0 - invio, 1 - invio, 0 - invio, 1 - invio, 1 - invio, 1 - invio e 2 - invio (è un modo per far capire al ciclo for che il numero è terminato).

    E' ovviamente scomodo (potete provarlo compilandolo così capite meglio), come faccio per semplificarlo? Cioè l'utente potrebbe semplicemente scrivere il suo numero 010111 e questo viene "tramutato" in un vettore bin_arr[]={0,1,0,1,1,1}
    Ultima modifica di aleword; 12-04-2008 alle 18:24:37

  2. #2
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    hai provato così?
    Codice:
    char numero[10];
    scanf("%s",&numero);

  3. #3
    aka Mister_Birra L'avatar di aleword
    Registrato il
    03-03
    Località
    Nella birra
    Messaggi
    6.752
    Citazione marcelloma Visualizza Messaggio
    hai provato cos&#236;?
    Codice:
    char numero[10];
    scanf("&#37;s",&numero);
    Ci avevo gi&#224; provato in qualche modo... Comunque ammesso che vada bene, ora dovrei cambiare alcune cose attorno a quella parte. Ora vedo.

    EDIT: uhm, non funzia Mi spara una caterva di indirizzi di memoria
    Ultima modifica di aleword; 12-04-2008 alle 19:17:40

  4. #4
    Utente L'avatar di doomersek
    Registrato il
    11-07
    Messaggi
    837
    c'&#232; un errore gi&#224; nel primo for... bin_arr[a-1]!=2 la prima volta &#232; come se fosse bin_arr[-1]!=2 ovvero una locazione di memoria non definita in cui non si pu&#242; andare a guardare.. correggi il programma e ripostalo

  5. #5
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Codice:
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int main(){
        unsigned int i,res=0,len,err=0;
        char binario[33];
        do{
            err=0;
            printf("Inserisci un numero binario\n");
            scanf("&#37;s",binario);
            len=strlen(binario);
            for(i=0;i<len;++i){
                binario[i]-='0';
                if(binario[i]==1) res+=pow(2,len-i-1);
                    else if(binario[i]!=0) {
                        err=1;
                    }
            }
            if(!err) printf("%d\n",res);
                else printf("Numero non corretto, sei un pirla\n");
        }while(err);
        return 0;
    }
    fatto ora :P
    dovrebbe andare abbastanza bene (binari fino a 31 bit a quanto ho provato...)
    Ultima modifica di nico402; 12-04-2008 alle 22:09:19 Motivo: serviva di settare err=0 all'inizio del do...while


  6. #6
    aka Mister_Birra L'avatar di aleword
    Registrato il
    03-03
    Località
    Nella birra
    Messaggi
    6.752
    Citazione nico402 Visualizza Messaggio
    Codice:
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int main(){
        unsigned int i,res=0,len,err=0;
        char binario[33];
        do{
            printf("Inserisci un numero binario\n");
            scanf("%s",binario);
            len=strlen(binario);
            for(i=0;i<len;++i){
                binario[i]-='0';
                if(binario[i]==1) res+=pow(2,len-i-1);
                    else if(binario[i]!=0) {
                        err=1;
                    }
            }
            if(!err) printf("%d\n",res);
                else printf("Numero non corretto, sei un pirla\n");
        }while(err);
        return 0;
    }
    fatto ora :P
    dovrebbe andare abbastanza bene (binari fino a 31 bit a quanto ho provato...)
    abbè non conosco ancora quelle librerie math.h e string.h, speravo di farcela senza usarle

  7. #7
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    Citazione nico402 Visualizza Messaggio
    Codice:
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int main(){
        unsigned int i,res=0,len,err=0;
        char binario[33];
        do{
            printf("Inserisci un numero binario\n");
            scanf("&#37;s",binario);
            len=strlen(binario);
            for(i=0;i<len;++i){
                binario[i]-='0';
                if(binario[i]==1) res+=pow(2,len-i-1);
                    else if(binario[i]!=0) {
                        err=1;
                    }
            }
            if(!err) printf("%d\n",res);
                else printf("Numero non corretto, sei un pirla\n");
        }while(err);
        return 0;
    }
    fatto ora :P
    dovrebbe andare abbastanza bene (binari fino a 31 bit a quanto ho provato...)
    al posto di questo userei res|=1<<len-i

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

  8. #8
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione aleword Visualizza Messaggio
    abb&#232; non conosco ancora quelle librerie math.h e string.h, speravo di farcela senza usarle
    da math.h prendo l'elevamento a potenza e da string.h prendo la lunghezza di una stringa.. nient'altro..

    @minibill: res|=1<<len-i se ti dicessi che non ho mai usato quegli operatori per operazioni matematiche? ora comunque mi informo per vedere cosa mi sono perso


  9. #9
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    Citazione nico402 Visualizza Messaggio
    Codice:
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        unsigned int i,res=0,len;
        bool err=false;
        char binario[33];
        do{
            err=0;
            printf("Inserisci un numero binario\n");
            scanf("%s",binario);
            len=strlen(binario);
            for(i=0;!err && (i<len);++i){
                if(binario[i]=='1')
                    res|=1<<len-i;
                else if(binario[i]!='0')
                    err=true;
            }
            if(!err)
                printf("%d\n",res);
            else
                printf("Numero non corretto, sei un pirla\n");
        }while(!err);
        return 0;
    }
    ho fatto un paio di correzioni

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

  10. #10
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Citazione nico402 Visualizza Messaggio
    da math.h prendo l'elevamento a potenza e da string.h prendo la lunghezza di una stringa.. nient'altro..

    @minibill: res|=1<<len-i se ti dicessi che non ho mai usato quegli operatori per operazioni matematiche? ora comunque mi informo per vedere cosa mi sono perso
    >> = shift a destra, cioè elimina l'ultima cifra (in binario) e fa entrare uno zero a sinistra, fatto di una cifra equivale alla divisione per 2

    << = stessa cosa ma speculare, equivale alla moltiplicazione per 2

  11. #11
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    inoltre, 1<<bit ha due vantaggi
    a)non &#232; una funzione di libreria
    b)viene eseguito dalla CPU
    il che vuol dire *much* faster

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

  12. #12
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Citazione miniBill '90 Visualizza Messaggio
    b)viene eseguito dalla CPU
    il che vuol dire *much* faster
    tutto viene eseguito dalla cpu a parte l' i/o, il fatto e' che e' un'operazione che molte cpu hanno come istruzione diretta e non devono fare molti calcoli

  13. #13
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    questo volevo dire

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •