Newsgroup: it.comp.lang.c
Titolo: Visual C++ : Nuova Pagina?

Ho un piccolo , stupidissimo problema...
In pratica , io uso il Visual C++ e per pulire lo schermo dovrei usare
un printf("\f");
solo che il \f (come dice la guida del resto) non influisce su quanto
appare sullo schermo ma va ad agire sulla stampante o qualcosa del
genere. Ma mi ricordo che con un altro compilatore , effettivamente
puliva lo schermo.
In pratica stampa una sorta di croce di Ankh o un altro simboletto del
genere.. C'e' qualche altro modo per pulire lo schermo?
Per ora ci ho girato intorno con un system("cls"); ma mi pare un po'
strana come soluzione questa.. e mi meraviglio che non ci sia un altro
modo..
Mi chiedo perche' mi debbano capitare 'sti errori stupidi..
-- 
      Adalberto Simeone -==(U.D.I.C.)==- Avenger Dragon
          E-Mail: 
fn5...@flashnet.it
  UIN: 1414193
                 SETI at Home Project Member

On Thu, 22 Jul 1999 17:18:15 GMT, 
fn5...@nospam.flashnet.it
 (Avenger
Dragon) wrote:
Ho un altro problema stupidissimo..
(quella della nuova pagina non l'ho ancora risolto (tranne che con il
CLS)..
Devo generare dei numeri "ad occhio"..
Ci sono le istruzioni srand e rand.
Ma nessuna delle due ha dei limiti... cioe' devo dire per esempio di
estrarre dei numeri da 1 a 100.. come si fa?
Ho trovato l'istruzione RAND_MAX (e credo sia piu' o meno quello che
faccia al caso mio) , ma come l'assegno?
Nel senso se faccio RAND_MAX=100 , mi dice che non va bene :-)
Inoltre nel corso del programma dovrei ridefinire il valore massimo
piu' e piu' volte..
Ok potrei fare questo ritentando finche' non ci si riesce.. ma
potrebbero volerci ore :-)
Ahh.. i bei tempi del randomize timer...
quindi qualcuno conosce una funzione che faccia estrarre un numero
random entro dei limiti definiti?
Grazie...


RAND_MAX è una costante e rappresenta il valore massimo che rand() può
restituire.
Ma non voglio rovinarti il piacere della scoperta quindi non ti dico come
usarla ;)
ciao.
_sng_

usarla ;)
OK , ma visto che srand sceglie il seme dei numeri pseudo casuali
mentre rand e' di tipo void quindi non ci si possono passare dei
parametri per limitare in qualche modo i range dei valori..
Presumo che sia quindi un comando completamente diverso?
Solo che la guida in linea e' una giungla.. :-)))
Qualche suggerimento?
L'unico modo che mi viene in mente e' di far ritentare l'estrazione
finche' non capita un numero compreso tra il limite..
Ma se come presumo il massimo dei valori estraibili si aggirano su
qualche miliardo (e forse anche piu'), un range da 1-100 potrebbe
anche volerci qualche secondo prima che esca..
Per la nuova pagina.. nessuno sa? Possibile che bisogni per forza
ricorrere al CLS del dos?


 genere.. C'e' qualche altro modo per pulire lo schermo?
Temo che l'unico modo standard sia di stampare tante righe a vuoto
quante ne contiene lo schermo in modo che quelle scritte scorrano man
mano fuori dal video.
EMG

 faccia al caso mio) , ma come l'assegno?
RAND_MAX non è un'istruzione ma una semplice costante. Non puoi
modificarla (vedi sopra).
EMG

 modo..
[...]
Per quel che ne so, non esiste un modo portabile per pulire lo schermo;
quello che hai indicato tu ( system("cls") ) funziona sotto DOS, per
Unix-Linux devi usare system("clear") .
Ciao, Luca.
-- 
 Reply to 
luca....@tiscalinet.it
 UIN : 43385135


Va bene, cerco di essere più esplicito:
RAND_MAX è una costante che puoi utilizzare considerando che
x / YOUR_MAX = rand() / RAND_MAX .
in altre parole
rand() / RAND_MAX <= 1
Almeno questo è quello che faccio io.
Per quanto riguarda il cls non come so aiutarti (la mia cultura informatica
è abbastanza limitata) nei pochi programmi che ho scritto in stile C facevo
scorrere lo schermo quanto bastava :)
Magari qualcun' altro ci illumina.
Bye _sng_

                rand() / (RAND_MAX / N + 1)
Prima di tutto , dove si possono trovare queste FAQ?
Cmq.. stavo appunto provando ad usare questa in un modo simile :
x=rand()/(RAND_MAX/100+1);printf("\n%d\n",x);
Ed escono effettivamente dei numeri fra 1 e 100 (almeno credo)..
Solo che... NON SONO CASUALI!!!!!!!!! :-)
Nel programma in esame ne ho fatti 4 di seguito (quattro
X=rand...printf , etc.) per vedere che numeri uscivano.
E mi e' uscita la seguente serie 0 , 56 , 19 , 80.
Ho notato che il primo numero "estratto" e' sempre 0 (ma il +1 non
dovrebbe farlo partire da 1? Oppure dovrei metterlo /101+1 per avere
un range 1-100?).. se rifaccio eseguire questa parte del programma
dalla stessa istanza (senza riavviarlo) escono altri numeri casuali.
Il problema e' che se faccio partire di nuovo il programma , mi esce
UGUALMENTE 0 56 19 e 80!!!!
Se uso un srand(qualcosa) prima dell'x=rand() , etc. esce la stessa
serie di numeri sia che faccia rieseguire quella parte del programma ,
sia che faccia rieseguire completamente l'intero programma.
Se uso srand( (unsigned)time( NULL ) ); che dovrebbe inizializzare il
seme sull'orario , cosi' dovrebbe essere sempre diverso... non cambia
nulla (naturalmente ho incluso time.h) ed escono sempre gli stessi
numeri sia in un modo che nell'altro.. 
Fa praticamente lo stesso effetto di una chiamata ad srand.
Ora tenendo conto che io ho bisogno di
1) Estrarre diversi numeri molte volte e con diversi range
2) I numeri devono essere veramente casuali e non ripetersi MAI
Come devo fare????
Non riesco a credere che il basic col suo randomize timer possa
riuscire dove un linguaggio col C non puo'.
Non ditemi che il C non puo' fare una simile fesseria... :-)
Provando invece il rand() / RAND_MAX <= 1 suggeritomi da sng , mi esce
sempre 1 (anche se metto <= 100 (quello che mi interessa appunto)...
Cosa devo fare? Sto uscendo pazzo.. se non riesco a fare questo , non
posso procedere con il resto (si basa tutto su 'sto rand).
Ora capisco che siano numeri pseudocasuali , ma in questo modo mi
paiono praticamente decisi in partenza.... mentre il basic mi pareva
MOLTO piu' random (mai osservati dei numeri ripetersi)..



Ho il vago sospetto di essere stato frainteso:
'<=' non è uno strano operatore che passa dei parametri !!
rand() / RAND_MAX <= 1 è una semplice relazione logica, sempre vera per
definizione (di RAND_MAX), le cui implicazioni mi sembrano più che evidenti;
mai più credevo che tu cercassi di usarla in modo cut&paste" !!!
Certo così come l'ho scritta è anche un'espressione C valida, ma il suo
valore è il risultato di un confronto booleano che restituisce true (1)
piuttosto che false (0) ... è come se tu dicessi :" è vero che se estrai un
numero con rand() e lo dividi per RAND_MAX, il risultato è minore o uguale a
1 ?" ... in questo caso la risposta dovrebbe essere sempre true (e lo sarà
per qualsiasi Rvalue >= 1).
Quello che volevo dire è che se ti interessa una funzione come la 'rnd' del
VB (dove 0<=x<1) la puoi ottenere considerando la relazione che ti ho
suggerito ... che poi è la stessa cosa che ti ha detto EMG !!
Per la srand((unsigned)time( NULL)) dovrebbe essere molto simile al
RandomizeTimer VB, probabilmente succede che la chiami troppo di frequente
per cui ottieni sempre lo stesso seme ... chissà .
Ciao _sng_

 MOLTO piu' random (mai osservati dei numeri ripetersi)..
I generatori di numeri casuali inclusi nei linguaggi sono tutti molto
simili (e di qualità non eccelsa).
EMG

mai piů credevo che tu cercassi di usarla in modo cut&paste" !!!
Eheh , in realta' mi sembrava uno dei tanti modi per usare il
Rand_Max.. Cioe' per dirti..
se rand_max e' 32767 (mi sembra) e l'operazione e'
(RAND_MAX/100+1) , allora a rigor di logica dovrebbe venire 328,67 :-)
Invece di settare una sorta di range 1-100.
Quindi credevo che quel <= fosse un modo come un altro per settare il
range di valori (chesso' , minore o uguale a 100 appunto).


ripetibilità degli esperimenti.
E vabbe' , ma a me non interessa , in ogni caso ho risolto coll'srand
settato sul timer (ora capisco il perche' del Randomize Timer :-)))) .
Solo che il primo num. e' sempre uguale.. Per cui faccio prima
estrarre un numero , all'inizio del programma , mentre tutti gli altri
n. estratti successivamente vengono in modo abbastanza random..
In ogni caso ho visto un po' su internet , cercando qualcosa di utile
, che dietro questa "fesseria" si cela addirittura un problema molto
piu' grosso..
