|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2016
Messaggi: 1
|
inizializzare un array con valori casuali [C]
Buonasera,
mi si chiede di creare una funzione, di cui mi viene già dato il prototipo, che mi inserisca in un array (che è stato allocato con la malloc con un'altra funzione) dei numeri casuali compresi tra due valori a,b. Il prototipo della funzione che mi viene passato è il seguente: int iinizializzare (double ** mat, unsigned n, unsigned m, double a, double b) dove **mat è il puntatore alla matrice n è il numero di righe della matrice m è il numero di colonne a estremo superiore (per generare i numeri casuali) b estremo inferiore. (il return deve essere 0 se tutto va bene, -1 se avvengono errori) Non mi è particolarmente chiaro il primo parametro della funzione: ho provato a esplicitare meglio scrivendo nel corpo della funzione double *c[n][m]; *mat= &c[0][0]; e dopo con i soliti due cicli for ho usato la funzione rand. Il problema è che in fase di compilazioni mi da warning e non riesco a capire come poter meglio utilizzare il puntatore alla matrice. Buona serata alla buon anima che mi aiuterà |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2013
Messaggi: 392
|
Nella funzione inizializzare() devi assegnare i valori alla matrice semplicemente con mat[r][c] = valore;
Come allochi la memoria per la matrice? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2007
Città: Alcamo
Messaggi: 103
|
Esattamente nella funzione di inizializzazione che penso farai con due cicli for che iterano su due variabili i e j dovrai fare
mat[i] [j] = valore Il valore randomico compreso tra a e b potresti farlo con la funzione rand() magari usando la srand(time()) prima per rendere un po' più causali i valori... Quindi avresti srand(time()) for su i for su j mat [i] [j] = b + (rand() % (a - b)) È un idea... Non ho modo di testare ma dovrebbe funzionare Inviato dal mio ALE-L21 utilizzando Tapatalk
__________________
Notebook: Asus K52J Smartphone: Huawei P8 Lite |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2013
Messaggi: 392
|
La rand() ritorna degli interi.
Dovrebbe usare una funziona così: Codice:
double rand_double(double a, double b)
{
double r = (double)rand() / RAND_MAX;
return (a + r * (b - a));
}
Codice:
double **mat;
const unsigned N = 3;
const unsigned M = 5;
unsigned c, r;
if ((mat = (double **)malloc(N * sizeof(double *))) == NULL) {
printf("malloc() failed!\n");
return 1;
}
for (r = 0; r < N; r++) {
if ((mat[r] = (double *)malloc(M * sizeof(double))) == NULL) {
printf("malloc() failed!\n");
return 1;
}
}
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2007
Città: Alcamo
Messaggi: 103
|
Ok hai ragione non avevo considerato il fatto che la matrice fosse di double.
Inviato dal mio ALE-L21 utilizzando Tapatalk
__________________
Notebook: Asus K52J Smartphone: Huawei P8 Lite |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:41.




















