Antonio Inviato 5 Maggio 2006 Group: Membri Topic Count: 33 Content Count: 289 Reputation: 0 Joined: 11/12/2005 Status: Offline Device: Windows Inviato 5 Maggio 2006 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
Antonella Vitalizi Inviato 6 Maggio 2006 Group: Membri Topic Count: 1 Content Count: 10 Reputation: 0 Joined: 03/03/2006 Status: Offline Inviato 6 Maggio 2006 io...
Antonio Inviato 7 Maggio 2006 Group: Membri Topic Count: 33 Content Count: 289 Reputation: 0 Joined: 11/12/2005 Status: Offline Device: Windows Autore Inviato 7 Maggio 2006 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; }
Antonella Vitalizi Inviato 7 Maggio 2006 Group: Membri Topic Count: 1 Content Count: 10 Reputation: 0 Joined: 03/03/2006 Status: Offline Inviato 7 Maggio 2006 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
Antonio Inviato 7 Maggio 2006 Group: Membri Topic Count: 33 Content Count: 289 Reputation: 0 Joined: 11/12/2005 Status: Offline Device: Windows Autore Inviato 7 Maggio 2006 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?
Antonella Vitalizi Inviato 8 Maggio 2006 Group: Membri Topic Count: 1 Content Count: 10 Reputation: 0 Joined: 03/03/2006 Status: Offline Inviato 8 Maggio 2006 il programma non l'ho provato sono all'università ad ingegn informatica:) mi è sempre piaciuta la progrmmazione:) spero di esserti stata utile
Andrea Mutti Inviato 8 Maggio 2006 Group: Membri Topic Count: 5 Content Count: 24 Reputation: 0 Joined: 15/02/2006 Status: Offline Device: Windows Inviato 8 Maggio 2006 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; }
Antonio Inviato 8 Maggio 2006 Group: Membri Topic Count: 33 Content Count: 289 Reputation: 0 Joined: 11/12/2005 Status: Offline Device: Windows Autore Inviato 8 Maggio 2006 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..!! 8) Grazie ancora ragà!! ps e così la legge dei grandi numeri è dimostrata..
Antonio Inviato 8 Maggio 2006 Group: Membri Topic Count: 33 Content Count: 289 Reputation: 0 Joined: 11/12/2005 Status: Offline Device: Windows Autore Inviato 8 Maggio 2006 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
Andrea Mutti Inviato 8 Maggio 2006 Group: Membri Topic Count: 5 Content Count: 24 Reputation: 0 Joined: 15/02/2006 Status: Offline Device: Windows Inviato 8 Maggio 2006 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
Messaggi raccomandati
Crea un account o accedi per lasciare un commento
Devi essere un membro per lasciare un commento
Crea un account
Iscriviti per un nuovo account nella nostra community. È facile!
Registra un nuovo accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora