Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Problema programma estrazione del lotto
Forum - Pascal - Problema programma estrazione del lotto

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 13:01
Domenica, 07/10/2012
  
Codice sorgente - presumibilmente Delphi

  1. write('Vuole fare una puntata? (si\no) ');
  2.         readln(inizio);
  3.         if
  4.            inizio=('si') then
  5.            begin
  6.             write('Vuole giocare un ambo o un terno? ');
  7.             readln(tipo);
  8.                 ambo:=1;
  9.             case tipo of
  10.                         1 :   begin
  11.                                 Write('Inserisci il primo numero che vuoi puntare: ');
  12.                                 readln(numa);
  13.                                 Write('Inserisci il secondo numero che vuoi puntare: ');
  14.                                 readln(numb);
  15.                                 lol:=0;
  16.                                 for a:=1 to 11 do
  17.                                      lol:=0;
  18.                                         for b:=1 to 5 do
  19.                                             begin
  20.                                                 if (numa=tab[a,b]) then lol = lol+1;
  21.                                                 if (numb=tab[a,b]) then lol = lol+1;
  22.                                                 if lol = 2
  23.                                                 then
  24.                                                         begin
  25.                                                           Writeln('Hai vinto');
  26.                                                      
  27.                                                         end;                                            
  28.                                                  end;
  29.  
  30.                                      If lol < 2 then writeln('Hai perso!');
  31.                          end;
  32.  
  33.         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

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:42
Domenica, 07/10/2012
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

  1. procedure gioca;
  2.  
  3.    var
  4.    inizio,terno:string;
  5.    numa,numb,numc,band,a,b,ambo:integer;
  6.    tipo:char;
  7.  
  8. begin
  9.         write(' Vuole fare una puntata(si\no)? ');
  10.         readln(inizio);
  11.         if
  12.            inizio=('si') then
  13.            begin
  14.             write(' Vuole giocare un ambo o un terno? ');
  15.             readln(tipo);
  16.                 ambo:=1;
  17.                 case tipo of
  18.                         'a' : begin
  19.                                 Write(' Inserisci il primo numero che vuoi puntare: ');
  20.                                 readln(numa);
  21.                                 Write(' Inserisci il secondo numero che vuoi puntare: ');
  22.                                 readln(numb);
  23.                                 band:=0;
  24.                                 a:=1;
  25.                                         for b:=1 to 5 do
  26.                                             begin
  27.                                                 if (numa=tab[a,b]) then  band:=band+1;
  28.                                                 if (numb=tab[a,b]) then  band:=band+1;
  29.                                                 if band=2 then
  30.                                                         begin
  31.  
  32.                                                           textcolor(green);
  33.                                                           Writeln(' Hai vinto!');
  34.  
  35.                                                         end;                                             end;
  36.  
  37.  
  38.                                 If band<2 then
  39.                                   begin
  40.                                         textcolor(red);
  41.                                         writeln(' Hai perso!');
  42.                                   end;
  43.  
  44.                          end;
  45.                          't': write('ciao');
  46.  
  47.         end;
  48.         end;end;


Ultima modifica effettuata da il 07/10/2012 alle 15:19
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 16:00
Domenica, 07/10/2012
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 :yup:

Ultima modifica effettuata da Ultimo il 07/10/2012 alle 16:03


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:07
Domenica, 07/10/2012
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

  1. procedure gioca;
  2.  
  3.    var
  4.    inizio,terno:string;
  5.    numa,numb,numc,band,b,a,ruota:integer;
  6.    tipo:char;
  7.  
  8. begin
  9.         write(' Vuole fare una puntata(si\no)? ');
  10.         readln(inizio);
  11.         if
  12.            inizio=('si') then
  13.            begin
  14.             write(' Vuole giocare un ambo o un terno? ');
  15.             readln(tipo);
  16.  
  17.                 case tipo of
  18.                         'a' : begin
  19.                                 Write(' Inserisci il primo numero che vuoi puntare: ');
  20.                                 readln(numa);
  21.                                 Write(' Inserisci il secondo numero che vuoi puntare: ');
  22.                                 readln(numb);
  23.                                 Write(' Inserisci il nome(numero) della ruota in cui vuoi giocare: ');
  24.                                 readln(ruota);
  25.                                 band:=0;
  26.  
  27.                                 a:=ruota;
  28.                                         for b:=1 to 5 do
  29.                                             begin
  30.                                                 if (numa=tab[a,b]) then  band:=band+1;
  31.                                                 if (numb=tab[a,b]) then  band:=band+1;
  32.                                                 if band=2 then
  33.                                                         begin
  34.  
  35.                                                           textcolor(green);
  36.                                                           Writeln(' Hai vinto!');
  37.  
  38.                                                         end;                                             end;
  39.  
  40.  
  41.                                 If band<2 then
  42.                                   begin
  43.                                         textcolor(red);
  44.                                         writeln(' Hai perso!');
  45.                                   end;
  46.  
  47.                          end;
  48.                          't': writeln(' Work in progress');
  49.  
  50.         end;
  51.         end;
  52.          if inizio='no' then  write(' Premi invio per uscire');
  53.  
  54.         end;



Il resto del programma è nel primo post

Ultima modifica effettuata da il 07/10/2012 alle 16:13
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 16:19
Domenica, 07/10/2012

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

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:54
Domenica, 07/10/2012
si una cosa del tipo

readln(ruota);
1:=Nazionale;

a:=<Qui mi blocco, cosa devo mettere?>

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 19:37
Domenica, 07/10/2012
Testo quotato

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

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:43
Domenica, 07/10/2012
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 :D)

______________________________________________________

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
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo