Problema xcode o programma?

di il
5 risposte

Problema xcode o programma?

Ciao a tutti, avrei un problema con questo programma, l'esercizio sarebbe il seguente:

Si scriva un programma che ricevuto in ingresso un array di numeri positivi, calcola e trasmette un array di valori in cui ogni elemento e` dato dalla somma del corrispondente valore dell’array di partenza con tutti i precedenti.

Non capisco però perché continuino ad uscirmi risultati strani, ovvero dopo aver inserito

1 2 3 4 5 6 7 8 9 10 11 (tra l'altro ci sarebbe un modo per evitare l'ultima richiesta dello scanf inutile nella while?)
il risultato è il seguente:

1 3 6 10 -1074794049 32780 28 36 45 55
Non capisco se sia un problema di xcode o del programma, che mi sembrerebbe giusto…

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

void sommarray(int[], int[], int);

int main(int argc, const char * argv[]) {
    int valori[MAX], ris[MAX];
    int i, val, dim;
    
    i = 0;
    scanf("%d", &val);
    
    while (val > 0 && i < MAX) { //aggiungo solo valori positivi, in caso contrario finisco l'acquisizione
        valori[i] = val;
        i++;
        scanf("%d", &val);
    }
    
    dim = i;
    
    sommarray(valori, ris, dim);
    
    for (i = 0; i < dim; i++) {
        printf("%d ", ris[i]);
    }
    return 0;
}

void sommarray(int valori[], int ris[], int dim){ 
    int i, j;
    for (i = 0; i < dim; i++) {
        for (j = 0; j <= i; j++) {
            ris[i] += valori[j];
        }
    }
}

5 Risposte

  • Re: Problema xcode o programma?

    Devi inizializzare a zero i valori del vettore ris[] prima di chiamare la funzione sommarray dato che non vengono inizializzati a zero di default come succede per altri linguaggi di programmazione.
    Poi, dato che definisci la costante MAX ti conviene usare quella per gestire i vettori con i clicli piuttosto che una nuova variabile dim.

    Per quanto riguarda lo scanf inutile nella while devi usare un ciclo do … while invece di un semplice ciclo while.

  • Re: Problema xcode o programma?

    15/08/2023 - euscar ha scritto:


    Devi inizializzare a zero i valori del vettore ris[] prima di chiamare la funzione sommarray dato che non vengono inizializzati a zero di default come succede per altri linguaggi di programmazione.
    Poi, dato che definisci la costante MAX ti conviene usare quella per gestire i vettori con i clicli piuttosto che una nuova variabile dim.

    Per quanto riguarda lo scanf inutile nella while devi usare un ciclo do … while invece di un semplice ciclo while.

    Grazie mille per la dritta, non sapevo dovessi inizializzare ris[]!
    Per il resto non conoscendo la dimensione finale dell'array, poiché ci deve essere il controllo delle cifre che siano positive e che si ferma una volta inserito un valore negativo, ho preferito contare quanti giri facesse all'interno del ciclo while per contare quante cifre venissero prese, se tante quante MAX o di meno! Stesso discorso per la scelta del ciclo while sul do … while, siccome conterebbe un'iterazione in più.

    Grazie ancora e buon ferragosto!

  • Re: Problema xcode o programma?

    Ah, mi era sfuggito che volessi fermarti prima di MAX valori.

    Buon ferragosto anche a te.

  • Re: Problema xcode o programma?

    Esercizio per le vacanze (ormai finite): nella funzione sommarray non ti servono due for annidati, ma te ne basta uno solo.

    Pensaci. :)

  • Re: Problema xcode o programma?

    Si potrebbe fare la somma insieme all'inserimento dei dati, non servirebbe neanche la funzione dopo ( oggi sono pignolo )

Devi accedere o registrarti per scrivere nel forum
5 risposte