Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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
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 copy(int* v3, int* v1, int* v2, int sizev1, int sizev2){
int m = 0, i, j;
for(i=0; i<sizev1; i++) m += v1[i];
m /= sizev1;
for(i=0, j=0; i<sizev2; i++){
if(v2[i]<m){
v3[j++]= v2[i];
}
}
}
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
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++
int main()
{
int n1,n2;//riempimento del vettore
int v1[100],v2[100];
input (n1, v1,1);
input (n2, v2,2);
. . .
}
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
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
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++
void print_array(int array[],int dim)
{
if(dim > 0)
{
for(int i = 0;i < dim;i++)
{
cout<<array[i]<<endl;
}
}
else
{
cout<<"L'array è vuoto!"<<endl;
}
}
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.
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.
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
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
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