PDA

Visualizza la versione completa : [C] Correzione programma con array


Bombonera
13-02-2015, 12:57
Ciao a tutti. Devo fare un programma che ha in input un array di elementi e k, e stampa a video la sequenza di somma massima. Esempio:

Inserisci n
6

Inserisci k
3

Il vettore ha questi valori:

5 3 1 3 2 7

La sequenza k = 3 di somma massima : 3 2 7


Io ho fatto questo programma, ma c' un problema:



#include <stdio.h>
#include <stdlib.h>
#define MAX 50


void carica(int vett[MAX], int n);
void stampa( int vett[MAX], int n);
void sequenza(int vett[MAX], int n, int k);


int main(void) {


int n, k, vett[MAX];


printf("Inserisci numero elementi del vettore\n");
scanf("%d", &n);
printf("Inserisci k\n");
scanf("%d", &k);


carica( vett, n);
stampa(vett, n);
sequenza( vett, n, k);


}


void sequenza(int vett[MAX], int n, int k) {


int i; int somma = 0; int max = 0; int c = 0; int p, q;


while(c + k != n - 1) {
for(i = 0 + c; i < k + c; i++) {
somma = somma + vett[i];
}


if(somma > max) {
max = somma;
p = c;
q = k + c;
}


somma = 0;
c++;
}


printf("La sequenza di somma massima: \n\n");


for(i = p; i < q; i++) {
printf("%d ", vett[i]);
}


return;
}


void stampa(int vett[MAX], int n) {


int i;


printf("Gli elementi del vettore sono: \n\n");


for(i = 0; i < n; i++) {
printf("%d ", vett[i]);
}
}


void carica(int vett[MAX], int n) {


int i; int valore;


for(i = 0; i < n; i++) {
printf("Inserisci numero\n");
scanf("%d", &valore);


vett[i] = valore;
}
}




Non so qual l'errore. Qualcuno mi pu aiutare ? Grazie.

Eduadie
13-02-2015, 15:54
Ciao.
Non riesco proprio a capire con quale logica hai cercato di calcolarti la sequenza con la somma pi grande.

EDIT: Ho sbagliato a capire io l'esercizio scusami, siccome il k non fisso nel programma non basta un solo ciclo for ma ne servono due e la soluzione la seguente:



int i,j; int somma = 0; int max = 0; int p, q;


for(i = 0;i <= n-k; i++)
{
somma = vett[i];
for(j=i+1; j < i + 1 + k; j++)
{
somma += vett[j];
}
if(somma > max)
{
max = somma;
p = i;
q = j-1;
}
}


In pratica il primo ciclo scorre l'array, il secondo permette la somma a partire dall'i-simo elemento sino al (i+k)-simo elemento. Memorizza gli estremi dell'indice che poi memorizzerai per permettere la visualizzazione.

Loading