Salve ragazzi, mi sono imbattuto in questo esercizio:
Siano assegnati in ingresso, da tastiera, un vettore di interi V, il suo riempimento n ed un intero k. Si scriva un programma che elimini dal vettore V tutti gli elementi il cui valore è maggiore di k e calcoli il numero num di elementi eliminati. Si stampino quindi il vettore V modificato ed il valore num. Il programma deve essere articolato in funzioni (ad es.: input, output, elimina).
Risolto in questo modo va bene ed è funzionante (il seguente non è stato compilato dal sottoscritto):
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{ int n; //numero di elementi
int k; //valore di soglia
int i,eliminati,num,j,t;
eliminati=0;
cout<<"inserire la grandezza della stringa\n";
cin>>n;
int v[n]; //vettore
cout<<"inserire i valori della stringa\n";
for (i=0;i<n;i++){
cin>>num;
v[i]=num;}
for(j=0;j<i;j++)
cout<<v[j]<<"\t";
cout<<"\n dammi il valore di soglia\n";
cin>>k;
for(t=0;t<n;t++){
if(k<v[t]){
v[t]=0;
eliminati=eliminati+1;
}}
cout<<"il numero di celle da eliminare sono\t"<<eliminati<<"\n";
int grandezza_nuovo_vettore=n-eliminati;
int v2[grandezza_nuovo_vettore];
grandezza_nuovo_vettore=0;
i=0;
do{
if(v[i]!=0){
v2[grandezza_nuovo_vettore]=v[i];
grandezza_nuovo_vettore++;
i++;}
else
i++;
}while(i<n);
for(j=0;j<grandezza_nuovo_vettore;j++)
cout<<v[j]<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
Adesso però io dovrei svilupparlo con i sottoprogrammi. Ho fatto una bozza anche se il programma non è perfettamente funzionante, o meglio, compila ma non svolge la funzione elimina. Poichè non riesco a far capire al compilatore come dovrebbe eliminare i valori maggiori di k, potreste aiutarmi voi? Grazie in anticipo.
#include <cstdlib>
#include <iostream>
using namespace std;
void input(int v[],int &n, int &k);
void elimina(int k,int v[],int n,int &num,bool &eliminato);
void output(int v[],int n,int num, bool eliminato);
int main()
{
int v[100],n,k,num;
bool eliminato;
input(v,n,k);
elimina(k,v,n,num,eliminato);
output(v,n,num,eliminato);
system("PAUSE");
return EXIT_SUCCESS;
}
void input(int v[],int &n, int &k){
cout<<"inserire la grandezza del vettore\n";
cin>>n;
cout<<"riempi il vettore\n";
for(int i=0;i<n;i++){
cin>>v[i];
}
cout<<"dammi l'intero k\n";
cin>>k;
}
void elimina(int k,int v[],int n,int &num,bool &eliminato){
int i;
num=0;
for(i=0;i<n;i++){
if(v[i]==k)
{
num++;
}
else
v[i-num]=v[i];}
}
void output(int v[],int n,int num, bool eliminato){
int i;
if(eliminato){
cout<<"num="<<num<<"\n";
for(i=0;i<n;i++){
cout<<"\n"<<v[i]<<"\t";
}}
else
cout<<"\n";
}