Salve, dopo aver letto la guida, e usufruito della conoscenza degli utenti sul forum, ho ho provato a fare la somma di numeri binari, niente di complicato sopratutto per chi se ne intende (
XD ), però anche se funziona ci sono delle cose di cui non sono sicuro:
Prima di tutto non è che c'è un modo per eliminare il passaggio di scambio tra c_bit1 e bit1 e quindi anche il convertitore da ASCII utilizzando direttamente i dati in ingresso? (prelevandoli sempre come stringa e non bit per bit).codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int n; //numero di bit dei numeri int c; //variabile di conteggio delle varie istruzioni int o; //variabile per invertire la posizione gli array int riporto; //variabile per il riporto della somma binaria char *c_bit1; //puntatore per la stringa del primo numero binario char *c_bit2; //puntatore per la stringa del secondo numero binario int *bit1; //puntatore per i numeri del primo numero binario int *bit2; //puntatore per i numeri del secondo numero binario int *somma; //puntatore per i numeri del numero della somma printf("inserire il numero di bit di ogni numero\n"); scanf("%d", &n); c_bit1 = (char *)malloc(sizeof(char) * n); //Allocazione blocco di n bit per la stringa if(c_bit1 == NULL) { printf("Memoria esaurita"); return(0); } printf("\nInserire il primo numero di %d bit\n", n); scanf("%s", &*c_bit1); //Lettura della stringa bit1 = (int *)malloc(sizeof(int) * n); //Allocazione blocco di n bit per il numero if(bit1 == NULL) { printf("Memoria esaurita"); return(0); } o = (n - 1); // Utilizzata per invertire la locazione della variabile nell'array for(c = 0; c < n; c++) { bit1[c] = (int)c_bit1[o]; //Assegnazione (con posizione invertita 0 a 3, 1 a 2...) del valore o--; // in ASCII della stringa } free(c_bit1); for (c = 0; c < n; c++) { if (bit1[c] == 48) //Conversione da codice ASCII ad intero associato bit1[c] = 0; else if(bit1[c] == 49) bit1[c] = 1; else { printf("\nE' stato inserito un carattere errato (%d)", bit1[c]); return(0); // Se viene inserito un carattere differente da '0' o '1' } } c_bit2 = (char *)malloc(sizeof(char) * n); //Memoria per la seconda stringa if(c_bit2 == NULL) { printf("Memoria esaurita"); return(0); } printf("\nInserire il secondo numero di %d bit\n", n); //lettura stringa scanf("%s", &*c_bit2); bit2 = (int *)malloc(sizeof(int) * n); //Memoria per il secondo numero if(bit2 == NULL) { printf("Memoria esaurita"); return(0); } o = (n - 1); // Utilizzata per invertire for (c = 0; c < n; c++) { bit2[c] = (int)c_bit2[o]; //Assegnazione (con posizione invertita 0 a 3, 1 a 2...) del valore o--; // in ASCII della stringa } free(c_bit2); //Liberazione memoria for (c = 0; c < n; c++) { if(bit2[c] == 48) //Conversione ASCII to intero bit2[c] = 0; else if (bit2[c] == 49) bit2[c] = 1; else { printf("\nE' stato inserito un carattere errato (%d)", bit2[c]); return(0); } } somma = (int *)malloc(sizeof(int) * n); //Memoria per somma riporto = 0; for(c = 0; c < n; c++) //Calcolo della somma binaria { somma[c] = bit1[c] + bit2[c] + riporto; if(somma[c] == 0) riporto = 0; else if(somma[c] == 1) riporto = 0; else if(somma[c] == 2) { somma[c] = 0; riporto = 1; } else if(somma[c] == 3) { somma[c] = 1; riporto = 1; } } free(bit1); //liberazione memoria free(bit2); printf("\n"); if (riporto == 1) printf("1"); //stampa se presente il riporto finale for(c = (n - 1); c >= 0; c--) printf("%d", somma[c]); //stamma le cifre della somma getchar(); getchar(); }
Secondo, utilizzo della variabile 'o' non è che c'è un modo più sensato?
L'utilizzo di malloc è corretto (o almeno abbastanza XD)?
Grazie in anticipo, spero che il titolo vada bene![]()

, ho ho provato a fare la somma di numeri binari, niente di complicato sopratutto per chi se ne intende (
XD ), però anche se funziona ci sono delle cose di cui non sono sicuro:
Rispondi quotando