Stampa vettore modificato

di il
1 risposte

Stampa vettore modificato

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

1 Risposte

  • Re: Stampa vettore modificato

    Scusa ma se nella funzione elimina fai inserire il valore 0 in tutti gli elementi del vettore > k e poi quando ti stampi il vettore gli fai stampare i valori > 0 non risolvi il problema?
    l'unica limitazione di questo sistema e che non potresti utilizzare lo zero per riempire il vettore.
Devi accedere o registrarti per scrivere nel forum
1 risposte