Aiuto esercizio con array

di il
10 risposte

Aiuto esercizio con array

Buonasera a tutti, ho bisogno di un aiuto per un esercizio con i vettori. L'esercizio è banale, ho un vettore di dimensione n (con n inserito da tastiera) e devo inserire poi i numeri pari in vettore e i dispari in un altro vettore. L'esercizio in linea di massima funziona ma, stampa dei numeri strani oltre i valori richiesti.

#include <cstdlib>
#include <iostream>
#define MAX 20
using namespace std;

/*
 * 
 */
void carica(int vet[], int n);
void stampa(int vet[], int n);
int npari (int vet[], int n, int vetpari[]);
void stampapari(int vetpari[], int n);
int ndisp(int vet[], int n, int vetdisp[]);
void stampadisp(int vetdisp[], int n);
int main(int argc, char** argv) {
    int n, vet[MAX], vetpari[MAX], vetdisp[MAX];
    cout<<"Dimensione del vettore: ";
    cin>>n;
    while(n<1 || n>MAX){
        cout<<"Dimensione non valida. Reinserisci la dimensione: ";
        cin>>n;
    }
    carica(vet, n);
    stampa(vet, n);
    npari(vet, n, vetpari);
    stampapari(vetpari, n);
    ndisp(vet, n, vetdisp);
    stampadisp(vetdisp, n);
    return 0;
}
void carica(int vet[], int n){
    for(int x=0; x<n; x++){
        cout<<"Inserisci l'elemento dell'array alla "<<x<<" posizione: ";
        cin>>vet[x];
    }
}
void stampa(int vet[], int n){
    cout<<"Array={";
    for(int i=0; i<n; i++){
        cout<<vet[i]<<"; ";
    }
    cout<<"\b\b}"<<endl;;
}
int npari(int vet[], int n, int vetpari[]){
    int pari=0; 
    for(int i=0; i<n; i++){
        if(vet[i]%2==0){
            vetpari[pari]=vet[i];
            pari++;
            
        }
    }
}
void stampapari(int vetpari[], int n){
    cout<<"Array Pari={";
    for(int i=0; i<n; i++){
        cout<<vetpari[i]<<"; ";
    }
    cout<<"\b\b}"<<endl;
}
int ndisp(int vet[], int n, int vetdisp[]){
    int disp=0;
    for(int i=0; i<n; i++){
        if(vet[i]%2!=0){
            vetdisp[disp]=vet[i];
            disp++;
        }
    }
}
void stampadisp(int vetdisp[], int n){
    cout<<"Array Dispari={";
    for(int i=0; i<n; i++){
        cout<<vetdisp[i]<<"; ";
    }
    cout<<"\b\b}"<<endl;
}
Esempio di stampa:
Dimensione del vettore: 4
Inserisci l'elemento dell'array alla 0 posizione: 1
Inserisci l'elemento dell'array alla 1 posizione: 2
Inserisci l'elemento dell'array alla 2 posizione: 3
Inserisci l'elemento dell'array alla 3 posizione: 4
Array={1; 2; 3; 4}
Array Pari={2; 4; -2146333957; 1}
Array Dispari={1; 3; -2144442240; 1}

10 Risposte

  • Re: Aiuto esercizio con array

    Come già detto i backspace non ti servono: cicla su un elemento in meno e aggiungi una riga appropriata.

    Le funzioni che dichiari con un return value devono appunto avere un return value all'interno.

    Per il resto la descrizione di un problema deve essere precisa, con l'esempio che hai provato, con i valori che ti aspettavi e quelli che sono stati invece stampati. "Numeri strani" non vuol dire nulla
  • Re: Aiuto esercizio con array

    Weierstrass ha scritto:


    Come già detto i backspace non ti servono: cicla su un elemento in meno e aggiungi una riga appropriata.

    Le funzioni che dichiari con un return value devono appunto avere un return value all'interno.

    Per il resto la descrizione di un problema deve essere precisa, con l'esempio che hai provato, con i valori che ti aspettavi e quelli che sono stati invece stampati. "Numeri strani" non vuol dire nulla
    Ho aggiornato il post con l'esempio del problema
  • Re: Aiuto esercizio con array

    Ok, allora è chiaro.
    Quanti sono i numeri pari? Quanti elementi chiedi di stampare dall'array dei numeri pari?
  • Re: Aiuto esercizio con array

    In questo caso i ho inserito 4 elementi . due pari e due dispari.
    Come vedi i primi due elementi dell'array coincidono, con i pari e dispari ma mette altri 2 "fantasma" per riempire tutto il vettore a quanto ho capito.
    se metto ad esempio, invece 4 pari ottengo:
    Array={2; 4; 6; 8}
    Array Pari={2; 4; 6; 8}
    Array Dispari={-18320880; 3; -2144442240; 1}
  • Re: Aiuto esercizio con array

    Non sono numeri fantasma: sono indirizzi di memoria, dovuti al fatto che hai allocato degli array nello stack senza inizializzarli.

    Hai scritto due funzioni per contare i pari e i dispari: correggile (manca una riga con il return value) e poi usale per stampare il numero corretto di elementi
  • Re: Aiuto esercizio con array

    Ho corretto così:
    
    int npari(int vet[], int n, int vetpari[]){
        int pari=0; 
        for(int i=0; i<n; i++){
            if(vet[i]%2==0){
                vetpari[pari]=vet[i];
                pari++;
                
            }
        }
        return pari;
    }
    
    
    int ndisp(int vet[], int n, int vetdisp[]){
        int disp=0;
        for(int i=0; i<n; i++){
            if(vet[i]%2!=0){
                vetdisp[disp]=vet[i];
                disp++;
            }
        }
        return disp;
    }
    
    Ho fatto bene?
    Ora però non so come stampare correttamente...
  • Re: Aiuto esercizio con array

    
    int m;
    
    m = npari(vet, n, vetpari);
    stampapari(vetpari, m);
    
  • Re: Aiuto esercizio con array

    Weierstrass ha scritto:


    
    int m;
    
    m = npari(vet, n, vetpari);
    stampapari(vetpari, m);
    
    Gentilissimo Ora ho capito dove sbagliavo del resto ho cominciato da poco con le funzioni XD
    Ora vorrei un consiglio/inofrmazione...
    ma in C++ è indispensabile imparare i puntatori?
    Dicono che rendano il codice più pulito e leggibile, ma onestamente di leggibile ci ho trovato davvero poco..
  • Re: Aiuto esercizio con array

    Passa a C# o Java. Per quanto hai imparato finora il passaggio è a costo zero
  • Re: Aiuto esercizio con array

    Weierstrass ha scritto:


    Passa a C# o Java. Per quanto hai imparato finora il passaggio è a costo zero
    Grazie per il conisglio, ovviamente un tentativo di apprendimento lo farò, anche perchè magari mi sembra difficile solo perchp non ci ho ancora messo mano... Se si rivelerà difficile passerò ad altro
Devi accedere o registrarti per scrivere nel forum
10 risposte