Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    [Linguaggio C]Individuare la sequenza di k numeri in un array avente somma massima

    Leggere o generare una sequenza di n numeri interi e un k <= n. Stampare l'array letto o generato. Individuare e stampare la sequenza di k numeri contigui avente somma massima.

    Esempio. Se k = 3 e l’array è:

    [3, 5, 8, 1, 9, 7]

    La prima sequenza di tre elementi (3, 5, 8) ha somma 16,
    la seconda sequenza (5, 8, 1) ha somma 14,
    la terza (8, 1, 9) ha somma 18,
    la quarta (1, 9, 7) ha somma 17,
    per cui viene stampata la sequenza (8, 1, 9).

    IMPORTANTE: Organizzare il programma in funzioni (una per leggere l’ array, una per stamparlo, una per individuare la sequenza massima). Non utilizzare array ausiliari, non introdurre variabili globali.

    Queste sono le funzioni che ho creato per generare l'array
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #define MAX 100
    void crearray(int A[MAX], int n);
    void stamparray(int A[MAX], int n);
    
    main()
    {
          int i, n, A[MAX];
          printf("Quanti elementi vuoi inserire nell' array?");
          scanf("%d", &n);
          crearray(A, n);
          stamparray(A, n);
          system("PAUSE");
          return 0;
    }
    
    void crearray(int A[MAX], int n)
    {
         int i;
         printf("Inserisci gli elementi dell'array: ");
         for(i=0; i<n; i++)
         scanf("%d", &A[i]);
         return;
    }
    
    void stamparray (int A[MAX], int n)
    {
         int i;
         for(i=0; i<n; i++)
         printf("%d", A[i]);
         printf("\n\n");
         return;
    }
    Il mio problema è creare la funzione per individuare la somma massima tra le sequenze, non riuscendo a recuperare tutte le sequenze di k numeri dell'array.
    Spero in un vostro gentile aiuto.
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [Linguaggio C]Individuare la sequenza di k numeri in un array avente somma massima

    Originariamente inviato da Molosso11
    ... non riuscendo a recuperare tutte le sequenze di k numeri dell'array.
    Devi chiedere il valore k all'utente (che sia <=n) e poi ti servi di un ciclo "esterno" per individuare l'inizio delle sequenze e un ciclo "interno" per identificare tutti i valori della singola sequenza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: Re: [Linguaggio C]Individuare la sequenza di k numeri in un array avente somma massima

    Originariamente inviato da oregon
    Devi chiedere il valore k all'utente (che sia <=n) e poi ti servi di un ciclo "esterno" per individuare l'inizio delle sequenze e un ciclo "interno" per identificare tutti i valori della singola sequenza.
    si so che devo chiedere all'utente il valore di k ma, non riesco a recuperare e quindi poi a sommare tra di loro, tutte le sequenze di k numeri dell'array...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E ti ho detto come fare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    sempre con la vostra gentilezza, potreste postarmi una vostra soluzione? Grazie.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' anche possibile che tu tenti di sviluppare i due cicli di cui ti ho parlato e parliamo degli eventuali problemi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Diciamo che questa è l'intuizione che ho avuto io ma, sono sicuro di aver in gran parte sbagliato...
    codice:
    void seequenzamassima(int A[MAX], int n)
    {
         int i, k, somma, sommamax;
         printf("Per quanti numeri vuoi effettuare le somme?");
         scanf("%d", &k);
         if(k>n){
                 printf("Inserisci un valore minore del numero degli elementi dell'array");
                 scanf("%d", &n);
                 }
         else{
              for(i=0; i<n; i++){
                for(k=3; k<i; k++){
                         somma = somma + A[k];
                         }
                }
         if(somma > sommamax){
                  somma = sommamax;
                  }
         return;
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Le variabili n e k non le devi utilizzare per i cicli perché il loro valore non deve cambiare.

    Userai altre due variabili, i e j, per i due cicli di cui ti parlavo.

    Nell'esempio che hai mostrato all'inizio, avrai

    n = 6
    k = 3

    [3, 5, 8, 1, 9, 7]

    e quindi le sequenze saranno

    3 5 8
    5 8 1
    8 1 9
    1 9 7

    Il primo ciclo (con indice i) ti servirà ad identificare il primo elemento delle sequenze (quelli sottolineati), quindi quelli con l'indice 0, 1, 2 e 3. Il ciclo esterno sarà quindi

    for(i=0; i<n-k+1; i++)

    Il secondo ciclo (con indice j) ti servirà ad esaminare tutti i k elementi richiesti. Sarà

    for(j=0; j<k; j++)

    L'elemento da considerare nel ciclo più interno sarà

    A[i+j]

    Inoltre tieni presente che, prima che inizi a calcolare una somma, la variabile

    somma

    va azzerata
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Le variabili n e k non le devi utilizzare per i cicli perché il loro valore non deve cambiare.

    Userai altre due variabili, i e j, per i due cicli di cui ti parlavo.

    Nell'esempio che hai mostrato all'inizio, avrai

    n = 6
    k = 3

    [3, 5, 8, 1, 9, 7]

    e quindi le sequenze saranno

    3 5 8
    5 8 1
    8 1 9
    1 9 7

    Il primo ciclo (con indice i) ti servirà ad identificare il primo elemento delle sequenze (quelli sottolineati), quindi quelli con l'indice 0, 1, 2 e 3. Il ciclo esterno sarà quindi

    for(i=0; i<n-k+1; i++)

    Il secondo ciclo (con indice j) ti servirà ad esaminare tutti i k elementi richiesti. Sarà

    for(j=0; j<k; j++)

    L'elemento da considerare nel ciclo più interno sarà

    A[i+j]

    Inoltre tieni presente che, prima che inizi a calcolare una somma, la variabile

    somma

    va azzerata
    Innanzitutto grazie mille per la disponibilità e per l'aiuto che mi stai dando.

    Da quel che ho capito quindi la funzione diventerebbe così:
    codice:
    void sequenzamassima(int A[MAX], int n)
    {
         int i, j, k, somma = 0, sommamax;
         printf("Per quanti numeri vuoi effettuare le somme?");
         scanf("%d", &k);
         if(k>n){
                 printf("Inserisci un valore minore del numero degli elementi dell'array: ");
                 scanf("%d", &n);
                 }
         else{
              for(i=0; i<n-k+1; i++){
                for(j=0; j<k; j++){
                         somma = somma + A[i+j];
                         }
                     }
              }
         if(somma > sommamax){
                  somma = sommamax;
                  }
         return;
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quasi ... non azzeri somma ogni volta che inizi una nuova somma ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.