Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    [C] Correzione programma con array

    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:

    codice:
    #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.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    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:

    codice:
        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.
    Ultima modifica di Eduadie; 13-02-2015 a 17:12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.