Somma Progressiva

di il
14 risposte

Somma Progressiva

Buon giorno, vorrei realizzare una somma progressiva di n numeri, mediante ciclo for.

Ho un problema, con l'utilizzo dei puntatori, poichè la sequenza inizia sfalsata e non comprendo perchè,invece se non li adopero il risultato è corretto.Grazie dell'aiuto

Sequenza corretta:

#include <stdio.h>
//Somma dei n numeri in progressione
void SommaProgressiva(int Contatore);//Creazione Prototipo
void main(void)
{

  int Step;//Inizializzazione del conteggio
  printf("Inserisci Quanti Numeri devi sommare in sequenza");
  scanf(" %d", &Step);
  SommaProgressiva( Step);//Chiamata alla funzione



}
void SommaProgressiva(int Contatore)
{
     int Somma=0;
     int SommaPrecedente=0;
  for(int i=1;i<=Contatore;i++)
   {
      
       if (i >=0 && i <Contatore)
       {
            Somma=SommaPrecedente + i;
           printf("Il Valore parziale e:%d = %d + %d \n",Somma,i,SommaPrecedente);
        SommaPrecedente=Somma;//Reimposto il valore parziale di somma
        
        }
       else
       {
           Somma=SommaPrecedente + i;
          printf("Il Valore finale e:%d = %d + %d \n",Somma,i,SommaPrecedente);//Valore finale
       }   
        
   }
}

//Sequenza Errata
#include <stdio.h>

// Somma dei numeri in progressione
void SommaProgressiva(int Contatore);

int main(void) {
    int Step; // Inizializzazione del conteggio
    printf("Inserisci quanti numeri devi sommare in sequenza: ");
    scanf("%d", &Step);
    SommaProgressiva(Step);
    return 0;
}

void SommaProgressiva(int Contatore) {
    int SommaPrecedente = 0;

    printf("Somma Iniziale: %d\n", SommaPrecedente);

    for (int i = 1; i <= Contatore; i++) {
        SommaPrecedente += i;
        printf("Il valore parziale è: %d (aggiungendo %d)\n", SommaPrecedente, i);
    }

    printf("La somma finale è: %d\n", SommaPrecedente);
}

14 Risposte

  • Re: Somma Progressiva

    For i=0 hai provato?

  • Re: Somma Progressiva

    Comunque somma e somma precedente perché?

    Sono addendi…

    Cambiando l'ordine la somma non cambia…

    Comporre:

    5+6 equivale a 3+2+6

    Dove nel primo caso 5 sarebbe il tuo sommaprecedente

    Il secodo caso sarebbe

    Somma=somma+3

    Somma=somma+6

    Usa l'array chiamato addendi e fai

    For x=0 x<n x++

      Somma=somma+addendi[x]

    Fine!

    Scusa la ruggine c++

  • Re: Somma Progressiva

    16/07/2024 - sihsandrea ha scritto:


    Comunque somma e somma precedente perché?

    Sono addendi…

    Cambiando l'ordine la somma non cambia…

    Comporre:

    5+6 equivale a 3+2+6

    Dove nel primo caso 5 sarebbe il tuo sommaprecedente

    Il secodo caso sarebbe

    Somma=somma+3

    Somma=somma+6

    Usa l'array chiamato addendi e fai

    For x=0 x<n x++

      Somma=somma+addendi[x]

    Fine!

    Scusa la ruggine c++

    Ok proverò, grazie 

  • Re: Somma Progressiva

    Non si capisce cosa ci sia di giusto e sbagliato nei due codici.

    A parte questo, l'ultimo codice che hai indicato come errato, fornisce risultati corretti anche se la variabilie SommaPrecedente la dovresti chiamare semplicemente Somma

    void SommaProgressiva(int Contatore) {
        int Somma = 0;
    
        printf("Somma Iniziale: %d\n", Somma);
    
        for (int i = 1; i <= Contatore; i++) {
            Somma += i;
            printf("Il valore parziale è: %d (aggiungendo %d)\n", Somma, i);
        }
    
        printf("La somma finale è: %d\n", Somma);
    }

    Poi la questione dei puntatori di cui parli, non si capisce quale sia.

  • Re: Somma Progressiva

    16/07/2024 - oregon ha scritto:


    Non si capisce cosa ci sia di giusto e sbagliato nei due codici.

    A parte questo, l'ultimo codice che hai indicato come errato, fornisce risultati corretti anche se la variabilie SommaPrecedente la dovresti chiamare semplicemente Somma

    void SommaProgressiva(int Contatore) {
        int Somma = 0;
    
        printf("Somma Iniziale: %d\n", Somma);
    
        for (int i = 1; i <= Contatore; i++) {
            Somma += i;
            printf("Il valore parziale è: %d (aggiungendo %d)\n", Somma, i);
        }
    
        printf("La somma finale è: %d\n", Somma);
    }

    Poi la questione dei puntatori di cui parli, non si capisce quale sia.

    Il risultato finale è corretto, ma il parziale(Somma Precedente) è sfalsato nel secondo programma 

  • Re: Somma Progressiva

    16/07/2024 - Antonio-Sim ha scritto:


    16/07/2024 - oregon ha scritto:


    Non si capisce cosa ci sia di giusto e sbagliato nei due codici.

    A parte questo, l'ultimo codice che hai indicato come errato, fornisce risultati corretti anche se la variabilie SommaPrecedente la dovresti chiamare semplicemente Somma

    void SommaProgressiva(int Contatore) {
        int Somma = 0;
    
        printf("Somma Iniziale: %d\n", Somma);
    
        for (int i = 1; i <= Contatore; i++) {
            Somma += i;
            printf("Il valore parziale è: %d (aggiungendo %d)\n", Somma, i);
        }
    
        printf("La somma finale è: %d\n", Somma);
    }

    Poi la questione dei puntatori di cui parli, non si capisce quale sia.

    Il risultato finale è corretto, ma il parziale(Somma Precedente) è sfalsato nel secondo programma 

    Ho sbagliato codice, chiedo venia, domani lo riposto 

  • Re: Somma Progressiva

    Ho un problema, con l'utilizzo dei puntatori

    E qual è il problema con i puntatori?

  • Re: Somma Progressiva

    16/07/2024 - oregon ha scritto:


    Ho un problema, con l'utilizzo dei puntatori

    E qual è il problema con i puntatori?

    Questo:
    
    #include <stdio.h>
    //Somma dei n numeri in progressione
    void SommaProgressiva(int Contatore);//Creazione Prototipo
    void main(void)
    {
    
      int Step;//Inizializzazione del conteggio
      printf("Inserisci Quanti Numeri devi sommare in sequenza");
      scanf(" %d", &Step);
      SommaProgressiva( Step);//Chiamata alla funzione
    
    
    
    }
    void SommaProgressiva(int Contatore)
    {
         int* Somma=NULL;
         int SommaPrecedente=0;
         Somma=&SommaPrecedente ;
      for(int i=0;i<=Contatore;i++)
       {
          
           if (i >=0 && i <Contatore)
           {
                *Somma=SommaPrecedente + i;
               printf("Il Valore parziale e:%d = %d + %d \n",*Somma,i,SommaPrecedente);
            SommaPrecedente=*Somma;//Reimposto il valore parziale di somma
            
            }
           else
           {
               *Somma=SommaPrecedente + i;
              printf("Il Valore finale e:%d = %d + %d \n",*Somma,i,SommaPrecedente);//Valore finale
           }   
            
       }
    }
    
  • Re: Somma Progressiva

    Quel codice non ha molto senso.

    Ad esempio se inserisco 4 cosa vorresti visualizzare?

  • Re: Somma Progressiva

    Se vuoi la somma dei primi n numeri: S(n)=(n(n+1))/2

    se vuoi caricare n numeri a caso li inserisci in un array (dinamico?) es. [35;80;2;27;…;50;]

    nel primo caso basta applicare la formula…

    nel secondo caso:

      a)  vuoi la somma dalla posizione [a] alla posizione [b]? es 80+2+27  hai bisogno della posizione a e della posizione b (quindi a-1 e b-1)

      b) vuoi la somma dalla prima posizione [0] alla posizione [b]? es. 35+80+2+27  quindi da 0 a b-1

      c) vuoi la somma dalla posizione [a] fino all'ultimo numero dell'array [n]? es. 27+…+50  quindi da a-1 a n-1

      d) dato un numero x ed un passo y vuoi la somma? es. x=56 y=3 numeri da sommare: 56;57;58;

          applichi la doppia formula del primo caso   [(x+y-1(x+y))/2] - [(x(x+1))/2] = (59*58/2) - (56*55/2) = 1711-1540=171 

          56+57+58=171

    in tutti i casi somma precedente non serve. cosa devi fare esattamente?

  • Re: Somma Progressiva

    17/07/2024 - sihsandrea ha scritto:


    Se vuoi la somma dei primi n numeri: S(n)=(n(n+1))/2

    se vuoi caricare n numeri a caso li inserisci in un array (dinamico?) es. [35;80;2;27;…;50;]

    nel primo caso basta applicare la formula…

    nel secondo caso:

      a)  vuoi la somma dalla posizione [a] alla posizione [b]? es 80+2+27  hai bisogno della posizione a e della posizione b (quindi a-1 e b-1)

      b) vuoi la somma dalla prima posizione [0] alla posizione [b]? es. 35+80+2+27  quindi da 0 a b-1

      c) vuoi la somma dalla posizione [a] fino all'ultimo numero dell'array [n]? es. 27+…+50  quindi da a-1 a n-1

      d) dato un numero x ed un passo y vuoi la somma? es. x=56 y=3 numeri da sommare: 56;57;58;

          applichi la doppia formula del primo caso   [(x+y-1(x+y))/2] - [(x(x+1))/2] = (59*58/2) - (56*55/2) = 1711-1540=171 

          56+57+58=171

    in tutti i casi somma precedente non serve. cosa devi fare esattamente?

    Volevo eseguire la somma degli elementi di iterazione del ciclo for, col risultato parziale. 

    Es se devo contare 3 volte sommo 0 Con 1,1 con 2,3 con 3

  • Re: Somma Progressiva

    17/07/2024 - Antonio-Sim ha scritto:


    Volevo eseguire la somma degli elementi di iterazione del ciclo for, col risultato parziale. 

    Es se devo contare 3 volte sommo 0 Con 1,1 con 2,3 con 3

    Uhm… un libro con pagine bianche da più informazioni…

    È la somma dei primi n numeri incluso lo zero iniziale?

    Ricadi al primo caso escludendo lo zero.

    Es. 5 cicli for: S(n)=(n-1)(n)/2 dove n è il nr di cicli

    Se i cicli vanno da 0 a 4 avrai (5 cicli)

    0+1+2+3+4=10

    4*5/2=10

    Esegui i cicli se hanno una funzione diversa dal conoscere la somma degli n numeri e calcoli poi la somma degli n numeri in base al nr di cicli che fai.

    Oltre al codice superfluo che hai scritto ti consiglio un libro di analisi matematica.

  • Re: Somma Progressiva

    17/07/2024 - Antonio-Sim ha scritto:


    Volevo eseguire la somma degli elementi di iterazione del ciclo for, col risultato parziale. 

    Es se devo contare 3 volte sommo 0 Con 1,1 con 2,3 con 3

    Quindi i puntatori non servono a niente. Ti basta

    void SommaProgressiva(int Contatore)
    {
        int Somma = 0, SommaPrecedente = 0;
        
        for (int i = 1; i <= Contatore; i++)
        {
            Somma += i;
            printf("Il Valore parziale e:%d = %d + %d \n", Somma, SommaPrecedente, i);
            SommaPrecedente = Somma;
        }
    }

    P.S. Ragazzi ... non quotate tutto il messaggio precedente, altrimenti il thread diventa illeggibile ... si quora solo il necessario.

  • Re: Somma Progressiva

    Grazie Oregon

Devi accedere o registrarti per scrivere nel forum
14 risposte