PDA

Visualizza la versione completa : Problema con le funzioni! DEV C


Martina3
09-12-2016, 11:54
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


#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");
}

LeleFT
09-12-2016, 12:20
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. :ciauz:

oregon
09-12-2016, 13:17
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?

Martina3
09-12-2016, 13:49
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.

#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");
}

Martina3
09-12-2016, 13:51
Ho provato a separare le funzioni dal resto del programma e di per sè funzionano... ma il vettore rimane invariato

oregon
09-12-2016, 14:11
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.

Martina3
09-12-2016, 16:17
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

LeleFT
09-12-2016, 17:03
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. :ciauz:

Loading