[C++] Aiuto array numeri casuali con 5 scambi casuali

docmpg
Crea un array contenente valori casuali compresi tra 1 e 9 ed effettua 5 scambi casuali.
Fatto cosi' ma non viene..
Aiuto!!!



#include
#include
#include
#include
using namespace std;

int main()
{
srand(time(NULL));
int dim;
cout<<"Inserisci dim: "< cin>>dim;
cout< int A[dim];
cout< for(int i=0;i {
A=rand()%10+1;
cout<< }
cout< for(int i=0;i<5;i++)
{
int k=rand()%dim;
int h=rand()%dim;
int temp;
A[k]=temp;
A[k]=A[h];
A[h]=temp;
}
for(int i=0;i {
cout<< }

return 0;
}

Risposte
apatriarca
Per generare un valore tra A e B il codice dovrebbe essere:
rand() % (B - A + 1) + A;

Generi infatti per prima cosa un numero casuale tra 0 e (B-A) compresi e sommi quindi A per ottenere un numero da A a B.

Nel tuo caso avrebbe quindi dovuto essere 9 - 1 + 1 = 9 e quindi:
rand() % 9 + 1

Super Squirrel
Oltre a quanto detto da apatriarca, il motivo per cui il programma ti restituisce valori "strani" è che c'è un errore nella parte relativa allo scambio. Un indizio, prova a inizializzare temp ad un certo valore >9 (non so tipo 1234) e lancia il programma.

Qualche osservazione:
- perché includi cmath?
- qual è lo scopo della seguente riga di codice: cout< - la dimensione di un array (statico) deve essere una costante.

docmpg
Infatti alla fine va tutto così:


#include
#include
#include
#include
using namespace std;

int main()
{
srand(time(NULL));
int dim;
cout<<"Inserisci dim: "< cin>>dim;
cout< int A[dim];
cout< for(int i=0;i {
A=rand()%9+1;
cout<< }
cout< for(int i=0;i<5;i++)
{
int k=rand()%dim;
int h=rand()%dim;
int temp;
temp=A[k];
A[k]=A[h];
A[h]=temp;
}
for(int i=0;i {
cout<< }

return 0;
}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.