Problemi con funzioni e array

di il
3 risposte

Problemi con funzioni e array

Ciao a tutti,
devo scrivere una funzione (alternating_sum) che calcoli la somma alternata di tutti gli elementi di un array. Per esempio se gli elementi sono: 1 2 3 4 5, deve calcolare 1-2+3-4+5 e quindi deve restituire il totale=3.

Il programma non mi da nessun errore, penso che siano sbagliati i calcoli della funzione perchè mi restituisce sempre 0 come totale.

Vi posto il mio programma.
#include <iostream>

using namespace std;

//Legge i dati di un array.
//@param a array da riempire
//@param a_capacity dimensione massima di a
//@param a_size riempito con la dimensione di a dopo la lettura
void read_data(int a[],int a_capacity,int a_size)
{
    a_size=0;
    int x;
    while (a_size<a_capacity && (cin>>x)) {
        a[a_size]=x;
        a_size++;
    }
}

//Calcola il totale dei dati dell'array con la somma alternata.
//@param a array
//@param a_size numero di valori di a
int alternating_sum(int a[],int a_size)
{
    if (a_size==0) return 0;
    int totale;
    for (int i=0;i<a_size;i=i+2) {
        totale=totale+a[i]-a[i+1];
    }
    return totale;
}

int main()
{
    const int array_capacity = 20;
    int array[array_capacity];
    int array_size=0;

    cout << "Inserire una serie di numeri interi (massimo 20) o Ctrl+Z per terminare.\n";
    read_data(array,array_capacity,array_size);

    if (array_size == array_capacity && !cin.fail()) {
        cout << "Spiacente, i dati extra sono stati ignorati.\n";
    }

    int totale = alternating_sum(array,array_size);
    cout << "\nIl totale della somma alternata e': " << totale << "\n";
    return 0;
}
Sono abbastanza ignorante ancora in materia quindi mi scuso per eventuali errori ed orrori
Spero che mi possiate aiutare poichè il corso all'università è terminato e non ho nessuno a cui chiedere consigli.

Grazie mille.

3 Risposte

  • Re: Problemi con funzioni e array

    Questo avviene perché in realtà l'incremento di a_size in read_data non è riflesso all'esterno.
    Devi passare un reference perché ciò avvenga.
    
    void read_data(int a[],int a_capacity,int & a_size)
    
  • Re: Problemi con funzioni e array

    Grazie mille non ci stavo proprio pensando!
    Almeno ho fatto un passo avanti.
    Però il problema rimane, infatti ora mi da tutti risultati sballati, ma almeno ora calcola qualcosa al contrario di prima!
    Quindi mi rimane da pensare che il calcolo che è all'interno della funzione è errato.
    Che ne dici?
  • Re: Problemi con funzioni e array

    Per la prima funzione (la read_data), secondo me, ti conviene restituire il valore, invece che riceverlo tramite reference.
    Per la funzione di somma alternata, il mio suggerimento è di sommare prima tutti i dispari, poi i pari e fare la differenza.
    
    int alternating_sum(int a[],int a_size)
    {
        if (a_size==0) return 0;
        int totale=0;
        int totale1=0;
        for (int i=0;i<a_size;i=i+2) {
            totale+=a[i];
        }
    
        for (int i=1;i<a_size;i=i+2) {
            totale1+=a[i];
        }
    
       return totale - totale1;
    }
    
Devi accedere o registrarti per scrivere nel forum
3 risposte