|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 9
|
[C++] Esercizio Vettori
Salve ragazzi, devo scrivere questo programma in C++.. ma non sono riuscito a buttare giù niente.. mi fareste vedere come scrivere il seguente programma?
- Carica un vettore Vet di N componenti, con N <= 100, con numeri interi <= 99. Successivamente rileggi il vettore aggiornando un secondo vettore Vet2, formato da dieci componenti, in modo tale da ottenere, alla fine, la quantità di valori inferiori a 10 nella prima posizione di Vet2, i valori compresi tra 10 e 19 nella seconda posizione, i valori tra 20 e 29 nella terza e così via. Terminato l'aggiornamento, stampa il vettore Vet2. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 9
|
Il problema è che non riesco a comprendere la traccia. Il codice saprei scriverlo.. mi aiuteresti anche a 'renderla più chiara'? Da quel che ho capito, ho scritto una cosa del tipo:
Codice:
int main() { int vet[100],vet2[10], i; for(i=0;i<100;i++) { cout<<"inserisci numero"; cin>>vet[i]; } for(i=0;i<100;1++) { switch(vet[i]/10) { case1:=1 vet2[0]=vet2[0]+1; case2:=2 vet2[1]=vet2[1]+1; case3:=3 vet2[2]=vet2[2]+1; case4:=4 vet2[3]=vet2[3]+1; case5:=5 vet2[4]=vet2[4]+1; case6:=6 vet2[5]=vet2[5]+1; case7:=7 vet2[6]=vet2[6]+1; case8:=8 vet2[7]=vet2[8]+1; case9:=9 vet2[8]=vet2[8]+1; case10:=0 vet2[9]=vet2[9]+1; } } for(i=0;i<10;1++) { cout<<" "<<vet2[i] } return 0; } Ultima modifica di biquidus : 24-09-2011 alle 15:07. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Hai un vettore 1 di dimensione 100. Ogni cella può contenere un valore tra 0 e 99
Hai un vettore 2 di dimensione 10. La prima cella conta quanti elementi hai nel primo vettore di valore da 0 - 9, la seconda cella conta quanti ne hai da 10 - 19 e così via |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 2267
|
Dovrebbe essere una cosa del genere:
Codice:
vector<int> Vet = new vector<int>(); for(int i=0; i<100;i++) Vet.push_back(rand(0,99)) vector<vector<int>> Vet2 = new vector<vector<int>>(); for(int i =0; i<10; i++){ Vet2.push_back(new vector<int>()); for(int j=0; j<100; j++){ if(Vet[j]>10*i && Vet[j]<10*(i+1)) Vet2[i].push_back(Vet[j]); } } Edit: Vedo che nel codice che hai appena postato hai usato gli array...scrivendo vettori e C++ pensavo volessi usare i vector!
__________________
Concluso con:... |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 9
|
Scusami, però non ho capito niente del tuo sorgente.. non per la sintassi, ma per le funzioni che hai usato.. mai viste! No allora ti chiedo scusa.. intendevo gli array!
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 2267
|
Si scusa. Mi sono anche accorto che nel codice sopra ti salvo i valori mentre bastava semplicemente contarli. Allora diventa più semplice:
Codice:
int* Vet = new int[100]; for(int i=0; i<100;i++) Vet[i] = rand(0,99); int* Vet2 = new int[10]; for(int i =0; i<10; i++){ for(int j=0; j<100; j++){ if(Vet[j]>10*i && Vet[j]<10*(i+1)) Vet2[i]++; } } Probabilmente potresti anche farla più efficiente in qualche modo...ad esempio utilizzando funzioni per modificare i due cicli innestati ed averne uno solo: Codice:
for(int j=0; j<100; j++){ Vet2[floor(Vet[j]/10)]++; } Edit:non serve floor...poiché essendo divisione tra interi, ritorna un intero tralasciando i decimali.
__________________
Concluso con:... Ultima modifica di Floris : 24-09-2011 alle 15:21. |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 9
|
Edit. E' giusto il mio sorgente? Ho migliorato così:
Codice:
void main() { int vet[100],vet2[10],i,x=0; for(i=0;i<100;i=i+1) { cout<<"inserisci numero"; cin>>vet[i]; } for(i=0;i<100;i=i+1) { x=vet[i]; switch (x) { case1:1 vet2[0]=vet2[0]+1 case2:2 vet2[1]=vet2[1]+1 case3:3 vet2[2]=vet2[2]+1 case4:4 vet2[3]=vet2[3]+1 case5:5 vet2[4]=vet2[4]+1 case6:6 vet2[5]=vet2[5]+1 case7:7 vet2[6]=vet2[6]+1 case8:8 vet2[7]=vet2[8]+1 case9:9 vet2[8]=vet2[8]+1 case10:0 vet2[9]=vet2[9]+1; } } for(i=0;i<10;i=i+1) { cout<<" "<<vet2[i]; getch(); } return; } Ultima modifica di biquidus : 24-09-2011 alle 15:19. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
![]() |
![]() |
![]() |
#10 | |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 9
|
Quote:
|
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 2267
|
Il case dello switch mi sembra sbagliato nel senso che case 1 sarebbe case 0, case 2 sarebbe case 1 e così via. Puoi semplificarlo usando direttamente l'argomento dello switch come indice sul vettore:
Codice:
for(int j=0; j<100; j++){ Vet2[ Vet[j]/10 ]++; } Quote:
__________________
Concluso con:... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:04.