PDA

Visualizza la versione completa : [C] Generare numeri casuali reali in una matrice


Bombonera
24-07-2014, 11:23
Ciao a tutti.

Devo generare una matrice di numeri casuali che vanno da 0 a 1. Il numero delle righe e colonne è immesso dall'utente e non deve superare il numero 10.

ESEMPIO:

Inserisci righe e colonne

3
3

la matrice:

0.2 0.5 0.2
0.6 0.5 0.6
0.4 0.7 0.2

Ho messo solo una cifra dopo la virgola per motivi di semplicità.

Non so come si fanno a generare questi numeri. Grazie mille.

Questo è il programma che ho fatto. Non capisco perché mi escono tutti 0

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define MAX 10


void genera(float mat[MAX][MAX], int rig, int col);


int main(void) {


float ma[MAX][MAX];


int ri, co;


printf("Inserisci numero di righe e colonne\n");
scanf("%d %d", &ri, &co);


genera(ma, ri, co);


return 0;


}


void genera(float mat[MAX][MAX], int rig, int col) {


int i, j;


srand( time (NULL));


for(i = 0; i < rig; i++) {
for(j = 0; j < col; j++) {
mat[i][j] = (float) (rand() % 2);
}
}


for(i = 0; i < rig; i++) {
for(j = 0; j < col; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
}

MItaly
24-07-2014, 11:28
http://www.cplusplus.com/reference/cstdlib/rand/

Bombonera
24-07-2014, 11:33
non vedo però comi si generano i numeri con la virgola

MItaly
24-07-2014, 11:36
Non c'è nulla di già pronto, ma lo puoi ricavare facilmente, dato che sai qual è il range dei numeri generati da rand()...

Bombonera
24-07-2014, 11:45
Non c'è nulla di già pronto, ma lo puoi ricavare facilmente, dato che sai qual è il range dei numeri generati da rand()...

se faccio

rand() % 6

il range è tra 0 e 5

ora se dichiaro una matrice di tipo float

e faccio

rand() % 6

mi dovrebbe dare anche i numeri con la virgola ?

MItaly
24-07-2014, 11:48
No, perché dovrebbe farlo? rand() restituisce interi compresi tra 0 e RAND_MAX, i numeri decimali non li fai certo spuntare usando l'operatore modulo. Ragiona un momento: come puoi fare per ottenere numeri decimali tra 0 e 1 dall'output di rand()?

Bombonera
24-07-2014, 11:50
hai ragione che stupido, quello è l'operatore modulo che funzione infatti solo con interi.

Bombonera
24-07-2014, 11:53
non lo so proprio

Bombonera
24-07-2014, 11:58
penso centra qualcosa l'operatore della divisione

Bombonera
24-07-2014, 12:20
Ho fatto

rand() \ RAND_MAX

e mi escono numeri con la virgola

Loading