Newsgroup: it.comp.lang.c++
Titolo: Giocare a 7 1/2 col C++

Non ci crederete ma è così. I miei prof non hanno trovato niente di meglio
da farci fare che scrivere un programma in c++ per giocare a 7 e 1/2. Il
progetto è anche stimolante, ma abbastanza complicato per la quantità di
casualità da prevedere.
Se qualche anima pia avesse qualche idea da darmi le accettrei volentieri.
Se poi aveste il programma già fatto...
La mia e-mail: 
fed...@tiscalinet.it
Grazie.

 writes:

spero con tutto il cuore che i tuoi professori leggano e possano
identificarti.  a parte poi che, se ti interrogano sul codice non tuo,
10 a 1 che ti tr@$%#no lo stesso :-)  sai, non siamo mica cretini...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it


Non penso sia molto difficile, io lo feci in Basic una dozzina di anni
fa (a 15 anni) e non era venuto male, anzi, il computer giocava con
discrete capacità e senza 'sbirciare' le carte coperte. Incomincia
scrivendo una classe che identifichi un giocatore (carta coperta,
carte scoperte, punti attuali, puntata) poi implementa una semplice
interfaccia di gioco (mostra carta, punta, chiedi se chiamare o
stare).
Infine imposta un algoritmo di gioco per la CPU basata sulla 'vista'
delle carte scoperte dei giocatori, un po di rand() e vai sicuro.
In 2 giorni avrai già qualcosa di funzionante!
Luc.

 Univ. of Padova, Dept. of Physics - Padova, Italy
lor...@pd.infn.it
Sul fatto che non siate cretini ho moltissime riserve. Leggendo quello che
ha scritto comunque credo che lei non sia cretino, ma vada ben oltre.

 ha scritto:
[...]
| spero con tutto il cuore che i tuoi professori leggano e possano
| identificarti.  a parte poi che, se ti interrogano sul codice non tuo,
| 10 a 1 che ti tr@$%#no lo stesso :-)  sai, non siamo mica cretini...
ma quanta cattiveria!! chiedeva solo un paio di consigli...
vedo scopiazzare sofware da aziende che si spacciano per serie, vogliamo
prendercela con uno studente? :))
| --
| Maurizio Loreti
http://www.pd.infn.it/~loreti/mlo.html
ciao
MerlinO

prendercela con uno studente? :))
Gli studenti di oggi saranno i professionisti di domani!
Se cominci gia` da ora, cosa dovrebbe farci pensare che un domani
sia tu l'autore del software che vendi come tuo?
Quanto alla semplice richiesta di consigli, onestamente a me e`
sembrato che tu non abbia neanche provato a pensare
al problema piu` di tanto.  Inoltre se hai difficolta` xche` non
ti rivolgi al tuo docente?
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

Usa una funzione che genera dei numeri causuali 
Poi definisci una variabile alla quale assegni il valore della funzione
rand() e un'atra che contenga la somma dei numeri estratti.
Un'latra istruzioni che controlli i due casi in cui il gioco deve aver
termine. Qualcosa come:
           if (somma > 7.5 ) cout << "hai peso" << endl;
           else if (somma = 7.5) cout << "7 e mezzo, hai vinto" ;
Ecco una schifezza che mi viene in mente:
#include <iostream>
int main() {
              using namespace std;  
              cout << "benvenuto nel gioco 7 e mezzo" << endl;             
 
               float a = 0; // numero da estrarre
               flaot somma = 0; //  variabile che tiene la somma
              char finale;
               do {
                     // ciclo che controlla che l'estrazione finisca quando
somma è                       //maggiore di 7 e mezzo
                      while(somma < 7.5) {
                              a = rand();
                              for(;a > 10; a = rand()); // controlla che
venga generato un                                                          
 
 
 
                             //  numero non maggiore di 10 
                              cout << "valore estratto" << a << endl;
                              somma = somma + a;
                              cout << "somma = " << somma << endl;         
 
                             }
                      if(somma > 7.5) cout << "hai perso" << endl;
                      else if(somma == 7.5) cout << "bravo, hai vinto" <<
endl;
                     cout << "ancora una volta? (s o n)" << endl;
                     cin >> finale;
                 } while(finale  == 's');
             return 0;
}                           

Se poi aveste il programma già fatto...
E che esercizio del cavolo sarebbe? Copiando il programma di qualcun
altro non impari un bel niente, ed inoltre se il tuo professore ti
interroga sul codice utilizzato rischi di fare un'atroce figura di
m***a. Guarda, non é per fare dell'inutile perbenismo, ma secondo me é
molto meglio presentare un programma sbagliato e malfunzionante
scritto da se stessi piuttosto che un programma perfetto e funzionante
ma scritto da un'altra persona.
Il Ghenio
-----
Jesse: Preparatevi a passare dei guai.
James: Dei guai molto grossi!!!
(Team Rocket)
-----

 wrote in message
t9suisgrigms8ef4d...@4ax.com...


Programmare i C++ non vuol dire usare la cout al posto della
printf()... Non penso che il suo professore voglia sapere se è in
grado di contare fino a 7.5 8-)
Luc.


Partendo dal presupposto che il C++ nasce dall'evoluzione del C anche se
utilizzo la programmazione strutturata non differisce solo per il cout.
Invece di criticare li altri provi a dare un mano allo studente che chiesto
un aiuto (e non l'intera risuoluzione) del gioco. 
L'argomento in questione non era trovare le differenze tra il C e il C++
Se vuoLE un esempio in OOP che secondo me in questo caso è inutile,
ecco:
#include <iostream>
using namespace std;
class sette {
         public:
                 float somma;
                 float a;
                 float b;
                 void azzera() {
                        a = 0;
                        b = 0;
                        somma = 0;
                 }
                 void eseguo() {
                                a = rand();
                                b = rand();
                                for(; b > 20; b = rand());
                                if(b == 10)  a = 0.5;
                                for(; a < 10, a = rand());
                                cout << "il numero estratto è" << a <<
endl;
                                somma += a;
                                cout << "la somma è " << somma << endl; 
                         } 
                  void verifico() {
                        if(somma == 7.5) cout << "hai vinto" << endl;
                        else if(somma > 7.5) cout << "hai perso" << endl;
                 }
};
int main() {
     sette oggetto;
     char finale;
     do {
          oggetto.azzera();
          while(oggetto.somma < 7.5) oggetto.eseguo();  
          oggetto.verifico();
          cout << "ancora una volta? (s o n)" << endl;
          cin >> finale;
         } while(finale == 's');
         return 0;
}          
 
Manca però il numero jolly che ad essere sinceri non so come costruirlo.   
 
 
 
 

italiana( e non solo per colpa dei docenti).
Quindi ne deduco che i ragazzi di 15 anni a differenza di voi non hanno
paura di prendere un libro in mano e studiare fino a trovare una
soluzione.
Quanto alla situazione penosa dell'universita` ci sarebbe molto da
dire... ma al momento non riuscite ancora ad intuire cosa
state studiando (non e` una colpa, ma un dato di fatto che non vale
solo per voi).
La verita` e` che lamentarsi e` facile, studiare invece richiede
impegno. Se la cosa non vi va, nessuno vi obbliga a studiare, ma
non cercate scuse e scappatoie. Un consiglio non l'ho mai
negato a nessuno, ma la soluzione ad un progetto e` altra cosa.
Ripeto... non serve lamentarsi e cercare scuse,
ci siamo passati in molti e sappiamo come vanno le
cose.


ecco:
Grazie, ma se al prof non interessa l'OOP penso che lo avrebbe
richiesto scritto in Pascal o VB.
Luc.




Come ho già fatto notare in altre news non ho l'abitudine di rileggere i
messaggi che scrivo, quindi spesso mi scappa qualche errore.
Inoltre ero un po' alterato perché non ho apprezzato la sua news e Le
chiedo
scusa se sono stato scortese nei suoi confronti.
Gentilmente Lei mi ha comunicato che la frase era contorta e me ne rendo
conto, pertanto mi correggo:
Quando si utilizza la programmazione strutturata in C++ si notano sempre
delle differenze rispetto a quella del C.
Per il resto ha ragione Lei. Non avevo letto il suo colloquio precedente.
Cmq il professore può anche chiedere di non svolgere il progetto con la OOP
se si è solo agli inizi.
Le mie scuse sono accettate?
PS
se continuiamo la discussione facciamola in privato senza intasare il
newgroup di discussioni  poco costruttive.

Le mie scuse sono accettate?
Mi scuso anche io dei toni usati.
Luc.

 conto, pertanto mi correggo:
Ma vogliamo finirla con questo "Lei"? Qui ci si dà del tu. Anche mentre
si litiga. :-)
EMG

ecco:
Gli attributi public non sono un esempio di buona OOP.
Elimina delle tue classi ogni attributo public, altrimenti
perdi buona parte dei benefici della programmazione ad
oggetti.


Lo so Paolo, ma in quel codice (assai sporco) non volevo curare
l'inizializzazione degli attributi utilizzando i costruttori. 
E fare uso di un costruttore per creare l'oggetto e una funzione membro per
definirli era assai cosa peggiore.
IInoltre all'interno della funzione main  ho fatto molte volte riferimento
ad oggetto.somma per questioni di semplicità.
Cmq grazie della segnalazione.

Va bene. 

 wrote in message
e074jsgrh5qej5blc...@4ax.com...



Mi dispiace se pensi che la nostra unica difficoltà sia il fatto di prendere
in mano libri e studiarli. Non ci conosci; ne a me, tantomeno al mio amico a
cui hai risposto. Siamo tutti e due studenti di Ingegneria, entrambi
diplomati con 100/100 al liceo scientifico (voto non regalato...), entrambi
iscrittici ad ingegneria perchè la materia ci appassiona, entrambi
profondamente delusi dall'università. Per studiare non ci siamo mai tirati
indietro, abbiamo passato pomeriggi interi chini sui libri per cercare di
capire come si risolvessero integrali grandi come palazzi o limiti che
sembravano bambini! Ma se al termine di un corso mi si richiede di
presentare un progetto simile senza aver mai avuto la benchè minima
erudizione su cosa fosse e come funzionesse la funzione rand(), se per tre
mesi ho ascoltato parlare due prof (tra parentesi ricercatori, nemmeno
professori) che probabilmente conoscono la materia, ma sono incapaci a
spiegarla, se ho tre libri che sembrano scritti o da bambini o da dislessici
(se vuoi te li cito: "Introduzione al C++", Kapper, "Calcolo numerico",
Gori, "Introduzione ai sistemi informatici", AA.VV.), cerco di aiutarmi come
posso. Ho chiesto aiuto per la stesura del programma; è vero che alla fine
ho chiesto espressamente il codice già pronto, e non nego che se qualcuno me
lo inviasse non lo userei, ma non pretendo che qualcuno faccia il lavoro per
me. Anche perchè non credo che nessun programmatore abbia mai perso tempo
per scrivere un codice in c++ per giocare a 7 e 1/2!
Ti invito a seguire qualche lezione del mio corso, poi giudicherai da solo.
Ciao.


Cambia corso!!!!!!!!
8-)

persi per strada insulsamente...
Che l'universita` italiana non sia messa bene e` un dato di fatto, ma
la cosa non giustifica la richiesta.
Se non riuscite a superare un esame, vuol dire che avete bisogno
di studiare ancora, magari aiutati da qualcuno piu` bravo, ma non
certo facendosi dare la soluzione dell'esercizio d'esame.


Seeeeeee, magari!
E' da settembre che siamo in quest'inferno, e non credo ne usciremo per
almeno altri 6 o 7 anni.
Quando saremo laureandi in ingegneria(se mai lo saremo...)  spero di aver a
che fare con ben altro che un programmino idiota, altrimenti vorrà dire che
avrò buttato nel cesso diversi anni della mia vita.
Luc <TOGL...@nip1.it-TOGLI> wrote in message
ifvcjs0gesc13mi7b...@4ax.com...





Ti invito a seguire qualche lezione del mio corso, poi giudicherai da solo.
Ne ho avuti anch'io docenti non all'altezza del loro compito, non
siete gli unici... purtroppo sono cose che capitano, ma questo
non giustifica certe richieste.
Bada che non sei stato l'unico... puntualmente in tempo di esami
c'e` sempre qualcuno che fa richieste anche piu` palesi della
tua. La risposta e` sempre stata la stessa.


hai difficoltà a fare un programmino del genere???
Non e` questo il punto... a giudicare dal programma direi che sono
appena all'inizio... e` piu` che normale che si perdano dietro cose
banali per chi ha un minimo di esperienza.


 noi,
Di certo non mi facevo fare da altri i miei compiti!
Anzi ricordo benissimo di un episodio in cui mi fu dato un esercizio
che non potevo risolvere con gli strumenti disponibili, feci presente
la cosa al docente e tutto si risolse in 2 giorni.
Paolo
-- 
------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
 
http://www.cli.di.unipi.it/~marotta
------------------------------------------------


Ciao Aquila, chi ti risponde è uno studente universitario come te (sono
iscritto a Fisica).
Ho letto la lunga discussione seguita al tuo messaggio ed ho pensato di dare
il mio contributo.
Posso capire i tuoi problemi con il C++ , anche io ho cominciato a
programmare perchè mi serviva per un esame.
Il linguaggio era il QBASIC ed  il programma per l'esame era molto semplice.
Come nel tuo caso tuttavia, il corso non era sufficiente per imparare a
programmare decentemente.
Questa, tuttavia non è una scusante. La preparazione di uno studente non è
subordinata alla qualità di un corso, una disciplina non si esaurisce con
quello che il professore ha spiegato.
Certo l'università italiana ha i suoi problemi ma mette a disposizione degli
studenti molte risorse che chi ha buona volontà può usare.
Mi riferisco alla biblioteca ed ai professori di altre facoltà che di certo
non rifiuteranno di dare ad uno studente suggerimenti riguardo ad un buon
libro di testo.
E' proprio in questo modo che ho scoperto ed imparato il C++.
Quando mi è aumentata la passione per la programmazione, il BASIC ha
cominciato ad andarmi stretto;
parlando con dei colleghi sono venuto a conoscenza del C e del C++ e
recatomi in biblioteca ho trovato il libro di Stroustrup (l'inventore del
C++) "The C++ Programmin Language"  ed ho cominciato a leggerlo.
Ho dovuto rileggerlo due volte per capirlo a fondo, e scrivere alcuni
programmi, ma alla fine credo di padroneggiare il C++ molto bene.
Fatta questa lunga premessa mi permetto di farti due domande:
1) Conosci il C++ in modo adeguato?
2) Conosci il 'sette e mezzo'?
Se la risposta è positiva non dovresti avere problemi a scrivere il tuo
programma.
Infatti per scrivere un programma di una certa complessità per prima cosa
devi avere ben chiaro quello che stai facendo;
Nel caso del 'sette è mezzo' immagina di dover spiegare il gioco ad una
persona che non lo conosce: quali carti si usano, che cosa è la matta,
perchè se hai in mano 7 punti non conviene chiedere un'altra carta, etc.
Infine per poter implementare il programma devi conoscere il linguaggio che
vuoi utilizzare;
questo vale ancora di più per il C++ in quanto la 'programmazione orientata
agli oggetti' influenza il modo di affrontare un problema.
Mi spiego meglio: nel gioco del 'sette e mezzo' si hanno le carte, il mazzo
di carte, il giocatore ed il giocatore che da le carte.
Il C++ permette di definire direttamente questi oggetti e di specificare
il modo in cui interagiscono tra di loro.
Cerca di analizzare bene il problema e vedrai che non è così difficile.
Considerazioni finali.
- Che io sappia ci sono diversi modi di giocare a 'sette e mezzo':
1) il giocatore che tiene le carte contro un'altro giocatore.
2) il giocatore che tiene le carte contro diversi giocatori, affrontati uno
alla volta.
3) il giocatore che tiene le carte contro diversi giocatori affrontati
contemporaneamente.
Nel caso 2) la puntata può essere libera o vincolata dal 'piatto'.
Il caso 3) credo che sia il più difficile ed interessante da implementare
tuttavia ti consiglio di incominciare con il caso 1).
Per tenere le cose ancora più semplici elimina anche le puntate (le puoi
sempre aggiungere in seguito, se il programma è scritto bene basta
aggiungere poche linee di codice).
- Se vuoi un buon libro sul C++ ti consiglio il
"C++ Primer 3rd ed by Josee Lajoie & Stanley B Lippman"
 (non l'ho letto ma è il più consigliato in questo newsgoup).
Inoltre è disponibile un libro contenente le soluzioni degli esercizi
presenti nel Lippman
"C++ Primer Answer Book by Bruce Leung & Clovis Tondo".
Il primo è tradotto in italiano (ma non ricordo il titolo), il secondo non
lo so.
- Se vuoi un buon libro sul C ti consiglio il
"Linguaggio C di Brian Kernighan e Dennis Ritchie".
Anche per questo libro sono disponibili le soluzioni degli esercizi
"Linguaggio C il libro delle soluzioni di Clovis Tondo e Scott Gimpei".
Entrambi sono editi dalla Jacson Libri.
- Se vuoi ulteriori esempi di programmi C++ ti consiglio di leggere una
implementazione della libreria standard (io ho letto l'implementazione
dell'iostream ed ho capito molte cose).
Implementazioni buone e gratis  sono quelle incluse nei compilatori
Borland C++ 
www.borland.com
 e KAI C++ 
www.kai.com
.
Io preferisco il KAI C++ perchè il codice è molto più elegante e 'pulito',
inoltre il file da scaricare è di un paio di MB (Nota: il KAI C++ è
disponibile in valutazione per un mese - ossia dopo un mese non puoi
più compilare i programmi - ma comunque ti resta il codice).
Spero di esserti stato di aiuto, se tra qualche mese hai ancora problemi con
il programma puoi scrivermi.
Ciao   Manlio Perillo

 più compilare i programmi - ma comunque ti resta il codice).
Buono a sapersi. Non vedo l'ora di provarlo...
EMG

 wrote in message
8hipfr$q6q$1...@nslave2.tin.it...


Comunque ho completato in pochi giorni il programma.
Ed era cosi` difficile?
Forse dovrei pensare che, a giudicare da quanto hai detto,
potrebbe non essere farina del tuo sacco...
Ma io perbenista e ipocrita, riesco ancora a concederti il beneficio
del dubbio!
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------




 il perbenista rimane.
Se essere corretti vuol dire essere "perbenisti" ben venga...
Per il resto visto che non credi al fatto che io non abbia mai copiato,
permettimi ora di non credere che l'esercizio sia farina del tuo
sacco!


 wrote in message
gtc2ks8n8mkkber3u...@4ax.com...


 noi,
Di certo non mi facevo fare da altri i miei compiti!
Anzi ricordo benissimo di un episodio in cui mi fu dato un esercizio
che non potevo risolvere con gli strumenti disponibili, feci presente
la cosa al docente e tutto si risolse in 2 giorni.
Paolo
--
------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
 
http://www.cli.di.unipi.it/~marotta
------------------------------------------------

 --------------------------------------------------

capitasse che nella rete qualcuno fa delle avances a tua figlia che fai?
Gli sparo con la lupara e poi lo sciolgo nell'acido!   : O
Ma ti rendi conto che questa tua domanda non ha il minimo senso?
Ad ogni modo, finiamola con questo inutile thread.


 };
mentre quest'ultimo, in effetti, e` necessario.  Naturalmente,
non e` "un errore" quello di mettere abbondanti punti-e-virgola
dove il linguaggio non li richiede, ma non e` neppure una buona
prassi.
Inoltre, non si garantisce che la semantica che stai implementando
rispetti le specifiche.  In questo caso, le specifiche (che hai
snippato) comprendevano "rappresentare ogni carta con un numero
intero fra 0 e N-1", mentre il tuo codice usa invece numeri fra
1 e N (scelta diversa, e assai discutibile, in quanto impedisce
poi di usare semplicemente / e % per estrarre separatamente seme
e valore della carta).
In generale, se i vincoli di tempo (o di disponibilita` di un buon
compilatore standard "per provare") impongono di dover scegliere
fra postare un suggerimento senza provarlo, o non postarlo affatto,
bisogna, secondo me, distinguere.  Se il suggerimento e` molto
importante, e` senza dubbio nondimeno meglio non postarlo, se c'e`
la chance che lo posti qualcun altro.  Ma se un certo post e`
rimasto li` da giorni, e nessuno ha ancora risposto con il piu`
ovvio ed evidente dei suggerimenti, mi sembra preferibile scrivere
un post con qualche punto-e-virgola meno del dovuto (o, anche,
con qualche punto-e-virgola in piu`), piuttosto che non lasciare
gli eventuali lettori meno esperti con l'errata impressione che
possa mai essere un problema, in C++, "mescolare un mazzo di carte",
quando invece la libreria standard offre una funzione apposita.
Il compilatore e` infatti perfettamente in grado di segnalare tali
mancanze sintattiche, mentre non e` capace di dare l'idea-chiave,
"per questo si usa random_shuffle".
Comunque, se il consenso del gruppo e` invece in accordo con
Maurizio, che non si debba mai postare senza provare, mi adeguero`
volentieri, visto che tutto sommato non mi costera` molto postare
meno, o anche non postare per nulla, su questo gruppo.  Sono
gradite opinioni in merito, sia in mail sia sul gruppo (non
potro` leggerle per una decina di giorni, essendo in viaggio,
ma le considerero` e ne trarro` le debite conclusioni al mio
ritorno).
Alex

 P.S. Pero', chi di pignoleria colpisce...
???  Non capisco cosa intendi.  Le correzioni di fatto sono
sempre ben accette, e infatti ad esse ho risposto solo dando
ragione a Maurizio, e segnalando a mia volte vari usi assai
discutibili nel codice postato da lui, di quelli che il
compilatore non e` in grado di diagnosticare.
Quello su cui differisco e` il principio "non postare se
non si e` provato".  Se questa e` l'opinione maggioritaria
del gruppo, OK, non avro` problemi a rispettarla, visto che,
al massimo, mi bastera` non postare piu` codice su questo
particolare newsgroup.  Se invece la maggioranza ha un
"punto di vista iperpragmatico" analogo a quello che tu
descrivi, tanto meglio, e continuero` sostanzialmente come
ora (compreso l'accettare volentieri correzioni di errori
di dettaglio, e l'offrire altrettanto volentieri correzioni
analoghe in caso di necessita`).
Alex

Maurizio, che non si debba mai postare senza provare, mi adeguero`
Nooo...
Gia` e` difficile prenderti in fallo, figuriamoci se ti metti a fare
beta testing prima di postare ;-)


 ritorno).
Postate, postate sempre. E' cosa buona e giusta. :-)
EMG