Gli esercizi
Testi e soluzioni di alcuni 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(0);
}