PDA

Visualizza la versione completa : [PASCAL]Problema programma estrazione del lotto


stichtom
07-10-2012, 01:20
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).

program estrazione_lotto;
uses crt;
type
tabella = array[1..11,1..5] of integer;
nomi = array[1..11] of string[12];
const
nomi_ruote : nomi = ('Nazionale', 'Bari','Cagliari',
'Firenze','Genova','Milano','Napoli','Palermo','Ro ma','Torino','Venezia');

var
tab:tabella;

procedure estrazione;
var
a,b,pos,x,i,j: integer;
begin

randomize;
for a:=1 to 11 do
begin
tab[a,1]:=random(90)+1;

for b:=2 to 5 do
begin
repeat
x:=random(90)+1;
pos:=1;
while (tab[a,pos]<>x) and (pos < b) do
pos:=pos+1;
until (pos>=b);
tab[a,b]:=x
end;
end;
end;

procedure scrivi;
var
a,b,num,col:integer;
begin
num:=2;
col:=5;
(* gotoxy(1,5);*)

for a:=1 to 11 do
begin
gotoxy(num,col);
write (nomi_ruote[a]:9);
Write(' ');
for b:=1 to 5 do

begin

write (tab[a,b]:5);
end;

col:=col+1;
end;


end;

procedure centra(scritta:string;y:integer);
var
x:integer;
begin
x:=((80-(length(scritta)))div 2);
gotoxy(x,y);
write(scritta);
end;


procedure cerca;
var a,b,cont,num:integer;
begin
gotoxy(2,20);
Write('Cerca un Numero: ');
readln(num);
cont:=0;
for a:=1 to 11 do
for b:=1 to 5 do
if num=tab[a,b] then
begin
Writeln(' Il numero si trova nella ruota numero ',a,' in posizione ', b,'');
cont:=1;
end;

If cont=0 then writeln(' Il numero non e'' presente in nessuna ruota');


end;

procedure nomi2;

var b:integer;
begin
end;

procedure gioca;
var
inizio,terno:string[10];
numa,numb,numc,lol,a,b,ambo,tipo:integer;
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
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 1 do
for b:=1 to 5 do
begin
if (numa=tab[a,b]) and (numb=tab[a,b])
then

begin
Writeln('Hai vinto');
lol:=1;
end; end;

If lol=0 then writeln('Hai perso!');
end;

end;
end;end;

var a,num1,col1:integer; begin
clrscr;
estrazione;
centra('Estrazione del lotto',1);
scrivi;
(*cerca;*)
writeln;
Writeln;
gioca;
readln;

end.
f hhh

stichtom
07-10-2012, 20:53
Allora, ho risolto quel problema solo che adesso ogni tanto mi stampa a caso 3 o 4 "Hai vinto".
Ecco un esempio: http://i.imgur.com/gICIR.png


Ecco il nuove codice:

program estrazione_lotto;

uses crt;
type
tabella = array[1..11,1..5] of integer;
nomi = array[1..11] of string[12];
const
nomi_ruote : nomi = ('Nazionale', 'Bari','Cagliari',
'Firenze','Genova','Milano','Napoli','Palermo','Ro ma','Torino','Venezia');

var
tab:tabella;

procedure estrazione;
var
a,b,pos,x,i,j: integer;
begin

randomize;
for a:=1 to 11 do
begin
tab[a,1]:=random(90)+1;

for b:=2 to 5 do
begin
repeat
x:=random(90)+1;
pos:=1;
while (tab[a,pos]<>x) and (pos < b) do
pos:=pos+1;
until (pos>=b);
tab[a,b]:=x
end;
end;
end;

procedure scrivi;
var
a,b,num,col:integer;
begin
num:=2;
col:=5;
(* gotoxy(1,5);*)

for a:=1 to 11 do
begin
gotoxy(num,col);
write (nomi_ruote[a]:9);
Write(' ');
for b:=1 to 5 do

begin

write (tab[a,b]:5);
end;

col:=col+1;
end;


end;

procedure centra(scritta:string;y:integer);
var
x:integer;
begin
x:=((80-(length(scritta)))div 2);
gotoxy(x,y);
write(scritta);
end;


procedure cerca;
var a,b,cont,num:integer;
begin
gotoxy(2,20);
Write('Cerca un Numero: ');
readln(num);
cont:=0;
for a:=1 to 11 do
for b:=1 to 5 do
if num=tab[a,b] then
begin
Writeln(' Il numero si trova nella ruota numero ',a,' in posizione ', b,'');
cont:=1;
end;

If cont=0 then writeln(' Il numero non e'' presente in nessuna ruota');


end;

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;

var scelta:string;
begin repeat
clrscr;

estrazione;
centra('Estrazione del lotto',1);
scrivi;
(*cerca;*)
writeln;
Writeln;
gioca;
textcolor(white);

Write('Vuoi continuare?(si\no) ');readln(scelta);
until scelta='no'

end.

Loading