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);
}