Oppure

Loading
06/10/12 23:22
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 16/10/12 17:18
07/10/12 11:01
Ultimo
 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 07/10/12 11:11
If ok Then GOTO Avanza else GOTO Inizia

07/10/12 12:42
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.

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 07/10/12 13:19
07/10/12 14:00
Ultimo
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 07/10/12 14:03
If ok Then GOTO Avanza else GOTO Inizia

07/10/12 14:07
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:

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 07/10/12 14:13
07/10/12 14:19
Ultimo

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

07/10/12 15:54
si una cosa del tipo

readln(ruota);
1:=Nazionale;

a:=<Qui mi blocco, cosa devo mettere?>
07/10/12 17:37
Ultimo
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