Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    12

    Problema con le funzioni! DEV C

    Buongiorno, sapete dirmi dove ho sbagliato?
    Scrivere un programma che produca e stampi a videoil vettore vett in cui sono stati eliminati tutti gli elementi pari.Sono presenti funzioni per:1. Leggere da tastiera un vettore2. Stampare un vettore3. Controllare se un numero č pari4. Eliminare un elemento da un vettore

    codice:
    #include<iostream>#include<stdlib.h>
    #define N 50
    using namespace std;
    void inserire(int v[N], int n){
        for(int i=0;i<n;i++){
            cout<<"Inserisci elemento "<<i<<"\n";
            cin>>v[i];
        }}
        
    void stampa(const int v[N],int n){
        for(int i=0;i<n;i++){
            cout<<v[i]<<" ";
        }
    }
    void controlla_pari(int m,int pari,int dispari){
            if(m%2==0){
                m=pari;
            }
          else{  m=dispari;
        }
    }
    void elimina_vett(int v[N], int n, int pari){
        for(int i=0;i<n-1;i++){
            if(v[i]==pari){
                v[i]=v[i+1];
                n--;
                }}
        }
    int main(){
        int v[N];
        int n;
        int m;
        int pari;
        int dispari;
        cout<<"Inserire dimensione ";
        cin>>n;
        inserire(v,n);
        stampa(v,n);
        cout<<"Vettore dopo aver eliminato i numeri pari: \n";
        for(int i=0;i<n;i++){
        controlla_pari(m,pari,dispari);
        if(v[i]==pari){
        elimina_vett(v,n,pari);}}
        cout<<"\n";
        stampa(v,n);
        system("pause");
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    La prima cosa che vedo č che stai usando due variabili chiamate "pari" e "dispari" (non si sa bene per quale motivo, visto che il fatto che un numero sia pari o dispari č semplicemente un valore booleano) e che queste sono dichiarate nel main, ma mai inizializzate prima di essere usate (e questo genera ovviamente errori).


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se chiedi "dove hai sbagliato" devi anche dire cosa c'č di sbagliato. Un errore durante la compilazione? Quale? Oppure durante l'esecuzione non funziona come dovrebbe? E in questo caso come funziona?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    12
    Non c'č nessun errore durante la compilazione per questo non riesco a capire dove sbaglio.L'ho modificato seguendo il tuo consiglio ma ancora non va.
    codice:
    #include<iostream>#include<stdlib.h>
    #define N 50
    using namespace std;
    void inserire(int v[N], int n){
        for(int i=0;i<n;i++){
            cout<<"Inserisci elemento "<<i<<"\n";
            cin>>v[i];
        }}
        
    void stampa(const int v[N],int n){
        for(int i=0;i<n;i++){
            cout<<v[i]<<" ";
        }
    }
    bool controlla_pari(int v[N],int n,int i){
            if(v[i]%2==0){
                return true;
            }
          else{  return false;
        }
    }
    void elimina_vett(int v[N], int n){
        for(int i=0;i<n-1;i++){
                v[i]=v[i+1];
                n--;
                }}
    int main(){
        int v[N];
        int n;
        bool cond;
        cout<<"Inserire dimensione ";
        cin>>n;
        inserire(v,n);
        stampa(v,n);
        cout<<"Vettore dopo aver eliminato i numeri pari: \n";
        for(int i=0;i<n;i++){controlla_pari(v,n,i);
        if(cond==true){
        elimina_vett(v,n);}
        }
        cout<<"\n";
        stampa(v,n);
        system("pause");
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    12
    Ho provato a separare le funzioni dal resto del programma e di per sč funzionano... ma il vettore rimane invariato

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da Martina3 Visualizza il messaggio
    Ho provato a separare le funzioni dal resto del programma e di per sč funzionano... ma il vettore rimane invariato
    Consiglio? Io non ti ho dato ancora consigli, ho solo chiesto.

    Comunque a me non compila perché la variabile

    cond

    nel main viene usata senza che sia stato assegnato mai un valore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    12
    Mi riferivo alla risposta di LeleFT.
    Anche se inizializzo bool cond=true il programma funziona male:
    Inserire dimensione
    5
    Inserisci elemento 0
    1
    Inserisci elemento 1
    2
    Inserisci elemento 2
    3
    Inserisci elemento 3
    4
    Inserisci elemento 4
    5
    1 2 3 4 5
    Vettore dopo aver eliminato i numeri pari: 3 3 3 4 5

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    E infatti la mia perplessitą era sul perchč passavi alle funzioni il valore della paritą/disparitą del numero quando la funzione č perfettamente in grado di capire da sč se il numero č pari o dispari... che senso ha la variabile cond? E che senso ha inizializzare cond a true? Chiami una funzione che ti dice se il numero č pari o dispari... e questa valutazione viene semplicemente buttata via (non la salvi da nessuna parte) poi per il test usi la variabile "cond" che hai inizializzato a true e che nessuno va a modificare... quindi poco importa che il valore sia pari o dispari, nell'if ci entri sempre e comunque perchč la variabile cond č sempre true...

    Devi rivedere meglio il tutto.


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.