Newsgroup: it.comp.lang.c
Titolo: riempimento array con la funzione rand()

Salve,
sto avendo un problema a riempire un array di tipo char con valori
casuali. L'algoritmo è il seguente:
#include <stdio.h>
#include <stdlib.h>
int main() {
	int n,i,j;
	char a[15],c;
	n=15;
	for (i=0; i<n; i++) {
        c=rand();
		a[i]==c;
		printf("a(%d)=%c \n",i,a);
		printf("c=%c\n",c);
}
system ("PAUSE");
return 0;
}
Quando faccio la stampa della variabile c mi escono i numeri casuali
che genera rand(), invece se stampo il vettore (a cui assegno i valori
di c), mi esce sempre lo stesso valore (P, che tra laltro non è mai
uscito per la variabile c).
Qualcuno mi sa dire in cosa sto sbagliando?

 ... Qualcuno mi sa dire in cosa sto sbagliando?
Si`, qualcuno sicuramente sapra` dirtelo.
printf("a(%d)=%c \n",i,a[i]);


Grazie! Funziona.....non lo avrei mai trovato, anche xchè le altre
volte è funzionato mettendo solo il nome, senza indice

 Qualcuno mi sa dire in cosa sto sbagliando?
ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

Cybertoldo wrote:
etc.etc.
a quello che ha scritto giustamente Cybertoldo vorrei aggiungere
che in un programma con delle chiamate a rand()
anche una chiamata iniziale a srand non ci starebbe male...
g.

nano bagonghi ha scritto:

hai perfettamente ragione,
mi e' sfuggita al controllo
Ciao



scusate, ma a cosa serve la chiamata a srand se cmq rand funziona?
Cmq ho corretto in parte il codice, ma adesso mi sono trovata in un
altro problema: nell'array creato con i caratteri casuali devo trovare
il massimo, usando la tecnica divide et impera con variante casuale (e
cioè non dividendo a metà l'array, ma fino a un numero generato
casualmente), con chiamata ricorsiva. Come faccio a chiamare
ricorsivamente la funzione dal primo elemento dell'array a quello che
genera casualmente?
#include <stdio.h>
#include <stdlib.h>
/*int max(char ,int )*/
int main() {
	int n,i,j;
	printf("Inserisci il numero degli elementi:\n");
	scanf("%d",&n);
	char a[n];
	for (i=0; i<n; i++) {
		a[i]=rand();
		printf("a(%d)=%c \n",i,a[i]);
}
system ("PAUSE");
return 0;
}
int max(a, n)
 int numero_casuale;
 char max_elem;
 numero_casuale=rand()%(n+1);
 if n=1 max_elem=a[0];
 else if n=2 {
      if a[0]>a[1]
      max_elem= a[0];
      else
      max_elem=a[1];
      }
 else {
 max_elem=max(a,numero_casuale)
...
....
....

 scusate, ma a cosa serve la chiamata a srand se cmq rand funziona?
serve per minimo 2 motivi:
1) su diversi sistemi/compilatori, il seme iniziale dei numeri casuali e'
fissato. Quindi se fai girare 2 volte il programma viene
generata la stessa sequenza casuale e questo nella maggioranza
dei programmi che si basano sulla casualita' non e' ben visto...
2) viceversa, poniamo che il tuo compilatore generi
ogni volta che il programma parte un seme diverso e quindi
una sequenza probabilmente diversa.
Per motivi di debugging e in generale per essere capaci
di ripetere una sequenza casuale (per esempio per generare
due volte la stessa sequenza di 100 milioni di dati per un
esperimento senza doverli memorizzare.
nel primo caso puo' essere bastevole aggiungere un
#include<time.h>
e un
srand(time(0));
una volta sola all'inizio del programma.
dove time(0) di solito restituisce il numero di secondi trascorsi
dal primo gennaio 1970 e quindi in due chiamate
successive di un programma (se questo programma e' invocato
manualmente da un utente...) di solito restituisce due valori diversi.
Se il programma viene chiamato molte volte al secondo ci
sono altri sistemi piu' sofisticati che si possono usare.
nel caso che uno voglia poter ripetere la sequenza puo'
adottare almeno 2 strategie semplici, per esempio
invocare srand() con un seme casuale scelto dall'utente,
oppure usare un meccanismo tipo quello col time(0), ma
memorizzando da qualche parte il seme casuale utilizzato
in modo che se necessario sia possibile ripetere la sequenza.
ciao,
g.


Ora ho capito, grazie mille!