Corso di Informatica 1 (IN1 - Fondamenti)

Testi e soluzioni di 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(1);
}

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