Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3

    [C] Somma in colonna di elementi di 2 array

    Ciao a tutti,
    Volevo chiedere a qualcuno più esperto di me se mi può aiutare a risolvere questo esercizio:
    L utente deve inserire due numeri interi positivi A e B, composti da un numero arbitrario di cifre (non necessariamente il medesimo per ambedue) e memorizzati, cifra per cifra, all'interno di due array separati.
    Quindi bisogna scrivere un programma che esegue l addizione in colonna di A e B utilizzando un altro array per memorizzare cifra per cifra il risultato.
    Esempio:

    | | |5|6|5|4|
    | | | |2|3|8|
    Risultato:
    | | |5|8|9|2|

    Al termine dell'addizione, il programma dovrà visualizzare sia gli array relativi agli operandi che quello relativo al risultato dell'addizione.
    I numeri a, b e il risultato della loro somma devono essere memorizzati, cifra per cifra, in array separati. Gli array devono essere popolati scomponendo due numeri inseriti dall'utente (usando questo metodo
    int n, i, j;
    int array[MAX_SIZE];
    int cifre;

    printf("Inserire il valore di n: ");
    scanf("%d", &n);

    ///determina il numero delle cifre
    cifre = log10(n) + 1;

    ///scompone il numero e lo memorizza nell'array
    for (i=0; i < cifre; i ++)
    array[i] = (n % (int)pow(10, i+1))/pow(10,i);

    ///stampa l'array elemento per elenmeto
    for (i=cifre-1; i >= 0; i --)
    printf("%d ", array[i]);;

    Gli input devono essere verificati, ossia a e b devono essere positivi (maggiori di zero) e devono poter essere memorizzati nei rispettivi array interamente. La somma va calcolata come se si stesse lavorando manualmente, cifra dopo cifra; NON è considerata una soluzione valida quella in cui vengono ricalcolati i valori originali di a e b, ne viene eseguita la somma e successivamente questa viene scomposta e memorizzata nell'array corrispondente. Il programma deve funzionare correttamente anche nel caso in cui a e b non abbiano il medesimo numero di cifre.

    Se possibile, mi aiuterebbe di più se usaste funzioni base del C visto che non sono ancora esperto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Posta un problema preciso non l'intero esercizio, non penso tu non sappia proprio da dove cominciare.

    Utilizza un ciclo for e scorri gli elementi partendo da quello che rappresenta l'unità, ad ogni iterazione somma le due cifre nella posizione i-esima (supponendo che l'indice usato si chiami i come si fa di solito) e metti il risultato della somma modulo 10 nella i-esima casella dell'array che conterrà il risultato; se la somma era maggiore uguale a 10, mettiti il valore uno in una variabile che rappresenta il resto, aggiungendolo alla somma ad ogni iterazione (all'inizio del ciclo dev'essere inizializzato a 0 e ad ogni iterazione fai in modo che non si accumuli).

    Se hai un problema con una parte specifica postalo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3
    Hai ragione scusami
    Questo è quello che sono riuscito a fare io per ora. Purtroppo però cosi facendo sto riutilizzando l array_a e nn va bene. Inoltre se sommo un numero di 2 cifre con uno di 3 cifre una mi viene come mangiata.

    #include <stdio.h>
    #include <math.h>

    #define MAX_SIZE 10

    int main () {

    //dichiarazione variabili
    int a, b; //2 numeri inseriti dall utente
    int array_a [MAX_SIZE];
    int array_b [MAX_SIZE];
    int risultato [MAX_SIZE]; //array per la memorizzazione del risultato
    int i, cifre;

    do {
    //input
    printf ("Inserire il valore di a: ");
    scanf("%d", &a);
    printf ("Inserire il valore di b: ");
    scanf("%d", &b);
    }
    while (a <= 0 || b <= 0);

    //determina il numero delle cifre
    cifre = log10(a) + 1;

    //scompone il numero a e lo memorizza nell'array
    for (i = 0; i < cifre; i ++)
    array_a[i] = (a % (int)pow(10, i+1))/pow(10,i);

    //stampa l'array_a elemento per elemento
    for (i = cifre-1; i >= 0; i --)
    printf("%d ", array_a[i]);
    printf("+\n");
    //scompone il numero b e lo memorizza nell'array
    for (i = 0; i < cifre; i ++)
    array_b[i] = (b % (int)pow(10, i+1))/pow(10,i);

    //stampa l'array_b elemento per elemento
    for (i = cifre-1; i >= 0; i --)
    printf("%d ", array_b[i]);

    printf("=\n");
    for(i = 0; i < MAX_SIZE; i++ ){
    risultato[i] = array_a[i] + array_b[i];
    if (risultato[i] > 9)
    {
    risultato[i] %=10;
    array_a[i+1]++;
    }

    }
    //determina il numero delle cifre del risultato
    cifre = log10(a) + 1;

    //scompone il risultato e lo memorizza nell'array
    for (i = 0; i < cifre; i ++)
    array_a[i] = (a % (int)pow(10, i+1))/pow(10,i);

    //stampa il risultato elemento per elemento
    for (i = cifre-1; i >= 0; i --)
    printf("%d ", risultato[i]);
    printf("\n");


    return 0;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3
    pls datemi una mano, mi serve per un compito molto imminente

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Posso capire non accettare in input numeri negativi per non complicare le cose, ma lo zero perché no?

    Poi, ti conviene lasciare un po' di spazio a sinistra della rappresentazione in colonna perché se il risultato ha più cifre degli addendi non si vede la cifra più significativa.

    Riguardo ad addendi di lunghezza diversa, sbagli a calcolare il numero di cifre solo sul primo addendo, calcolalo sul maggiore dei due così sei sicuro.

    La somma in colonna di per sé mi sembra faccia il suo lavoro, non ho capito il problema del "riutilizzare array_a", sarà l'ora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.