Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - programma che copi in un nuovo vettore V3 i valori contenuti in V2
Forum - C/C++ - programma che copi in un nuovo vettore V3 i valori contenuti in V2

Avatar
luigi304 (Normal User)
Newbie


Messaggi: 1
Iscritto: 12/07/2011

Segnala al moderatore
Postato alle 12:20
Martedì, 12/07/2011
Salve a tutti,
ho scoperto questo forum per caso e lo reputo molto utile.
Ho un problema essendo un laureando in ing elettrica e devo affrontare il penultimo mio esame che si intitola fondamenti di informatica.
Non sono spigliato con l'informatica e aimè devo far quest'esame e quindi saper programmare con il C++.
Sto in difficoltà nella realizzazione del seguente programma:

"Siano dati in ingresso, da tastiera, i riempimenti n1 ed n2 ed i valori di due vettori V1 e V2
di numeri reali. Si scriva un programma che copi in un nuovo vettore V3 i valori contenuti in V2
che risultano minori della media dei valori presenti in V1.
Si stampino quindi il vettore V3 cosi' ottenuto e le medie dei valori presenti in V1 ed in V3.
Si preveda un apposito output nel caso V3 sia vuoto."

nuova versione editata....ma continua a non funzionare....mi sento perso...mmm

#include<iostream>
using namespace std;
#include <stdlib.h>
void input (int &n, int v[],int numvettore);
void copy(int *v1,int *v2,int *v3,int dim1,int dim2,int &dim3);
void  print_array(int array[],int dim) ;

int main()
{
    int n1,n2;//riempimento del vettore
    int v1[100],v2[100],v3[100];
    int dim1,dim2,dim3;
    int array[100];
    int i,m;
  
    
    
    input (n1, v1,1);
    input (n2, v2,2);
    
    
    
  
   cout<<"\n\n";
   system ("PAUSE");
   return 0;
}


//function input
void input (int &n, int v[],int numvettore)
{
    int i;
    cout<<"Assegna valore intero al numero di elementi del vettore " << numvettore << "\n";
  cin>>n;
    cout<<"\nAssegna valore intero ai "<<n<<" elementi del vettore " << numvettore << "\n";
    for(i=0; i<n; i++)
     cin>>v;
    
}//end function input



void copy(int *v1,int *v2,int *v3,int dim1,int dim2,int &dim3)
{
       int m = 0, i;

       for (i=0; i < dim1; i++) m += v1;
       m /= dim1;

       for (i=0, dim3 = 0; i < dim2; i++) {
          if(v2 < m)
           {
             v3[dim3] = v2;
             dim3++;
           }
       }
}






void  print_array(int array[],int dim)
{
  if(dim > 0)
  {
      for(int i = 0;i < dim;i++)
      {
            cout<<array<<endl;
       }
}
  else
  {
     cout<<"L'array è vuoto!"<<endl;
  }
}


Ultima modifica effettuata da luigi304 il 13/07/2011 alle 22:52
PM
Avatar
kopiro91 (Member)
Newbie


Messaggi: 20
Iscritto: 23/07/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 18:53
Martedì, 12/07/2011
Ciao, io farei cosi, per il secondo punto:

Codice sorgente - presumibilmente C++

  1. void copy(int* v3, int* v1, int* v2, int sizev1, int sizev2) {
  2.         int m = 0, i, j;
  3.         for (i=0; i<sizev1; i++) m += v1[i];
  4.         m /= sizev1;
  5.         for (i=0, j=0; i<sizev2; i++) {
  6.                 if (v2[i]<m) {
  7.                         v3[j++] = v2[i];
  8.                 }
  9.         }
  10. }


scusami...ho sbagliato a cliccare e compare quel diabolico -1 che non mif a cambiare .... - luigi304 - 12/07/11 19:01
ti ringrazio per la disponibilità, adesso provo ad elaborare il tutto seguendo il tuo consiglio...mi dispiace di aver cliccato -1 ma non conosco bene il forum e senza volerlo è successo...scusa ancora e grazie per la disponibilità.;-) - luigi304 - 12/07/11 19:04
allora ho provato a fare in questo modo: - luigi304 - 12/07/11 19:07
ma non continua il programma una volta individuati i vettori v1 e v 2..... - luigi304 - 12/07/11 19:09
PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
2
Down
V
Segnala al moderatore
Postato alle 13:06
Martedì, 12/07/2011
intanto nella funzione input, controlla che n non sia maggiore di 100 altrimenti andrai in buffer overflow, poi nel main hai bisogno di dichiarare due variabili che contengano la dimensione degli array, e non solo una, cioe:

Codice sorgente - presumibilmente C/C++

  1. int main()
  2. {
  3.    int n1,n2;//riempimento del vettore
  4.    int v1[100],v2[100];
  5.    
  6.     input (n1, v1,1);
  7.     input (n2, v2,2);
  8.    . . .
  9. }



poi crei un terzo array v3 che conterra i valora di v2 minori della media dei valori di v1.

algoritmo: dichiara l'array v3, calcola la media dei valori di v1, e assegna a v3 i valori di v2 minori della media (con un ciclo)

se dovessi avere altri problemi chiedi pure :k:

ps: per scrivere codice nel forum usa gli opportuni tag code - carlduke - 12/07/11 13:07
Grazie per la disponibilità,ho provato a seguire la strada consigliata da Kopiro91...adesso devo realizzare il void output? comprendo che le mie domande possono sembrare assurde e orribili ma la situazione è critica...eheh :-)) - luigi304 - 12/07/11 19:21
PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 19:39
Martedì, 12/07/2011
allora okay, intanto ti ricordo di usare i tag code per scrivere il codice sorgente, è molto più leggibile.

crea una funzione per scrivere a video i valori di un array, potrebbe essere cosi

Codice sorgente - presumibilmente C/C++

  1. void  print_array(int array[],int dim)
  2. {
  3.   if(dim > 0)
  4.   {
  5.       for(int i = 0;i < dim;i++)
  6.       {
  7.             cout<<array[i]<<endl;
  8.        }
  9.   }
  10.   else
  11.   {
  12.      cout<<"L'array è vuoto!"<<endl;
  13.   }
  14. }



quindi crei una variabile per la dimensione dell'array v3.
Nella funzione copy passala per reference è incrementala ogni volta che assegni un valore a un elemento del vettore.

la funzione sarà cosi

Codice sorgente - presumibilmente C++

  1. void copy(int *v1,int *v2,int *v3,int dim1,int dim2,int &dim3)
  2. {
  3.         int m = 0, i;
  4.  
  5.         for (i=0; i < dim1; i++) m += v1[i];
  6.         m /= dim1;
  7.  
  8.         for (i=0, dim3 = 0; i < dim2; i++) {
  9.            if(v2[i] < m)
  10.            {
  11.              v3[dim3] = v2[i];
  12.              dim3++;
  13.            }
  14.        }
  15. }



dopo aver chiamato copy, richiama il metodo print_array su v3 (che devi dichiarare come array, tu l'hai dichiarato variabile normale) e cosi i valori di v3 verranno stampati a video. :k:

Ultima modifica effettuata da carlduke il 13/07/2011 alle 11:59
ok ho provato ad elaborare il tutto...lo incollo nel mio post...però nasce il problema che non mi riconosce i ed m ..... - luigi304 - 12/07/11 20:32
ma dove sta scritto l'array è vuoto devo modificarlo giusto? altrimenti da dove rilegge il v3? perdonami ma sono ignorante in materia..direi IGNORANTE in maniera elegante....;-) - luigi304 - 12/07/11 20:37
le righe che ti ho scritto io della funzione copy sono da integrare con quella che avevi gia scritto tu, infatti ho messo i puntini x far capire che c'è altro codice ;) - carlduke - 12/07/11 20:47
ho editato il post - carlduke - 12/07/11 20:50
ti funziona presumo...come tu puoi presumere facilmente che a menon funzioni vero? :-))) - luigi304 - 12/07/11 21:47
ho provato e riprovo....sto qui tendando ...ho specificate anche sizev1 e sizev2 ma ogni volta mi dice che non li conosce.... - luigi304 - 12/07/11 21:50
scusa è che copiando la funzione di kopiro non mi sono accorto che alcune variabili avevano nome diverso..ora edito - carlduke - 13/07/11 11:40
grazie...scusa se sono assillante...spero di non annoiarti...son tornato adesso da lavoro dopo un turno 8-20 e sicuramente domattina proverò ad editare il programma con maggiore lucidità...cmq ti ringrazio nuovamente per la disponibilità dimostrata e ti farò sapere. grazie ancora :-) - luigi304 - 13/07/11 22:46
ho effettuato le midifiche e effettuato l'edit mio iniziale inserendo il programma...ma continua a non funzionare...a te funziona? ora forse ho il cervello in tilt...non so...se puoi fammi sapere ok? grazie ancora. - luigi304 - 13/07/11 22:53
posta gli errori che ti da il compilatore - carlduke - 14/07/11 12:02
ok - luigi304 - 14/07/11 18:13
In function `void input(int&, int*, int)': ; 46 no match for 'operator>>' in 'std::cin >> v' ; note C:\Dev-Cpp\include\c++\3.4.2\bits\istream.tcc:87 candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::b - luigi304 - 14/07/11 18:15
poi mi dice : In function `void copy(int*, int*, int*, int, int, int&)': ed al rigo 56 56 invalid conversion from `int*' to `int' - luigi304 - 14/07/11 18:17
ed infine 60 ISO C++ forbids comparison between pointer and integer - luigi304 - 14/07/11 18:18
ho copiato il programma che ho scritto nuovamente nel mio compilatore c++....non riesco a capire ...cosa significano tutti questi errori? riuscirò mai a far funzionare questo programma?enigma - luigi304 - 14/07/11 18:20
dove hai scritto "cin>>v;" hai sbagliato, dato che devi scrivere "cin>>v[i];" perchè prendi un elemento dell'array alla volta..posta tutto il programma editando e usa i tag code..ah e poi scrivi un commento cosi mi arriva la notifica - carlduke - 14/07/11 18:25
PM