Gli esercizi
Testi e soluzioni di alcuni esercizi
Sotto-array di somma massima
/*
** max_somma.c
**
** Leggere in input una sequenza A di n numeri floating point ed un numero
** intero k<n. Stampare in output la sequenza di k elementi contigui la
** cui somma sia massima.
**
** Marco Liverani (liverani@mat.uniroma3.it) - Novembre 2001
*/
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
int leggi_array(float V[]) {
int i, n;
printf("Numero di elementi: ");
scanf("%d", &n);
printf("Inserisci %d numeri floating point: ", n);
for (i=0; i<n; i++)
scanf("%f", &V[i]);
return(n);
}
void stampa_array(float V[], int n) {
int i;
for(i=0; i<n; i++)
printf("%f ", V[i]);
printf("\n");
return;
}
float somma(float V[], int k) {
int i;
float somma=0.0;
for (i=0; i<k; i++)
somma += V[i];
return(somma);
}
int max_sequenza(float V[], int n, int k) {
int i, i_max;
float max, s;
max = somma(&V[0], k);
i_max = 0;
for (i=1; i<n-k; i++) {
s = somma(&V[i], k);
if (s > max) {
max = s;
i_max = i;
}
}
return(i_max);
}
int main(void) {
int n, k, m;
float A[MAX];
n = leggi_array(A);
printf("Lunghezza della sequenza: ");
scanf("%d", &k);
m = max_sequenza(A, n, k);
stampa_array(&A[m], k);
return(0);
}