|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
Programma in c++
Buongiorno a tutti,avrei un problemino con il seguente programma.
Codice:
//Siano dati due vettori di uguale riempimento n ed un intero k.
//Si costruisca un vettore ogni elemento del quale abbia valore pari
//al maggiore fra i valori che si trovano nella stessa posizione in V1
//e V2.Se tali valori sono uguali,si memorizzi nell'omologa posizione di V3
// il valore comune.Si eliminino da V3 i valori minori di k e si stampi
//il vettore V3 risultante ed il numero di valori eliminati.
#include <iostream>
#include <stdlib.h>
using namespace std;
const int MAX_ELEM=100;
const int MAX_LUN=100;
typedef char stringa[MAX_LUN+1];
void input_array(int V[],int n,stringa nome_array);
void input(int V1[],int V2[],int &n);
void input_k(int &k);
void copia(int V1[],int V2[],int V3[],int n,int &n3);
bool elimina(int V[],int &n,int k);
void output(int V3[],int n3,int &c,int k,bool eliminato1);
void restart(char &risp);
int main()
{
char risp;
do{
int V1[MAX_ELEM];
int V2[MAX_ELEM];
int V3[MAX_ELEM];
int n;
int n3;
int k;
int c;
bool eliminato1;
input(V1,V2,n);
input_k(k);
copia(V1,V2,V3,n,n3);
eliminato1=elimina(V3,n3,k);
output(V3,n3,c,k,eliminato1);
restart(risp);
}while((risp=='s') || (risp=='S'));
system("PAUSE");
return 0;
}
void input_array(int V[],int n,stringa nome_array){
int i;
do{
if(n<0){
cout<<"Non puo'essere inserito un riempimento negativo"<<endl;}
if(n>MAX_ELEM){
cout<<"Non puo'essere inserito un riempimento maggiore di"<<" "<<MAX_ELEM;}
}while((n<0) || (n>MAX_ELEM));
for(i=0; i<n; i++){
cout<<"Inserire"<<" "<<nome_array<<"["<<i<<"]=";
cin>>V[i];
}
cout<<endl;
}
void input(int V1[],int V2[],int &n){
cout<<"Inserire il riempimento dei vettori"<<":";
cin>>n;
cout<<endl;
input_array(V1,n,"V1");
input_array(V2,n,"V2");
}
void input_k(int &k){
cout<<"Inserire il valore di k"<<":";
cin>>k;
cout<<endl;
}
void copia(int V1[],int V2[],int V3[],int n,int &n3){
int i;
n3=0;
for(i=0; i<n; i++){
if(V1[i]>V2[i]){
V3[n3++]=V1[i];
}
else{
V3[n3++]=V2[i];}
if(V1[i]==V2[i]){
V3[n3++]=V1[i];
}
}
}
bool elimina(int V[],int &n,int k){
int i=0;
int c=0;
bool eliminato=false;
for(i=0; i<n; i++){
if(V[i]<k){
eliminato=true;
c++;}
else V[i-c]=V[i];
}
n-=c;
return eliminato;
}
void output(int V3[],int n3,int &c,int k,bool eliminato1){
int i;
if(eliminato1==true){
cout<<"Il nuovo vettore e'"<<":";
for(i=0; i<n3; i++){
cout<<V3[i]<<" ";
}
cout<<endl;
cout<<"Numero valori eliminati"<<":"<<c<<endl;
}
else
cout<<"Non e'stato eliminato alcun valore"<<endl;
}
void restart(char &risp){
do{
cout<<"Si vuole ripetere il programma? (s/n)"<<":";
cin>>risp;
}while((risp!='s') && (risp!='S') && (risp!='n') && (risp!='N'));
}
Praticamente il programma funziona,solo che non riesco a dare in output il numero di valori eliminati.Grazie mille |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
Qualcuno sa come posso risolvere?
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Si ma c non esce dalla funzione elimina(). Perchè non le fai restituire un int corrispondente al numero di eliminazioni, invece di un bool?
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Oct 2008
Messaggi: 75
|
posso provare ad aiutarti però mi dovrsti spiegare bene il problema
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
Allora ho capito...tu nella funzione in cui elimini, aumenti sì il contatore, ma non lo "return" come valore della funzione...ti conviene non ritornare eliminato, ma dare un return c. Oppure nel prototipo della funzione passi anche un puntatore, che dichiarerai nel main, e quando lo passi alla funzione usi la chiamata per indirizzo con l'&. Così modifica il valore della variabile e hai un contatore a tutti gli effetti
|
|
|
|
|
|
#10 | |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
Quote:
Hai cambiato anche il tipo di return della funzione?Ovvero da bool a int?
|
|
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
|
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
Credo di avere risolto solo parzialmente il mio problema,mi spiego meglio:
il programma ora funziona,ma solo,ad esempio,in questo caso: V1=3,2,1,4,2 V2=1,3,2,1,7 k=4 V3=4,7 Numero di valori eliminati=3 Se ad esempio,metto: V1=1,1,1,5,6 V2=1,1,1,7,8 k=4 V3=7,8 Numero valori eliminati=6 (quando invece dovrebbe essere 3). Allego il mio programma modificato Codice:
//Siano dati due vettori di uguale riempimento n ed un intero k.
//Si costruisca un vettore ogni elemento del quale abbia valore pari
//al maggiore fra i valori che si trovano nella stessa posizione in V1
//e V2.Se tali valori sono uguali,si memorizzi nell'omologa posizione di V3
// il valore comune.Si eliminino da V3 i valori minori di k e si stampi
//il vettore V3 risultante ed il numero di valori eliminati.
#include <iostream>
#include <stdlib.h>
using namespace std;
const int MAX_ELEM=100;
const int MAX_LUN=100;
typedef char stringa[MAX_LUN+1];
void input_array(int V[],int n,stringa nome_array);
void input(int V1[],int V2[],int &n);
void input_k(int &k);
void copia(int V1[],int V2[],int V3[],int n,int &n3);
bool elimina(int V[],int &n,int k,int &c);
void output(int V3[],int n3,int &c,int k,bool eliminato1);
void restart(char &risp);
int main()
{
char risp;
do{
int V1[MAX_ELEM];
int V2[MAX_ELEM];
int V3[MAX_ELEM];
int n;
int n3;
int k;
int c;
bool eliminato1;
input(V1,V2,n);
input_k(k);
copia(V1,V2,V3,n,n3);
eliminato1=elimina(V3,n3,k,c);
output(V3,n3,c,k,eliminato1);
restart(risp);
}while((risp=='s') || (risp=='S'));
system("PAUSE");
return 0;
}
void input_array(int V[],int n,stringa nome_array){
int i;
for(i=0; i<n; i++){
cout<<"Inserire"<<" "<<nome_array<<"["<<i<<"]=";
cin>>V[i];
}
cout<<endl;
}
void input(int V1[],int V2[],int &n){
do{
cout<<"Inserire il riempimento dei vettori"<<":";
cin>>n;
cout<<endl;
if(n<0){
cout<<"Non puo'essere inserito un riempimento negativo"<<endl;}
if(n>MAX_ELEM){
cout<<"Non puo'essere inserito un riempimento maggiore di"<<" "<<MAX_ELEM<<endl;}
}while((n<0) || (n>MAX_ELEM));
input_array(V1,n,"V1");
input_array(V2,n,"V2");
}
void input_k(int &k){
cout<<"Inserire il valore di k"<<":";
cin>>k;
cout<<endl;
}
void copia(int V1[],int V2[],int V3[],int n,int &n3){
int i;
n3=0;
for(i=0; i<n; i++){
if(V1[i]>V2[i]){
V3[n3++]=V1[i];
}
else{
V3[n3++]=V2[i];}
if(V1[i]==V2[i]){
V3[n3++]=V1[i];
}
}
}
bool elimina(int V[],int &n,int k,int &c){
int i=0;
c=0;
bool eliminato=false;
for(i=0; i<n; i++){
if(V[i]<k){
eliminato=true;
c++;}
else V[i-c]=V[i];
}
n-=c;
return eliminato;
}
void output(int V3[],int n3,int &c,int k,bool eliminato1){
int i;
if(eliminato1==true){
cout<<"Il nuovo vettore e'"<<":";
for(i=0; i<n3; i++){
cout<<V3[i]<<" ";
}
cout<<endl;
cout<<"Numero valori eliminati"<<":"<<c<<endl;
}
else
cout<<"Non e'stato eliminato alcun valore"<<endl;
}
void restart(char &risp){
do{
cout<<"Si vuole ripetere il programma? (s/n)"<<":";
cin>>risp;
}while((risp!='s') && (risp!='S') && (risp!='n') && (risp!='N'));
}
|
|
|
|
|
|
#14 | |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 17
|
Quote:
Ho risolto,grazie mille a tutti !!!! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:35.












Hai cambiato anche il tipo di return della funzione?Ovvero da bool a int?








