|
|||||||
|
|
|
![]() |
|
|
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 16: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 16: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 16: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: 06:38.




















