Jump to content
Nuovi CD di musica del XX e del XXI secolo

Linguaggi di programmazione


Antonio
 Share

Recommended Posts


  • Group:  Membri
  • Topic Count:  33
  • Content Count:  289
  • Reputation:   0
  • Joined:  12/11/2005
  • Status:  Offline
  • Device:  Windows

Ho aperto questo topic, anzi off-topic, per parlare e dibattere circa i linguaggi di programmazione oggi meglio conosciuti.

Una domanda in particolare rivolta a tutti:

qualcuno conosce, anche relativamente bene, il C++?

 

Vi ringrazio,

Antonio

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  33
  • Content Count:  289
  • Reputation:   0
  • Joined:  12/11/2005
  • Status:  Offline
  • Device:  Windows

ok Antonella,

dunque,

hai presente il lancio di una moneta? Intendo testa e croce..

bene,

dovrei costruire un programma in C++ che calcoli la probabilità di uscita dell'evento "testa" e dell' evento "croce", su un totale di 10000 lanci.

La funzione in c++ che genera una serie di eventi pseudocasuali è la funzione "Rand()". Puoi aiutarmi?

All' interno della stusura del programma, da quanto ho capito, dovrebbero esserci un paio di "for". Il problema è determinare il corpo della funzione Rand()..nn riesco ad uscirmene..

il prof in classe ci ha detto di partire dal seguente frammento di programma:

 

#include

#include

#include

 

int T = 0;

int i,j;

 

int main()

{

for (i=0;i<10000;i++)

{

j = rand()%2;

if(j==0)

T++;

}

 

system("PAUSE");

return 0;

}

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  1
  • Content Count:  10
  • Reputation:   0
  • Joined:  03/03/2006
  • Status:  Offline

ho messo dei commenti nel corpo del codice e delle aggiunte per completare il programma...

 

#include

#include

#include

 

int T = 0; //indica il numero delle occorrenze dell'evento testa

//(0 prima del lancio)

 

int i,j;

 

int main() {

for (i=0;i<10000;i++) {

j = rand()%2; //j può venire pari a 0 (la funzione rand(), ogni

//volta che viene eseguita, genera un numero

//casuale che, se è pari, da 1 come risultato della

//divisione intera per 2 (il simbolo %) altrimenti

//0

 

if(j==0) //è uscito un numero dispari, che noi assumiamo

//simuli l'uscita dell'evento testa

T++; //se J==0 incrementiamo il contatore degli eventi

//testa

}

//fatto ciò il rapporto tra il numero intero T ed il numero di eventi totali,

//il totale dei lanci 10000, fornisce la probabilità p che si verifichi l'evento

//testa, il complemento ad uno di questa probabilità, pari a (1-p) fornisce l//a probabilità che si verifichi l'evento croce

double pT; //variabile che rappresenta la probabilità che si

//verifichi l'evento testa

pT = T/10000;

cout << "la probabilità che esca testa è" << endl;

cout << pT;

cout << "la probabilità che esca croce è" << endl;

cout << (1-pT);

system("PAUSE");

return 0;

}

spero di esserti stata utile, la parcella è di 235 euro

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  33
  • Content Count:  289
  • Reputation:   0
  • Joined:  12/11/2005
  • Status:  Offline
  • Device:  Windows

Ciao Antonella,

innanzitutto i miei complimenti per la tua evidente e palese bravura nella programmazione in c++, sei stata abbastanza temperstiva e di questo te ne ringrazio infinitamente.

Hai 19 anni, leggo, la mia età, e mi chiedo..come hai fatto a raggiungere già questi livelli di programmazione?

Non ti nascondo che un pò ti invidio..perchè dopo 5 anni di liceo S.co tecnologico (ho iniziato con lo studio del c in terza e quest'anno il c++) nn sono ancora in grado di stilare un breve e semplice programma (cosa che nessuno nella mia classe è in grado di fare tranne un paio di eccezioni!!) in questo dannato linguaggio..

Mi accorgo che conoscere la teoria, in campo di programmazione, nn è molto utile..bisogna stare tanto tempo a stilare continuamente programmi, fare pratica, per giungere ad un modesto livello di preparazione.

 

Domandina:

A te il programma funziona?

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  1
  • Content Count:  10
  • Reputation:   0
  • Joined:  03/03/2006
  • Status:  Offline

il programma non l'ho provato

 

sono all'università ad ingegn informatica:)

mi è sempre piaciuta la progrmmazione:)

spero di esserti stata utile

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  5
  • Content Count:  24
  • Reputation:   0
  • Joined:  02/15/2006
  • Status:  Offline
  • Device:  Windows

Il listato completato da Antonella contiene in realtà due imprecisioni (ho segnato in rosso le mie correzioni). Così dovrebbe funzionare.

Nel primo caso si è trattato ovviamente di una semplice svista nel commento; nell'ultima espressione, invece, il problema è un po' più sottile. Si tratta di capire come il C++ gestisce i meccanismi di casting (conversione di tipi) impliciti ed espliciti. E' un argomento importante che va studiato con attenzione: ti consiglio di leggerti un buon manuale o di chiedere una spiegazione specifica al tuo professore.

Comunque, nel caso specifico, poiché veniva effettuata una divisione tra due numeri interi, il risultato era ancora un intero (per troncamento) e quindi sempre zero che poi veniva trasformato in double al momento dell'assegnazione alla variabile pT. Richiedendo il cast esplicito di uno dei due operandi, il risultato della divisione è un double che viene poi assegnato ad una variabile dello stesso tipo senza perdita di precisione.

 

Ciao

am

 

P.S. Ho anche risistemato i newline nell'output.

 

 

#include

#include

#include

 

int T = 0;

 

int i,j;

 

int main() {

for (i=0;i<10000;i++) {

j = rand()%2; //j può venire pari a 0 (la funzione rand(), ogni

//volta che viene eseguita, genera un numero

//casuale che, se è pari, da 0 come risultato della

//divisione intera per 2 (il simbolo %) altrimenti 1

 

if(j==0) //è uscito un numero pari, che noi assumiamo

//simuli l'uscita dell'evento testa

T++; //se J==0 incrementiamo il contatore degli eventi

//testa

}

//fatto ciò il rapporto tra il numero intero T ed il numero di eventi totali,

//il totale dei lanci 10000, fornisce la probabilità p che si verifichi l'evento

//testa, il complemento ad uno di questa probabilità, pari a (1-p) fornisce l//a probabilità che si verifichi l'evento croce

double pT; //variabile che rappresenta la probabilità che si

//verifichi l'evento testa

pT = double(T)/10000;

cout << "la probabilità che esca testa è " << pT << endl;

cout << "la probabilità che esca croce è " << (1-pT) << endl;

system("PAUSE");

return 0;

}

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  33
  • Content Count:  289
  • Reputation:   0
  • Joined:  12/11/2005
  • Status:  Offline
  • Device:  Windows

il programma non l'ho provato

 

sono all'università ad ingegn informatica:)

mi è sempre piaciuta la progrmmazione:)

spero di esserti stata utile

Adesso capisco l'arcano..comunque complimenti lo stesso!!

 

Il listato completato da Antonella contiene in realtà due imprecisioni (ho segnato in rosso le mie correzioni). Così dovrebbe funzionare.

Nel primo caso si è trattato ovviamente di una semplice svista nel commento; nell'ultima espressione, invece, il problema è un po' più sottile. Si tratta di capire come il C++ gestisce i meccanismi di casting (conversione di tipi) impliciti ed espliciti. E' un argomento importante che va studiato con attenzione: ti consiglio di leggerti un buon manuale o di chiedere una spiegazione specifica al tuo professore.

Comunque, nel caso specifico, poiché veniva effettuata una divisione tra due numeri interi, il risultato era ancora un intero (per troncamento) e quindi sempre zero che poi veniva trasformato in double al momento dell'assegnazione alla variabile pT. Richiedendo il cast esplicito di uno dei due operandi, il risultato della divisione è un double che viene poi assegnato ad una variabile dello stesso tipo senza perdita di precisione.

 

Ciao

am

 

P.S. Ho anche risistemato i newline nell'output.

 

 

#include

#include

#include

 

int T = 0;

 

int i,j;

 

int main() {

for (i=0;i<10000;i++) {

j = rand()%2; //j può venire pari a 0 (la funzione rand(), ogni

//volta che viene eseguita, genera un numero

//casuale che, se è pari, da 0 come risultato della

//divisione intera per 2 (il simbolo %) altrimenti 1

 

if(j==0) //è uscito un numero pari, che noi assumiamo

//simuli l'uscita dell'evento testa

T++; //se J==0 incrementiamo il contatore degli eventi

//testa

}

//fatto ciò il rapporto tra il numero intero T ed il numero di eventi totali,

//il totale dei lanci 10000, fornisce la probabilità p che si verifichi l'evento

//testa, il complemento ad uno di questa probabilità, pari a (1-p) fornisce l//a probabilità che si verifichi l'evento croce

double pT; //variabile che rappresenta la probabilità che si

//verifichi l'evento testa

pT = double(T)/10000;

cout << "la probabilità che esca testa è " << pT << endl;

cout << "la probabilità che esca croce è " << (1-pT) << endl;

system("PAUSE");

return 0;

}

 

Grazie davvero Andrea per le dovute correzioni.

Anche tu studi all'università?

Curiosità: all'interno della finestra MS-DOS che lancia il programma, anzichè "probabilità" esce "probabilitò"..perchè?

Eppure all'interno dell'istruzione cout la parola è scritta con la a accentata finale..

mistero..

 

Cmq ho capito a chi rivolgermi quando ne avrò bisogno..!! :lol: 8)

Grazie ancora ragà!!

 

ps e così la legge dei grandi numeri è dimostrata..

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  33
  • Content Count:  289
  • Reputation:   0
  • Joined:  12/11/2005
  • Status:  Offline
  • Device:  Windows

Curiosità: all'interno della finestra MS-DOS che lancia il programma, anzichè "probabilità" esce "probabilitò"..perchè?

Ho risolto anche questo arcano da solo..dovevo scrivere la a accentata con due simboli, la "a" e l'accento " ' ".

Anche in questo caso però mi chiedo perchè nn vengono riconosciuti alcuni simboli presenti sulla tastiera..

 

saluti,

Antonio

Link to comment
Share on other sites


  • Group:  Membri
  • Topic Count:  5
  • Content Count:  24
  • Reputation:   0
  • Joined:  02/15/2006
  • Status:  Offline
  • Device:  Windows

Grazie davvero Andrea per le dovute correzioni.

Anche tu studi all'università?

 

Prego, figurati.

No, non studio... più all'università, è solo un vecchio e caro ricordo...

 

 

Curiosità: all'interno della finestra MS-DOS che lancia il programma, anzichè "probabilità" esce "probabilitò"..perchè?

 

Il motivo è che nei sistemi Microsoft (se non ho capito male stai utilizzando Windows) l'ambiente console ("prompt dei comandi", per capirci) e l'ambiente grafico utilizzano due differenti tabelle di codici carattere (è un retaggio dei vecchi sistemi DOS). Una possibile soluzione è quella che tu stesso hai sperimentato, l'alternativa è utilizzare un editor in grado di salvare il file in differenti codifiche (DOS, Windows, Unix ecc...).

Ne esistono di ottimi sia a pagamento sia freeware (vedi ad esempio www.scintilla.org) e non dovrebbero mai mancare nella "cassetta degli attrezzi" di un programmatore.

 

Ciao

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.