()
Newbie
Messaggi:
Iscritto:
|
Ciao a tutti,
sto realizzando un programma con pascal in cui viene simulata un estrazione del lotto e l'utente può fare una puntata e verificare se ha vinto o meno.
Il codice funziona quasi tutto però mi dà problemi quando deve verificare se (mettiamo nel caso che si voglia fare un ambo) ci sono nella ruota i due numeri che l'utente ha giocato.
Infatti anche se i due numeri ci sono nella ruota numero 1 il programma continua a dirmi "Hai perso".
Se al posto del AND metto l'OR mi dà due "Hai vinto"..
Perchè funzioni quando vi chiede se volete fare terno o ambo dovete digitare 1 (dopo sistemerò questo).
Ultima modifica effettuata da il 16/10/2012 alle 19:18 |
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Codice sorgente - presumibilmente Delphi |
write('Vuole fare una puntata? (si\no) '); readln(inizio); if inizio=('si') then begin write('Vuole giocare un ambo o un terno? '); readln(tipo); ambo:=1; case tipo of 1 : begin Write('Inserisci il primo numero che vuoi puntare: '); readln(numa); Write('Inserisci il secondo numero che vuoi puntare: '); readln(numb); lol:=0; for a:=1 to 11 do lol:=0; for b:=1 to 5 do begin if (numa=tab[a,b]) then lol = lol+1; if (numb=tab[a,b]) then lol = lol+1; if lol = 2 then begin Writeln('Hai vinto'); end; end; If lol < 2 then writeln('Hai perso!'); end; end;
|
Può essere migliorato ancora
Ultima modifica effettuata da Ultimo il 07/10/2012 alle 13:11
If ok Then GOTO Avanza else GOTO Inizia
|
|
()
Newbie
Messaggi:
Iscritto:
|
Grazie mille, in effetti così funziona alla perfezione.
Però continuo a non capire perchè non dovrebbe funzionare se metto un AND tra le due condizioni...
Ho modificato un pò il codice come mi hai suggerito, solo che ogni tanto quando i due numeri sono presenti nella prima ruota al posto di stamparmi "Hai vinto" solo uan volta lo fa 3 o 4 volte.
Codice sorgente - presumibilmente Delphi |
procedure gioca; var inizio,terno:string; numa,numb,numc,band,a,b,ambo:integer; tipo:char; begin write(' Vuole fare una puntata(si\no)? '); readln(inizio); if inizio=('si') then begin write(' Vuole giocare un ambo o un terno? '); readln(tipo); ambo:=1; case tipo of 'a' : begin Write(' Inserisci il primo numero che vuoi puntare: '); readln(numa); Write(' Inserisci il secondo numero che vuoi puntare: '); readln(numb); band:=0; a:=1; for b:=1 to 5 do begin if (numa=tab[a,b]) then band:=band+1; if (numb=tab[a,b]) then band:=band+1; if band=2 then begin textcolor(green); Writeln(' Hai vinto!'); end; end; If band<2 then begin textcolor(red); writeln(' Hai perso!'); end; end; 't': write('ciao'); end; end;end;
|
Ultima modifica effettuata da il 07/10/2012 alle 15:19 |
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Come ho scritto io, si può ripetere più di una volta perchè le ruote sono 11, vuol dire che quell'ambo si è
ripetuto su più di una ruota
Ultima modifica effettuata da Ultimo il 07/10/2012 alle 16:03
If ok Then GOTO Avanza else GOTO Inizia
|
|
()
Newbie
Messaggi:
Iscritto:
|
Hai ragione, però nel nuovo codice che ti ho messo ho stabilito a:=1 quindi dovrebbe lavorare solo sulla prima ruota. Eppure continua, ogni tanto, a stamparmi più di un "Hai vinto".
EDIT: C'entra qualcosa con il fatto che li memorizza da prima. Infatti se metto un clrscr ne stampa solo uno
Poi stavo facendo la parte in cui l'utente può decidere in che ruota giocare e mi è venuto un dubbio:
come faccio a trasformare l'input dell'utente (tipo "Nazionale") in un numero (in questo caso 1)?
In pratica a:=<Numero che indica la ruota> . Il problema è che non so come trasformare la ruota in lettere che mi dà l'utente in un numero.
Comunque ecco il codice aggiornato:
Codice sorgente - presumibilmente Delphi |
procedure gioca; var inizio,terno:string; numa,numb,numc,band,b,a,ruota:integer; tipo:char; begin write(' Vuole fare una puntata(si\no)? '); readln(inizio); if inizio=('si') then begin write(' Vuole giocare un ambo o un terno? '); readln(tipo); case tipo of 'a' : begin Write(' Inserisci il primo numero che vuoi puntare: '); readln(numa); Write(' Inserisci il secondo numero che vuoi puntare: '); readln(numb); Write(' Inserisci il nome(numero) della ruota in cui vuoi giocare: '); readln(ruota); band:=0; a:=ruota; for b:=1 to 5 do begin if (numa=tab[a,b]) then band:=band+1; if (numb=tab[a,b]) then band:=band+1; if band=2 then begin textcolor(green); Writeln(' Hai vinto!'); end; end; If band<2 then begin textcolor(red); writeln(' Hai perso!'); end; end; 't': writeln(' Work in progress'); end; end; if inizio='no' then write(' Premi invio per uscire'); end;
|
Il resto del programma è nel primo post
Ultima modifica effettuata da il 07/10/2012 alle 16:13 |
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Non è difficile, gli scrivi tu i numeri corrispondenti alla ruota da 1 a 11 che dovrà digitare
If ok Then GOTO Avanza else GOTO Inizia
|
|
()
Newbie
Messaggi:
Iscritto:
|
si una cosa del tipo
readln(ruota);
1:=Nazionale;
a:=<Qui mi blocco, cosa devo mettere?>
|
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Postato originariamente da stichtom:
si una cosa del tipo
readln(ruota);
1:=Nazionale;
a:=<Qui mi blocco, cosa devo mettere?> |
Puoi inserire dei
case ruota
immetti tutti i casi possibili, cioè le ruote possibili e per ognuna assegni alla variabile "a" il numero
corrispondente.
If ok Then GOTO Avanza else GOTO Inizia
|
|
()
Newbie
Messaggi:
Iscritto:
|
Si, questa potrebbe essere una soluzione.
Solo che renderebbe il codice davvero lungo e secondo me c'è qualcosa che potrebbe fare tutto più velocemente... (solo che non so cosa )
______________________________________________________
Rimane il problema che ogni tanto mi stampa 3 o 4 "Hai vinto". Ho provato a mettere un clrscr prima di stampare gioca, sembra funzionare ma non capisco come e perchè.
Ecco uno screen con l'errore: http://i.imgur.com/gICIR.png
Ultima modifica effettuata da il 07/10/2012 alle 20:51 |
|