Generazione di un array dinamico di numeri casuali
 |
A cura di Di Fusco Francesco 2009-03-10 |
Tramite la funzione malloc generiamo dinamicamente un array di numeri casuali. Dinamicamente significa che la dimensione dell'array non è nota a priori, ma viene definita durante l'esecuzione del programma:
printf("Inserisci n:");
scanf("%d",&n);
Viene poi allocato lo spazio sufficiente a contenere i numeri casuali, ovvero il numero n letto precedentemente
v=malloc(n*sizeof(float));
Se lo spazio è stato allocato correttamente, vengono generati gli n numeri casuali e memorizzati nel vettore v, nella posizione corrispondente:
for (i=0;i < n;i++)
{
dato=(float)(1+rand()%100);
*(v+i)=dato;
}
L'istruzione
*(v+i)=dato;
pone nella locazione v+i il numero casuale generato, cioè dato
Si facci attenzione all'aritmetica dei puntatori. L'espressione
(v+i)
indica che all'indirizzo base di v viene sommato non il valore di i, altrimenti avremmo una serie di indirizzi come:
v+ 0 , v+ 1 , v+ 2 , v+ 3 , ...
ma come correttamente dovrebbe essere, all'indirizzo di base v viene sommato la quantità
i*sizeof(float)
in modo tale da avere
v+ 0 , v+ 1*4 , v+ 2*4 , v+ 3*4 , ...
ovvero
v+ 0 , v+ 4 , v+ 8 , v+ 12 , ...
supponendo che sizeof(float) sia 4, ovvero che un float venga memorizzato utilizzando 4 byte.
// Creazione di un array dinamico
// Autore: Di Fusco Francesco
// Data: 09/03/2009
#include "stdio.h"
#include "stdlib.h"
int main()
{
int n,i;
i=0;
float dato;
float *v; // Puntatore ad un array di float
printf("Inserisci n:");
scanf("%d",&n);
v=malloc(n*sizeof(float));
if (v!=NULL)
printf("Spazio correttamente allocato per un array dinamico di %d elementi di tipo float\n",n);
else
printf("Errore: memoria insufficiente per allocare un array dinamico di %d elementi \n",n);
if (v!=NULL)
{
for (i=0;i < n;i++)
{
dato=(float)(1+rand()%100);
*(v+i)=dato;
}
for (i=0;i < n;i++)
{
printf("\nV[%d]=%f",i,*(v+i));
}
}
return 0;
}
|
|
|
Documenti allegati: |
din_vett2.c |