Corso di Informatica 1 (IN1 - Fondamenti)

Testi e soluzioni di esercizi

 

Somma con riporto


/*
**  somma_con_riporto.c
**
**  Leggere in input una matrice A di nxm numeri interi compresi tra
**  0 e 9. Ogni riga della matrice rappresenta un numero intero
**  positivo costituito da m cifre, eventualmente riportando a sinistra
**  degli zeri per numeri con meno di m cifre. Calcolare la somma dei
**  numeri e riportarne le cifre (numeri compresi tra 0 e 9) su un
**  vettore B. Stampare B.
**
**  Marco Liverani (liverani@mat.uniroma3.it) - Novembre 2001
*/

#include <stdlib.h>
#include <stdio.h>

#define MAX 15

void leggi_matrice(int A[MAX][MAX], int *n, int *m) {
  int i, j;

  printf("Numero di righe e di colonne: ");
  scanf("%d %d", n, m);
  for (i=0; i<*n; i++)
    for (j=0; j<*m; j++)
      scanf("%d", &A[i][j]);
  return;
}

void stampa_array(int V[], int n) {
  int i;

  for (i=0; i<n; i++)
    printf("%d ", V[i]);
  printf("\n");
  return;
}

void scambia(int *x, int *y) {
  int z;

  z = *x;
  *x = *y;
  *y = z;
  return;
}

void inverti_array(int V[], int n) {
  int i;

  for (i=0; i<n/2; i++)
    scambia(&V[i], &V[n-i-1]);
  return;
}

int main(void) {
  int A[MAX][MAX], B[MAX], n, m, k, i, j, somma, riporto;

  leggi_matrice(A, &n, &m);
  k = 0;
  riporto = 0;
  for (j=m-1; j>=0; j--) {
    somma = riporto;
    for (i=0; i<n; i++) {
      somma += A[i][j];
    }
    B[k] = somma - (somma/10)*10;
    riporto = somma/10;
    k++;
  }
  while (riporto>0) {
    B[k] = riporto - (riporto/10)*10;
    k++;
    riporto = riporto/10;
  }
  inverti_array(B, k);
  stampa_array(B, k);
  return(1);
}

Per informazioni e commenti: liverani@mat.uniroma3.it - Torna alla Home page - Ultima modifica: 10 Novembre 2001