Algoritmo trasformazione da un numero decimale a binario

di il
8 risposte

Algoritmo trasformazione da un numero decimale a binario

Algoritmo trasformazione da un numero decimale a binario
Ho provato a fare un algoritmo per la trasformazione da decimale a binario solo che non so se sia coretto perché il problema mi chiedeva di usare due vettori e farne la conversione da decimale a binario
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int i,n1[100],r,b1[9],t,n2[100],t2,b2[9];

int main(int argc, char *argv[]) 
{
 do
	{
		printf("Inserisci il primo  valore che vuoi trasfomare in binario >>");
		scanf("%d", &n1[i]);
		
	}while(n1[i]>100);

	t=n1[i];
for(i=0;i<9;i++)
{

	if(t%2==0)
	{
			b1[i]=0;
	}else{
	
			b1[i]=1;
		 }
 t=t/2;
}
printf("Il primo  numero trasformato in binaro e':\n");
for(i=8;i>=0;i--)
{
	printf("%d", b1[i]);
}
	do
	{
		printf("\n\nInserisci il secondo valore che vuoi trasfomare in binario >>");
		scanf("%d", &n2[i]);
	}while(n2[i]>100);

	t2=n2[i];
for(i=0;i<9;i++)
{

	if(t2%2==0)
	{
			b2[i]=0;
	}else{
	
			b2[i]=1;
		 }
 t2=t2/2;
}
printf("Il secondo numero trasformato in binaro e':\n");
for(i=8;i>=0;i--)
{
	printf("%d", b2[i]);
}
	return 0;
}

8 Risposte

  • Re: Algoritmo trasformazione da un numero decimale a binario

    Già il fatto che i non sia inizializzato rende inutile il sondaggio...
  • Re: Algoritmo trasformazione da un numero decimale a binario

    Ma poi scusa a te funziona? Lo hai provato prima di chiedere se è corretto?
  • Re: Algoritmo trasformazione da un numero decimale a binario

    Weierstrass ha scritto:


    Già il fatto che i non sia inizializzato rende inutile il sondaggio...
    Lo std C definisce che "i" sara' 0, come il contenuto degli array.

    Poi,
    mi pare che questo sia un tipico esempio di "mi fate i compiti" ? No. Nessuno li fa.

    Poi,
    cosa for-looppi su "i" se i e' sempre stato 0 ?
    non proseguo.
  • Re: Algoritmo trasformazione da un numero decimale a binario

    spectrum ha scritto:


    Weierstrass ha scritto:


    Già il fatto che i non sia inizializzato rende inutile il sondaggio...
    Lo std C definisce che "i" sara' 0, come il contenuto degli array.
    Esistono (e sono usate) le flag per rendere no-init anche le globali, quindi è cattiva programmazione non esplicitare il valore zero, visto che poi parti subito con un scanf("%d", &n1[ i ]). Sei poi incoerente con te stesso, dato che subito dopo scrivi for(i=0;i<9;i++) invece di for(;i<9;i++)

    Il tuo programma è comunque errato perché alla seconda volta che chiami scanf("%d", &n2[ i ]) i vale -1
    Poi,
    mi pare che questo sia un tipico esempio di "mi fate i compiti" ? No. Nessuno li fa.
    Quindi? Dobbiamo fare noi unit test? Fai la trasformazione inversa e controlla che la composizione tra la trasformazione e la sua inversa sia la funzione identità, su un sottoinsieme ragionevole dei valori del dominio.
    Poi,
    cosa for-looppi su "i" se i e' sempre stato 0 ?
    non proseguo.
    Che vuol dire?
  • Re: Algoritmo trasformazione da un numero decimale a binario

    Weierstrass ha scritto:


    Esistono (e sono usate) le flag per rendere no-init anche le globali, quindi è cattiva programmazione non esplicitare il valore zero, visto che poi parti subito con un scanf("%d", &n1[ i ]). Sei poi incoerente con te stesso, dato che subito dopo scrivi for(i=0;i<9;i++) invece di for(;i<9;i++)
    Occhio che l'autore del codice degli orrori non sono io.

    Per altro mi pare che ti atteggi a maestro e di C ne capisci zero.

    Oltre al fatto che lo std C definisce che le variabili non inizializzate vengono messe a 0 (non dal programmatore), le globali

    int a = 0;

    Sono oltre che inutili totalmente vietate in diverse community, addiritura gli script di controllo codice ti segnalano di togliere l'inutile "= 0". Ma se vuoi star felice, int a = 0; e' totalmente lecito, usalo se ti va, puo aiutare chi non conosce il C.

    Weierstrass ha scritto:


    Sei poi incoerente con te stesso, dato che subito dopo scrivi for(i=0;i<9;i++) invece di for(;i<9;i++)
    Non capisco di cosa parli. questo codice e' un codice degli orrori, inutile spenderci tempo.

    Weierstrass ha scritto:


    Quindi? Dobbiamo fare noi unit test? Fai la trasformazione inversa e controlla che la composizione tra la trasformazione e la sua inversa sia la funzione identità, su un sottoinsieme ragionevole dei valori del dominio.
    Idem, non si capisce nulla.

    Weierstrass ha scritto:


    Che vuol dire?
    Vuol dire che non hai idea di C. Se non si incrementa la variabile i prima del loop, cosa serve il for loop ? Sempre che io non abbia letto male il codice degli orrori, in quel caso vuol dire che devo mettere gli occhiali.
  • Re: Algoritmo trasformazione da un numero decimale a binario

    @spectrum

    Ok, allora quota l'autore del post se erano rivolte a lui le frasi, no? Se scrivi "Poi" come faccio a capire che non è rivolto a me?

    Comunque sì, è sbagliato in generale il codice. Le osservazioni erano rivolte all'autore del post.
  • Re: Algoritmo trasformazione da un numero decimale a binario

    Weierstrass,

    ok, no prob . Tuttavia HellFox53 pare disperso, forse siamo stati troppo duri.

    HellFox53,

    alcuni consigli:

    1) Inizia a produrre un codice, se pur sbagliato, leggibile. Io ti consiglio

    https://www.kernel.org/doc/html/v4.10/process/coding-style.html
    Io uso questo. E' uno stile come un'altro. Almeno chi legge puo' capire meglio il codice.

    2) nei forum meglio chiedere consigli su piccoli singoli problemi del C, il che dimostra che stai cercando di capire, dire "non funziona" implica che uno deve leggere tutto il codice e farlo funzionare al posto tuo. In questo modo avrai risposte attinenti e men o rudi.

    3) cerca sempre di debuggare (risolvere il problema) da solo. Per iniziale, aiutati con dei semplici "printf" nei vari loop. Una volta circoscritto il problema, probabilmente lo risolvi solo. Altrimenti farai una domanda mirata.

    Ciao
  • Re: Algoritmo trasformazione da un numero decimale a binario

    Poi cosa significa "non so se é giusto"? La cosa può avere due e due soli significati:
    1) non so se funziona
    Allora non conosci la base O di programmazione (come far eseguire programmi) O di matematica (ovvero non sai utilizzare il sistema binario, ergo anche avendo fatto andare il programma non sai se i risultati che ottieni sono giusti). Se non conosci le basi di queste due materie... Studiale. Se le conosci... Hai tutti gli elementi per rispondere alla tua domanda
    2) non so se ho rispettato la consegna
    In tal caso chiediamo di conoscere tale consegna, dato che non siamo a scuola con te. In mancanza di essa nessuna risposta é possibile
Devi accedere o registrarti per scrivere nel forum
8 risposte