Newsgroup: it.comp.lang.c++
Titolo: Random

innanzi tutto ...salve a tutti.
Avrei un consiglio da chiedervi:
Premessa: sto utilizzando un comp. c/c++ Bloodsheed, e ho incontrato questo
problema:
non conosce nè random , ne' randomize, solo rand.
Come elimino il prob.(visto che ha me serve la randomize xche' se no sto
benedetto win98 genera sempre i stessi numeri)?
Grazie
Ciao
Buon Natale
Buon Anno
Buon S.Stefano
Buon 31 dicembre
Giampiero

 benedetto win98 genera sempre i stessi numeri)?
Infatti non ci sono :)
Devi usare srand per inizializzare una nuova sequenza, e rand per ottenere
un nuovo numero.
Classico esempio rand.c :
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
   srand( (unsigned)time( NULL ) );
   for(int  i = 0;   i < 10;i++ )
      printf( "  %d\n", rand() );
}

void main( void )
int main()
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 int main()
per quel che conta in un esempio del genere...
Odio queste puntualizzazioni a tutti i costi !

Odio queste puntualizzazioni a tutti i costi !
Impara le regole del linguaggio, prima di postare gli esempi.


 Impara le regole del linguaggio, prima di postare gli esempi.
La presunzione non e' mai troppa nel mondo dei NG...

La presunzione non e' mai troppa nel mondo dei NG...
Come la presunzione di insegnare cose sbagliate con esempi sbagliati ?


La presunzione non e' mai troppa nel mondo dei NG...
Questa non è affatto presunzione.
Ammettiamo che il Sig. Laforgia è un po' pignolo - senza offesa - sullo
standard ma ha ragione; se la main deve essere int perché non definirla
tale?. Non mi sembra che si scriva qualche keywords in più dalla rispettiva
void main.
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
J++, la copiatura più riuscita.
Windows, il più instabile.
Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
OutlookExpress, scandali su scandali.
 

 Come la presunzione di insegnare cose sbagliate con esempi sbagliati ?
No guarda... Mi sa che hai sbagliato persona...
Io non pretendo proprio nulla...
Sei tu magari che pretendi troppo dalla tua pignoleria come dice il ragazzo
dell' altro post....
Se adesso mi vieni a dire che l' esempio e' sbagliato perche' c'e' void al
posto che int non so
proprio che cosa pensare.......
Ad ogni modo se mai leggessi un libro di C++ come "C++ effective
ObjectOriented Software Construction"
ti accorgeresti che tutti gli esempi del libro sono riportati come :
main()
{
}
Devo supporre che anche Kayshav Dattari ha scritto tutto il libro pieno di
esempi sbagliati...
O forse si deve imparare anche lui le basi del linguaggio prima di scrivere
libri ?
(tanto per parafrasare quello che hai detto tu nel post addietro)
Bah...

non conosce nè random , ne' randomize, solo rand.
"random" e "randomize" non sono standard. La chiamata standard
per inizializzare il generatore di numeri pseudocasuali e' "srand".
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Ho scritto _chiaramente_ per quel che conta *IN* un esempio del genere
Io credo che se si esegue posting di codice si debba cercare di
scrivere cose corrette.
Vuoi scrivere la dichiarazione di main ? ... scrivila giusta...
oppure, visto che nessuno ti obbliga, non scriverla per nulla e
fai capire che si tratta di un *frammento* di codice.
Io trovo deprecabile il posting di programmi completi o funzioni
che contengono errori di sintassi... ma usare "void main()" e'
anche peggio ... perche' depistare i principianti su qualcosa che non
tutti i compilatori riescono a intercettare ?
A che pro ?


esempi sbagliati...
Non so se quando e' stato scritto questo libro di cui parli era
ammessa la dichiarazione implicita del return type per le funzioni
come e' ammessa (ma deprecata) in C.
E' ormai qualche anno (da quando cioe' esiste uno standard C++)
che omettere il tipo del valore di ritorno in un programma C++ e'
un *errore di sintassi* e se veramente il libro usa questa
dichiarazione allora il libro e' pieno di errori (o comunque non
fa riferimento al C++ standard).
Questo non toglie che il libro (che non conosco) possa dire o
meno un sacco di cose buone e giuste.
Sulla dichiarazione di main pero' sbaglia. Punto.
HTH


 Sulla dichiarazione di main pero' sbaglia. Punto.
Ok. Mi dici un compilatore che genera errore con void main(void) ?
(errore, non warning)
Cmq conludo qua il thread abbastanza inutile e leggero...

 tutti i compilatori riescono a intercettare ?
Il fatto e' che cio' che ha postato non contiene errori di sintassi,ma
soltanto una definizione non conforme allo standard,per cui non mi sembra
il caso di aggredire e scoraggiare interventi e posting di esempi per tali
banalita',e non credo neppure che cio' sia fuorviante per i
neofiti,perche' se si ha un minimo di  buon senso si  capisce che le
persone sbagliano,gli autori dei migliori libri sbagliano e  che il
linguaggio non si impara sul NG,che sens'altro arricchisce le conoscenze
di base di un programmatore anche in questi casi,ma studiando su piu' di
un buon manuale e facendo molta pratica.
--
Ivan Molella
__LINUX__ the choice of the __GNU__ generation
icq# 97960484

un buon manuale e facendo molta pratica.
Hmmm... stai proponendo di non fare piu' commenti su codice errato o
non portabile che viene postato qui sul newsgroup ?


> >Ho scritto _chiaramente_ per quel che conta *IN* un esempio del genere
Eccolo, l'esempio:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
   srand( (unsigned)time( NULL ) );
   for(int  i = 0;   i < 10;i++ )
      printf( "  %d\n", rand() );
}
Mi spiace, ma l'esempio e' pessimo dal punto di vista didattico.  A
parte l'infame "void main", e nonostante sia stato postato su
comp.lang.c++ si tratta di puro C a parte la dichiarazione "int i"
all'interno dell'istruzione "for" che, nonostante ISO-IEC 9899:1999 la
abbia introdotta nel nuovo standard C, rimane, almeno questa, di
derivazione C++.
Da notare poi che gli headers inclusi sono col .h in stile C, che il
cast a unsigned di time() non e' necessario, che l'uso della macro
NULL e' deprecato in C++; per non parlare della stampa attraverso
printf().  Ringrazia i tuoi critici che non ti hanno fatto notare
nulla del genere :-)
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
A C++ exception is when the code gets in trouble and says:
"Beam me up, Scotty!".

 
http://www.netservers.com/~agriff
--


Ringrazio tutti per la partecipazione al thread e per i consigli, ho
imparato qualcosa in piu'  e quindi rinnovo i miei auguri:
Buone feste
Giampiero

Odio queste puntualizzazioni a tutti i costi !
Sbagli, errori di questo tipo possono far perdere molto tempo.
Paolo

La presunzione non e' mai troppa nel mondo dei NG...
La presunzione e` sempre troppa!
Paolo

persone sbagliano,
Non e` un valido motivo per non far notare l'errore. D'altronde
questo e` un NG sul C++ standard.
D'altronde si impara molto anche seguendo i NG.
Paolo

tali,senza mettere alla gogna nessuno.
Non mi pare che si sia messo qualcuno alla gogna. Purtroppo il testo
non rende le sfumature vocali, a maggior ragione quindi si dovrebbe
pensare un pochino di piu`... soprattutto quando si posta codice.
Paolo

esempi sbagliati...
a) Bisognerebbe vedere la data di pubblicazione...
b) Perche` no? Nessuno e` perfetto...
Paolo

Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
???
Dimentichi poi VC++... il meno standard dei compilatori C++
e quello con i messaggi di errore piu` criptici o del tutto insensati.
Paolo

Ma guardiamo anche il contesto suvvia !!!
Onestamente ritengo che e` proprio il constesto
a richiedere tali puntualizzazioni.
Paolo

 (errore, non warning)
kronos:/tmp$ cat p.c
void main () {
}
kronos:/tmp$ g++ -Wall p.c
p.c:1: warning: return type for `main' changed to `int'
g++ non da errore perche` cambia automaticamente il return type
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
The trouble with computers is that they do what you tell them, 
not what you want.
D. Cohen

Paolo
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
J++, la copiatura più riuscita.
Visual C++, il meno standard dei compilatori C++.
Windows, il più instabile.
Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
OutlookExpress, scandali su scandali.
 

E non aderisce allo standard!
In effetti però quello che dice Mario é giusto. La stragrande
maggioranza dei compilatori ne si infischia completamente del tipo
restituito da main, anche se effettivamente si tratta di una
violazione dello standard.
Nei programmi scritti da me comunque void main(void) non se ne sono
mai visti.
Il Ghenio
-----
E'più oscuro del crepuscolo, é più rosso del sangue,
in nome della pace e della giustizia faccio appello a
tutti i poteri più remoti dell'oscurità, perché mi
aiutino a distruggere i miei nemici e tutti coloro
che saranno tanto sciocchi da ostacolarmi. FULMINE ROSSO!!
(Slayers)
-----

e quello con i messaggi di errore piu` criptici o del tutto insensati.
Però piace ad Alex Martelli.


 questo e` un NG sul C++ standard.
Non ho letto il manifesto del NG, ma devo supporre che se qua
si parla solo ed esclusivamente di C++ standard questo NG ha ragione
di esistere solo da pochissimo tempo, il che non mi pare proprio cosi'.
Perche' non chiamarlo iclc++.standard ?
Traffico : qualche messaggio al mese...
Tanto di compilatori veramente standard ce ne saranno 1 o 2, se mai
esistono...
A che serve nella vita programmativa reale ?
Bah...

Però piace ad Alex Martelli.
Veramente anche a me sembra un ottimo prodotto. C'e' qualche problema
sull'aderenza allo standard ma, stando un po' attenti, si riesce a
lavorare scrivendo codice portabile e utilizzando gli ottimi strumenti
che offre (la portabilita' e' anche migliorata un poco con il 6.0).
Io pero' intendo VC++ utilizzato come compilatore C++ "puro", senza
cioe' l'uso dei Wizard. Personalmente trovo i Wizard e il loro uso una
pessima idea.


A che serve nella vita programmativa reale ?
Dipende cosa intendi con vita programmativa reale. Hai mai
dovuto scrivere codice portabile ?


 A che serve nella vita programmativa reale ?
La (vastissima) parte standard del C++ è qualcosa con cui devi aver a
che fare (e conviene averci a che fare) con qualunque compilatore e per
qualunque sistema tu stia sviluppando. Che senso avrebbe scegliere un
linguaggio e poi ignorarne tutta una serie di (importanti) aspetti?
EMG

 Non discuto,ma c'e' modo e modo di far notare le imprecisioni.
Soprattutto c'e' modo e modo di rispondere a chi corregge le
imprecisioni.
Ciao,
Nicola

 Bah...
Perche' non cerchi un newsgroup piu' vicino ai tuoi interessi?
Ciao,
Nicola

che offre (la portabilita' e' anche migliorata un poco con il 6.0).
Io infatti non ho detto che é brutto(anche se preferisco il Borland
C++ Builder), certo é che ha qualche problemino di troppo. Per esempio
in uno dei pochi progetti per cui l'ho usato mi dava un assurdo errore
sull'ultima parentesi graffa di un file cpp che conteneva
l'implementazione di una classe da me scritta. Ovviamente il codice
non era affatto sbagliato, visto che l'avevo compilato senza problemi
su almeno tre compilatori diversi.


 Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
Questa potrebbe essere la migliore barzelletta che ho sentito: tra tutti i
programmi bacati, ma importanti perchè hanno rivoluzionato il mondo
informatico, (Windows, Office) che ha fatto la Microsoft, l'unico decente
sarebbe il Visual Basic... quel rozzo di linguaggio dove devi fare tutto come è
stato preimpostato e che dopo 50 righe non si capisce già più niente...

 pessima idea.
Perche' parli cosi dei Wizard?
Fausto



Mi associo alla domanda... per caso hai 'problemi di utilizzo'???
Luc.

stato preimpostato e che dopo 50 righe non si capisce già più niente...
Nemmeno in C++ dopo 50 righe non si capise più niente. Dipende sempre da
che stile ha adottato l'altro programmatore.
Cmq la mia non vuole essere una guerra di religione, tnato sono convinto
che si possa scrivere codice sporco in qualsiasi linguaggio che si
utilizza.
PS: Forse ti sei dimenticato che il goto è stato messo da parte dal VB
analogamente a quanto è avvenuto per il C/C++.
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
Visual C++, il meno standard dei compilatori C++.
J++, la copiatura più riuscita.
Windows, il più instabile.
Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
OutlookExpress, scandali su scandali.
 

On Wed, 20 Dec 2000 17:18:14 +0100, Luc <TOGL...@katamail.com-TOGLI>
wrote:

Se intendi malattie come la NWHS (non-written-here-syndhrome) oppure
la PLFAALCD (perche'-lasciar-fare-ad-altri-le-cose-divertenti)
come la chiama Nicola ... forse un po' ne soffro.
I wizard sono secondo me un argomento complesso. Io sono un tifoso
dei generatori automatici di codice, di documentazione e di quanto
e' generabile. Se esiste una possibilita' di automatizzare io
sono sicuramente un fautore dell'automazione.
Ho scritto (e usato) generatori di maschere, generatori di DDL,
generatori di trigger di integrita' referenziale, generatori di
codice transazionale per servizi standard, generatori di programmi
di verifica.
Diverso e' pero' il discorso di wizard se questi vengono utilizzati
per generare codice che non si comprende a fondo...
Ho visto gente che usa wizard che generano tonnellate di linee C++
che sottointendono una logica non banale e che non solo non
comprendono le linee generate nei loro dettagli, ma che nemmeno
capiscono il disegno generale.
Semplicemente digitano un nome qui, un testo la', scelgono un font...
et voila'... un favoloso programma Windows che fa di tutto e di piu'
(solo che non hanno la minima idea di come faccia a funzionare).
Citando a memoria una frase sentita da un "guru" VC++ in una
convention in cui e' intervenuto anche Bill Gates in persona...
"ora basta richiamare il wizard, modificare questa opzione... 
magia ... lui va a modificare tutti i miei sorgenti (non capiremo
mai esattamente cosa ha fatto - risata generale -) ... ed ecco che
la nuova funzionalita' e' stata integrata; in meno di due minuti"
Io semplicemente non credo che su quel punto ci sia nulla da ridere...
Secondo me quando si e' di fronte ad un programma che funziona ma
di cui "l'autore" (se questo e' il termine corretto) non comprende
i meccanismi si sta velocemente avvicinando una sciagura... il
terribile (ma inevitabile) momento di quando il programma smettera'
di funzionare. Chi non comprende come un programma funzioni ha ben
poche possibilita' di trovare perche' un programma *non* sta
funzionando. Spesso si finisce con il curare i sintomi (piu' visibili
delle cause) con delle pezze... poi le pezze sulle pezze... sino
al collasso.
Si arriva a del software cosi' rabberciato che i programmatori
vivono nel terrore che gli venga richiesto di fare modifiche.
Sembra che il programma abbia acquistato un suo potere decisionale
e si procede nelle varianti "per tentativi" provando e sperando
(spesso invano) che tutto funzioni.
Il caso di librerie oppure di altre modalita' di innalzamento del
livello logico come interpreti o compilatori e' a mio parere
completamente diverso da un wizard passivo.
Esiste in questi casi un confine netto fra quanto e' competenza
del programmatore e quanto e' competenza della libreria.
Un wizard passivo invece genera uno scheletro e poi se ne disfa
lasciando la responsabilita' di tutto il resto (comprese eventuali
varianti allo scheletro se necessarie) nelle mani del programmatore.
Sui wizard attivi (ovvero su generatori che permettono in qualunque
momento di cambiare le carte in tavola e "rigenerare" senza che si
perda nulla di quanto e' stato messo dopo la prima generazione) il
discorso e' un po' diverso. In quel caso infatti le responsabilita'
sono un po' piu' delineate e ci si avvicina ad una specie di uso
di librerie.
Anche in questo caso resto convinto che una comprensione di cosa
viene generato sia importante.
Ho trovato il realta' che poca gente la pensa come me ... quando ho
pero' letto il libro "The Pragmatic Programmer" mi sono sentito un
po' meno solo su questo punto (capitolo 6; "Evil Wizards")
Riassumendo io non sono contrario ai wizard in genere... sono
contrario ai wizard che generano codice che non comprendo. Quando
(non dico "se" ma "quando") il programma mostrera' un bug, oppure
sara' richiesta una modifica il codice che era "del wizard" sino
ad un minuto prima improvvisamente diventera' mio... e mia sara'
la responsabilita' di portare avanti la cosa.


analogamente a quanto è avvenuto per il C/C++.
Non mi risulta che il goto sia stato messo da parte nel Visual Basic,
anzi, molti lo usano ancora credendo peraltro di far bene.


stato preimpostato e che dopo 50 righe non si capisce già più niente...
La simpatia che provo verso il noto linguaggio Micro$oft e molto,molto
bassa, ma non credo che le tue parole lo descrivano in modo adeguato.
Pensa che si tratta di un linguaggio talmente permissivo che si può
addirittura dichiarare una variabile stringa ed usarla come fosse un
intero. Provate ad esempio a scrivere qualcosa di questo tipo:
Dim s as string
s="12345"
s=s+1
uno che viene dal C o dal C++ sicuramente non farebbe mai una cosa di
questo tipo, ed invece con il VB non solo non da errore ma funziona.


anzi, molti lo usano ancora credendo peraltro di far bene.
Nelle istruzioni di gestione degli errori no, ma io mi riferivo al
sintetico goto etichetta.
Inoltre per messo da parte intendevo "evitare di utilizzarlo".
Cmq non è solo una pratica del VB, pensa che una volta mi avevano dato da
leggere un codice che doveva valutare il valore di una variabile ed
eseguire delle istruzioni di ouput diverse per ogni valore ed al posto di
usare switch o un else if il programmatore aveva usato 8 goto!!!
Come puoi vedere esistono in tutti i linguaggi quelli che vogliono
complicarsi la vita.


s=s+1
Forse dovresti considerare che la stringa contiene un valore convertibile
in un int.
Cmq hai ragione te, questa è una scorciatoia presa da molti ma io
preferisco usare le funzioni di conversione messe a disposizione dal
linguaggio.
Io aggiungerei anche che il VB è popolare tra quelli che non sanno
programmare, quindi è facile che imparino cattivi stili.
Personalmente ho avuto esperienza in altri linguaggi prima di entrare in
contatto con VB e devo dire che con qualche accortezza è un ottimo
strumento. Indubbiamente ha alcuni svantaggi - e molti bug che devi tentate
di non imparare -, ma qual è il linguaggio perfetto?  
 

anzi, molti lo usano ancora credendo peraltro di far bene.
Il fatto che molti lo usano non significa che sia indispensabile: io
ho realizzato diversi prog senza MAI usarlo; del resto il goto c'č
anche in C++, ma non per questo il C++ č un brutto linguaggio.
Cmq stiamo scivolando nell'OT, direi di finirla qua.
Anto

complicarsi la vita.
E'vero, ma é altrettanto vero che ci sono linguaggi(Visual Basic) che
tollerano bene la cattiva programmazione ed altri(C++ o C) che la
scoraggiano chiaramente. Il goto comunque é solo un esempio, perché
credo di aver visto roba ben peggiore in VB, come ad esempio gente che
utilizzava dei ListBox nascosti per fare ciò che in C++ si realizza
con un semplice std::vector.
Il Ghenio
WINWORD.EXE - ERRORE DI APPLICAZIONE
l'istruzione a "0x3017ff27"ha fatto riferimento alla
memoria a "0x02a3143c".La memoria non poteva essere 'read'.

con un semplice std::vector.
Invece ho visto gente in C++ a cui piaceva dichiarare 15 variabili float
perché gli array consumano in prestazioni e sono troppo complicati da
capire!!!
PS: Penso che sia ora di darci un taglio per stiamo solo facendo una guerra
di religione tra i due linguaggi.
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
Visual C++, il meno standard dei compilatori C++.
J++, la copiatura più riuscita.
Windows, il più instabile.
Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
OutlookExpress, scandali su scandali.
La classifica degli "amici" coglioni:
Stefano Zanchi, il miglior lamer del mondo.
 

Veramente anche a me sembra un ottimo prodotto. 
Onestamente odio il suo voler imporre alcune regole di
indentazione, ho avuto non pochi antipatici problemucci a causa
delle sue inadempienze rispetto allo standard e un a volta compilando
un programma mi ha reso la macchina inutilizzabile... ho dovuto
reinstallare tutto il sistema.
Ci sono diversi strumenti utili, ma onestamente non mi servono a
molto se poi le funzionalita` piu` importanti non sono svolte
correttamente.
Paolo
-------------------------------------------
  Paolo Marotta
 
http://web.tiscalinet.it/paolo_marotta/
-------------------------------------------

A che serve nella vita programmativa reale ?
A realizzare applicazioni aderenti alle specifiche del committente.


 da evitare.
E questo chi l'ha detto? typedef ha almeno due utilizzi fondamentali,
ovvero all'interno di classi template per introdurre tipi dipendenti dai
parametri, ed in generale per fattorizzare i tipi dipendenti dalla
piattaforma, ed un ulteriore utilizzo ragionevole, per rendere
intelleggibili dichiarazioni troppo intricate.
Ciao,
Nicola

correttamente.
Mah... dipende quali sono le funzionalita' piu' importanti
secondo te. Il debugger del VC++ e' veramente comodo e
sufficientemente potente per gli usi che ne faccio io;
sicuramente non lo baratterei con una implementazione 100%
compatibile con la carta dello standard della clausola export
delle sotto-specializzazioni parziali multiple anticontrovarianti
con deduzione semi-implicita dei parametri paravirtuali con
scappellamento a destra (assolutamente indispensabile per qualche
pera mentale di chi vuole sostituire le subroutine con le macro,
pardon, i template).
Alcune incompatibilita' sono per me del tutto inspiegabili
a meno che si voglia pensare ad un complotto in cui
microsoft ha come unico scopo la distruzione del mondo; ad
esempio il fatto che l'implementazione standard di operator
new ritorni 0 (NULL) invece lanciare una exception.


E questo chi l'ha detto? typedef ha almeno due utilizzi fondamentali,
...
Stavo per rispondere la stessa cosa... poi pero' mi e' venuto
in mente che forse l'OP si riferisce esclusivamente all'uso di
typedef nella definizione di strutture alla "C"
  typedef struct POINT_TAG
  {
    int x,y;
  } Point;
che ogni tanto appare anche in sorgenti C++


intelleggibili dichiarazioni troppo intricate.
Questo č vero, ma io mi riferivo alle vecchie abitudini che hanno i
programmatori C e che spesso utilizzano anche in C++:
typedef struct {
        int a, b;
} struttura;
Inoltre vi riporto l'ultima che ho letto:
typedef int integer;
typedef integer array[5];
array variabileArray1;
array variabileArray2;
array variabileArray3;
Convengo anch'io che se si fosse trattato di puntatori ad array di interi
non sarebbe stato un cattivo modo di procedere, ma non mi venite a dire che
la typedef viene usata correttamente in tutti i casi.
Ciao.
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
Visual C++, il meno standard dei compilatori C++.
J++, la copiatura piů riuscita.
Windows, il piů instabile.
