Array inverso

di il
11 risposte

Array inverso

Salve a tutti! avrei un problemino con questo esercizio:

"Scrivere un programma che legga da console un array di K = 36 elementi interi, calcoli e
stampi a console in ordine inverso gli elementi dell'array letto saltando gli elementi divisibili per 7."

Questo è quello che ho scritto che pero' non restituisce cio' che dovrebbe...Non riesco a venirne a capo Qualche consiglio?
#include <iostream>

using namespace std;

const int K = 4;

void vet (int array1 [K]);
void stampVett(int array1 [K]);

int main()
{
    int array1 [K];

    vet(array1);
    stampVett(array1);




    return 0;
}



void vet (int array1 [K])
{
    for(int i = 0; i < K; i++)
        {
            cout << "Inserisci il valore di posto [" << i << "]" <<endl;
            cin >> array1[i];
        }

}

void stampVett(int array1 [K]);
{

    for (int i = K-1; i <= 0; i--)
        {
             cout << array1[i] << endl;

             for  (array1[i]%7 == 0)
                {
                 cout <<"il valore è divisibile per 7" <<;

                }

        }

}

11 Risposte

  • Re: Array inverso

    Ciao, innanzitutto in questo ciclo for la condizione è errata:
    for (int i = K-1; i <= 0; i--)
    Infatti la variabile i deve essere >= 0, e non <= (un indice negativo non ha senso in un array). Tanto più che la variabile i viene inizializzata a 4, che è maggiore di zero, per cui quel ciclo non viene mai eseguito.

    In secondo luogo questa parte di codice è errata:
    for  (array1[i]%7 == 0)
                    {
                     cout <<"il valore è divisibile per 7" <<;
    
                    }
    Infatti se la tua intenzione era quella di scrivere un ciclo allora la sintassi è sbagliata. Inoltre la scelta di utilizzare un ciclo è proprio errata, in quanto l'esercizio ti richiede di fare alcune operazioni (stampa dell'elemento i-esimo) solamente se una determinata condizione è vera o falsa (se quell'elemento non è multiplo di 7).
  • Re: Array inverso

    Della ha scritto:


    Ciao, innanzitutto in questo ciclo for la condizione è errata:
    for (int i = K-1; i <= 0; i--)
    Infatti la variabile i deve essere >= 0, e non <= (un indice negativo non ha senso in un array). Tanto più che la variabile i viene inizializzata a 4, che è maggiore di zero, per cui quel ciclo non viene mai eseguito.

    In secondo luogo questa parte di codice è errata:
    for  (array1[i]%7 == 0)
                    {
                     cout <<"il valore è divisibile per 7" <<;
    
                    }
    Infatti se la tua intenzione era quella di scrivere un ciclo allora la sintassi è sbagliata. Inoltre la scelta di utilizzare un ciclo è proprio errata, in quanto l'esercizio ti richiede di fare alcune operazioni (stampa dell'elemento i-esimo) solamente se una determinata condizione è vera o falsa (se quell'elemento non è multiplo di 7).
    Ah giusto non avevo notato il < ...

    Invece per quanto riguarda il ciclo immaginavo fosse sbagliato,pero' non so dove mettere la condizione.
    Potrei mettere un if dopo il for?

    Grazie!
  • Re: Array inverso

    Beh si, al posto del 2° for (quello più interno, per capirci).. In questo modo stampi solamente i valori che non sono multipli di 7..
  • Re: Array inverso

    Ok,ho scritto così.
    però continua non non funzionare,infatti stampa anche i multipli di 7 e non visualizza il primo
    
    #include <iostream>
    using namespace std;
    
    const int K = 4;
    
    void vet (int array1 [K]);
    void stampVett(int array1 [K]);
    
    int main()
    {
        int array1 [K];
    
        vet(array1);
        stampVett(array1);
    
    
    
    
        return 0;
    }
    
    
    
    void vet (int array1 [K])
    {
        for(int i = 0; i < K; i++)
            {
                cout << "Inserisci il valore di posto [" << i << "]" <<endl;
                cin >> array1[i];
            }
    
    }
    
    void stampVett(int array1 [K]);
    {
    
    
        for (int i = K-1; i >= 0; i--)
            {
                if (array1[1]%7 != 0)
                {
    
                 cout << array1[i] << endl;
                }
    
    
            }
    
    }
    
  • Re: Array inverso

    Husky ha scritto:


    Ok,ho scritto così.
    però continua non non funzionare,infatti stampa anche i multipli di 7 e non visualizza il primo
    
    if (array1[1]%7 != 0)
    
    Guarda bene questa riga


    Sent from my iPhone using Tapatalk
  • Re: Array inverso

    Della ha scritto:


    Husky ha scritto:


    Ok,ho scritto così.
    però continua non non funzionare,infatti stampa anche i multipli di 7 e non visualizza il primo
    
    if (array1[1]%7 != 0)
    
    Guarda bene questa riga


    Sent from my iPhone using Tapatalk
    Ah giusto!
    Avevo fatto un sacco di confusione

    Adesso ho messo così e sembra funzionare
    
    for (int i = K-1; i >= 0; i--)
            {
                if (array1 [i]/7 == 0)
                {
    
                 cout << array1[i] << endl;
                }
    
    Grazie mille per la pazienza
  • Re: Array inverso

    if (array1 [i]/7 == 0)
                {
    
                 cout << array1[i] << endl;
                }
    In questo modo stampi i valori minori di 7... come puoi dire che "sembra funzionare"
  • Re: Array inverso

    In effetti non sono multipli di 7, quindi va bene :p
    Al di la degli scherzi, hai corretto un errore ma ne hai introdotto un altro (in realtà sono un paio), sempre nella stessa riga:
    
    if (array1[i]/7 == 0)
    

    Sent from my iPhone using Tapatalk
  • Re: Array inverso

    È vero...

    Ero troppo preso e non mi ero accorto che stampava solo i minori

    Vediamo se finalmente ci sono riuscito
    
        for (int i = K-1; i >= 0; i--)
            {
                if (array1[i]%7 != 0)
                {
    
                 cout << array1[i] << endl;
                }
    
  • Re: Array inverso

    Per il "debug" ti consiglio di "commentare" l'inserimento manuale dei valori e di inserire "da programma" degli array di prova, così velocizzi le tue prove e provi diversi casi di inserimento.
  • Re: Array inverso

    candaluar ha scritto:


    Per il "debug" ti consiglio di "commentare" l'inserimento manuale dei valori e di inserire "da programma" degli array di prova, così velocizzi le tue prove e provi diversi casi di inserimento.
    Ah ok ti ringrazio.

    Comunque questo è il programma intero,questa volta sembra funzionare davvero
    
    #include <iostream>
    
    using namespace std;
    
    const int K = 4;
    
    void vet (int array1 [K]);
    void stampVett(int array1 [K]);
    
    int main()
    {
        int array1 [K];
    
        vet(array1);
        stampVett(array1);
    
    
    
    
        return 0;
    }
    
    
    
    void vet (int array1 [K])
    {
        for(int i = 0; i < K; i++)
            {
                cout << "Inserisci il valore di posto [" << i << "]" <<endl;
                cin >> array1[i];
            }
    
    }
    
    void stampVett(int array1 [K])
    
    {
    
    
        for (int i = K-1; i >= 0; i--)
            {
                if (array1[i]%7 != 0)
                {
    
                 cout << array1[i] << endl;
                }
    
    
            }
    
    }
    
    
Devi accedere o registrarti per scrivere nel forum
11 risposte