Programma che somma numeri binari senza utilizzare array o la conversione

di il
17 risposte

Programma che somma numeri binari senza utilizzare array o la conversione

Salve a tutti,
Avrei urgentemente bisogno di aiuto, ho da poco cominciato un corso universitario di programmazione e come compito valutato mi hanno chiesto di scrivere un programma che prendendo 2 numeri binari ne fa la somma senza però utilizzare array o conversioni. Usando questi due riesco a scrivere il programma ma senza non so proprio come iniziare. Non chiedo la soluzione all’esercizio ma chiedo cortesemente se qualcuno riesce a darmi una mano per iniziare e capirne la logica per andare avanti visto che sono bloccatissimo.

17 Risposte

  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Se puoi convertire i numeri binari in interi, è abbastanza facile. Se questo passaggio ti è vietato, allora occorre un po' d'ingegno...
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Se sai farlo con gli array, l'unica difficoltà è estrarre le singole cifre da un numero decimale. Ad esempio hai 101 (centouno), devi prendere solo l'unità, poi la decina...
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Ciao,
    riporta la mente alle elementari quando le somme si facevano a mano con carta e penna.

    In base 10
    9+1 ... scrivi 0 con il riporto di 1

    in binario è uguale, anzi più facile avendo solo due cifre

    HTH
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Ciao, se sei dell'università di verona, sappi che siamo in 2 a non capire come fare...specialmente nella parte del controllo
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Contando me siamo in 3. La parte di controllo l'ho scritta, ma può sicuramente essere migliorata, infatti così come ora se c'è errore non interrompe l'esecuzione del programma ma andrebbe avanti.
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Ho risolto. Se ti serve solo una dritta eccola:
    - tieni memoria di eventuali riporti
    - fai in modo che il risultato finale venga aggiornato ad ogni ciclo partendo chiaramente dall'ultimo bit(il meno significativo) al primo. In questa fase è utile utilizzare le potenze del 10 per fare in modo che il bit che venga inserito nel risultato finale sia nella posizione corretta.

    Scusa se sono stato un po' "criptico" ma non volevo essere neppure troppo chiaro dato che hai chiesto solo di essere indirizzato.

    Spero di essere stato utile.
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Posso farti qualche domanda?

    - devi farlo in c o in c++?
    - i numeri binari come li carichi in memoria?
    - se fosse in C dovresti avere un array di caratteri ( credo ) ma non potendo usare array.
    - fino ad ora a che punto sei arrivato?
    - per il momento che strutture hai visto?
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Chiedi pure tutto quello che vuoi
    Allora:
    - il compito è da eseguire in C;
    - i numeri binari (da specifiche) vengono inseriti dall'utente, io li salvo in una variabile int. Nel corpo del programma poi verifico che siano binari con un ciclo while, nel quale passo cifra per cifra al fine di verificare che ci siano solo o 1 o 0;
    - sì, se si potessero usare gli array la logica dietro al programma sarebbe più facile da trovare, purtroppo da specifiche no li possiamo usare (anche perchè non ne abbiamo ancora trattato);
    - per il momento abbiamo fatto: dichiarazioni di variabili, <stdio.h> con printf() e scanf(), if else, while, for, operatore ternario, e generazione di numeri pseudocasuali (penso sia tutto per il momento);
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Si può risolvere così
    
    #include <stdio.h>
    
    int main(){
        char c;
        unsigned long long input1 = 0, input2 = 0, output, mask;
        
        printf("Inserisci il primo numero binario: ");
        while((c = getchar()) != '\n'){
            input1 <<= 1;
            if(c == '1')
                input1 |= 1;
        }
        printf("Inserisci il secondo numero binario: ");
        while((c = getchar()) != '\n'){
            input2 <<= 1;
            if(c == '1')
                input2 |= 1;            
        }
        
        output = input1 + input2;
        printf("La somma dei due numeri e': ");
        for(c = 0, mask = 1ULL << sizeof(unsigned long long) * 8 - 1; mask > 1;  mask >>= 1)
            if(output & mask){
                putchar('1');
                c = 1;
            }
            else if(c)
                putchar('0');  
        if(output & mask)
            putchar('1');
        else
            putchar('0'); 
        
        return 0;
    }
    
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Il codice funziona, ma ci sono cose che non abbiamo trattato:
    - getchar();
    - outchar();
    - <<
    - &
    - <<=
    - 1ULL (?)
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    pigreco00 ha scritto:


    Il codice funziona, ma ci sono cose che non abbiamo trattato:
    - getchar();
    - outchar();
    - <<
    - &
    - <<=
    - 1ULL (?)
    Vabbè son cose che farete a breve, left shift, and ...

    Più che altro come avete fatto a risolvere senza usare getchar e putchar? Non si era detto senza array?
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Io ho risolto come segue.
    Il programma mi sembra che funzioni ma non è ancora stato corretto dal docente quindi magari ci possono essere errori.
    Ah, da specifiche se l'utente iserisci un numero non binario il programma termina.
    
    #include <stdio.h>
    
    int main() {
    	int val1, val2; //valori inseriti dall'utente
    	int bit1, bit2; //bit meno significativi di volta in volta
    	int riporto = 0;
    	int somma;//somma di un bit alla volta
    	int finale;//risultato finale
    	int posizione;//posizione del bit aggiunto in testa al risultato finale
    	int flag = 1; //1 significa VALORE VALIDO
    	
    	//istruzioni per l'utente	
    	printf("***ISTRUZIONI***");
    	printf("\nIl programma esegue la somma di numeri binari.\n");
    	printf("Inserisci due numeri assicurandoti siano in notazione binaria per effetuare la somma.\n");
    	printf("Attenzione: il bit più significativo deve essere 1.\n");
    	
    	//inserimento valori
    	printf("Primo valore: ");
    	scanf("%i", &val1);
    	
    	printf("Secondo valore: ");
    	scanf("%i", &val2);
    		
    	finale = 0;
    	posizione = 1;//inizio dal bit meno significativo
    	
    	//verifica valori e eventuale somma	
    	while((val1 != 0 || val2 !=0) && flag==1){
    	    bit1 = val1 % 10;
    	    bit2 = val2 % 10;
    		
    		//somma dei bit se validi altrimenti segnalo di uscire dal ciclo
    		if((bit1 != 1 && bit1 != 0) || (bit2 != 1 && bit2 != 0))
    			flag = 0;
    		else{
    			somma = bit1 + bit2 + riporto;   
    			if (somma > 1) // verifico se c'è un nuovo riporto
    				riporto = 1; 
    			else
    				riporto = 0;		
    	
    			if (somma == 1 || somma == 3)
    				finale = finale + posizione;
    		}
    		
    		val1 = val1 / 10;
    		val2 = val2 / 10;
    		
    		posizione = posizione * 10;
    	}
    	
    	if (riporto==1)
    		finale += posizione;
    		
    	if (flag == 0)
    		printf("Errore! Valore non binario.\n");
    	else
    		printf("Risultato: %i\n", finale);
    	
    	return 0;
    }
    
    P.s. spero che il codice sia chiaro
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Ho capito
    L'unico problema è che non puoi andare oltre le 10 cifre, tipo 1111111111+1, ma non importa
  • Re: Programma che somma numeri binari senza utilizzare array o la conversione

    Personalmente ho l'impressione che il prof voglia vedere eseguita da programma
    una somma in binario come si farebbe a mano, tipo :

    chiedo gli input in binario ( stringa di 1 o 0)

    e poi faccio la somma

    10111 +
    01011
    ----------
    qui il risultato in binario (sempre come stringa di 1 o 0)

    ... insomma , alla fine più un esercizio sulle stringhe che sui numeri
    HTH
Devi accedere o registrarti per scrivere nel forum
17 risposte