Ciao, ho un problema in cui non so dove sbattere la testa. Ecco il testo:
"Si sviluppi un programma in linguaggio C che acquisisca in ingresso due numeri binari di 8
bit e li memorizzi in due vettori num1 e num2. Successivamente ne faccia la somma
algebrica interpretandoli come numeri rappresentati in complemento a due, ponendo il
risultato (rappresentato in complemento a due) in un vettore somma e segnalando all’utente
se c’è stato overflow."
Ecco il mio codice:
Provando inserendo come num1: 00000001 e num2:00000001 ottengo come risultato: 00000011codice:#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { /* vettori da utilizzare */ int num1[8]; int num2[8]; int somma[8]; /* creazione di due variabili: riporto e "nona posizione": "nona posizione" sarà il riporto dell'ultimo bit */ int carry=0, nona_posizione=0; /* variabile ciclo */ int i; /* acquisizione primo numero */ printf("Inserire in formato binario, il primo numero: \n"); for(i=0; i<8; i++) { printf("%d° numero da destra: ", (i+1)); scanf("%d", &num1[i]); } printf("*** FINE ACQUISIZIONE PRIMO NUMERO ***\n"); /* acquisizione secondo numero */ printf("Inserire in formato binario, il secondo numero: \n"); for(i=0; i<8; i++) { printf("%d° numero da destra: ", (i+1)); scanf("%d", &num2[i]); } printf("*** FINE ACQUISIZIONE SECONDO NUMERO *** \n"); /* esecuzione somma */ for(i=0; i<=8; i++) { /* ora i vari controlli: se 0 e 0 e carry=0 => 0 e carry=0 se 0 e 1 e carry=0 => 1 e carry=0 se 1 e 0 e carry=0 => 1 e carry=0 se 1 e 1 e carry=0 => 0 e carry=1 ---- se 0 e 0 e carry=1 => 1 e carry=0 se 0 e 1 e carry=1 => 0 e carry=1 se 1 e 0 e carry=1 => 0 e carry=1 se 1 e 1 e carry=1 => 1 e carry=1 quando i=7 e carry=1, porremo nona_posizione=1 */ if(i!=8) { /* 1 */ if(((num1[i]==0) && (num2[i]==0)) && (carry==0)) { somma[i]=0; carry=0; /*printf("-> 0");*/ } /* 2 */ if(((num1[i]==0) && (num2[i]==1)) && (carry==0)) { somma[i]=1; carry=0; } /* 3 */ if(((num1[i]==1) && (num2[i]==0))&& (carry==0)) { somma[i]=1; carry=0; } /* 4 */ if(((num1[i]==1) && (num2[i]==1)) && (carry==0)) { somma[i]=0; carry=1; } /* 5 */ if(((num1[i]==0) && (num2[i]==0)) && (carry==1)) { somma[i]=1; carry=0; } /* 6 */ if(((num1[i]==0) && (num2[i]==1)) && (carry==1)) { somma[i]=0; carry=1; } /* 7 */ if(((num1[i]==1) && (num2[i]==0)) && (carry==1)) { somma[i]=0; carry=1; } if(((num1[i]==1) && (num2[i]==1)) && (carry==1)) { somma[i]=1; carry=1; } } else { if(carry == 1) { nona_posizione=1; } } } /* fine ciclo */ /* scrittura del risultato */ printf("Il risultato è: "); for(i=7; i>=0; i--) { printf("%d", somma[i]); } printf("\nE' stato rilevato overflow? "); /* controllo per overflow */ if(carry==nona_posizione) { printf("No \n"); } else { printf("Si \n"); } system("PAUSE"); return 0; }
perché???è un errore logico ma qualcosa mi sfugge!!! per me è in qualche ciclo for e non penso ad istruzioni logiche ma non sono proprio sicuro
![]()

è un errore logico ma qualcosa mi sfugge!!! per me è in qualche ciclo for e non penso ad istruzioni logiche ma non sono proprio sicuro
Rispondi quotando