Oppure

Loading
09/10/12 20:50
Ho lavorato un pò e penso di essere arrivato ad una buona versione del programma, cosa ne pensate?
(non ho usato gli ultimi preziosi consigli di goblin perchè volevo vedere se riuscivo a finire tutto da solo)

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','Roma','Torino','Venezia');
var
   tab:tabella;
   numa,numb,numc,ruota,band:integer;
   inizio:string;
   tipo:char;


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

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;
   numa:string;
    begin
     centra('Estrazione del lotto',1);
     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 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
   terno:string;
   b,a:integer;

begin
       writeln;
       Writeln;
       Writeln;
       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);
                                gotoxy(2,10);
                                writeln('1 = Nazionale');
                                Writeln(' 2 = Bari');
                                Writeln(' 3 = Caglairi');
                                Writeln(' 4 = Firenze');
                                Writeln(' 5 = Genova');
                                Writeln(' 6 = Milano');
                                Writeln(' 7 = Napoli');
                                Writeln(' 8 = Palermo');
                                Writeln(' 9 = Roma');
                                writeln(' 10 = Tornino');
                                Writeln(' 11 = Venezia');
                                gotoxy(1,8);
                                Write(' Inserisci il nome (numero da 1 a 11) 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;
                                            end;
                                                if band>=2 then
                                                 begin
                                                   if numa<>numb then

                                                        begin
                                                          clrscr;
                                                          textcolor(green);
                                                          centra(' Congratulazioni, hai vinto!',11);
                                                          centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                          gotoxy(2,19);
                                                        end;
                                                 end
                                                   else  if numa=numb then
                                                        begin
                                                         clrscr;
                                                         Textcolor(red);
                                                         centra('Non puoi puntare due numeri uguali!',11);
                                                         centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                         gotoxy(2,19);
                                                         end;



                                If band<2 then
                                 begin
                                  if numa<>numb then
                                   begin
                                        clrscr;
                                        Textcolor(red);
                                        centra('Hai perso!',11);
                                        centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                        gotoxy(2,19);
                                  end;
                                 end
                                 else  if numa=numb then
                                                        begin
                                                         clrscr;
                                                         Textcolor(red);
                                                         centra('Non puoi puntare due numeri uguali!',11);
                                                         centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                         gotoxy(2,19);
                                                         end;

                         end;
                         't': begin
                                Write(' Inserisci il primo numero che vuoi puntare: ');
                                readln(numa);
                                Write(' Inserisci il secondo numero che vuoi puntare: ');
                                readln(numb);
                                Write(' Inserisci il terzo numero che vuoi puntare: ');
                                readln(numc);
                                gotoxy(2,10);
                                writeln('1 = Nazionale');
                                Writeln(' 2 = Bari');
                                Writeln(' 3 = Caglairi');
                                Writeln(' 4 = Firenze');
                                Writeln(' 5 = Genova');
                                Writeln(' 6 = Milano');
                                Writeln(' 7 = Napoli');
                                Writeln(' 8 = Palermo');
                                Writeln(' 9 = Roma');
                                writeln(' 10 = Tornino');
                                Writeln(' 11 = Venezia');
                                gotoxy(1,8);
                                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 (numc=tab[a,b]) then  band:=band+1;
                                            end;
                                                if band=3 then
                                                 begin
                                                   if (numa<>numb) and (numa<>numc) then

                                                        begin
                                                          clrscr;
                                                          textcolor(green);
                                                          centra(' Congratulazioni, hai vinto!',11);
                                                          centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                          gotoxy(2,19);
                                                        end;
                                                 end
                                                   else  if (numa=numb) or (numc=numa) or (numb=numc) then
                                                        begin
                                                         clrscr;
                                                         Textcolor(red);
                                                         centra('Non puoi puntare numeri uguali!',11);
                                                         centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                         gotoxy(2,19);
                                                         end;



                                If band<3 then
                                 begin
                                  if (numa<>numb) and (numb<>numc) then
                                   begin
                                        clrscr;
                                        Textcolor(red);
                                        centra('Hai perso!',11);
                                        centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                        gotoxy(2,19);
                                  end;
                                 end
                                 else  if (numa=numb) or (numb=numc) or (numa=numc) then
                                                        begin
                                                         clrscr;
                                                         Textcolor(red);
                                                         centra('Non puoi puntare numeri uguali!',11);
                                                         centra('A breve ti verra'' visualizzata l''estrazione completa',13);
                                                         gotoxy(2,19);
                                                         end;

                         end;

        end;
        end;
         if inizio=('no') then  write(' Attenda, caricamento estrazione in corso....');

        end;

procedure tuoi_dati;

          begin
            gotoxy(2,17);
             if inizio <> ('no') then
              if tipo = ('a') then
               begin
                writeln('I numeri che avevi puntatno sono: ',numa,' e ',numb);
                Writeln(' Hai puntato nella ruota numero ',ruota);
               end
              else if tipo = ('t') then
               begin
                writeln('I numeri che avevi puntatno sono: ',numa,', ',numb,' e ',numc);
                Writeln(' Hai puntato nella ruota numero ',ruota);
               end;

      end;




        var scelta:string;
 begin repeat
 clrscr;

        estrazione;
        centra('Estrazione del lotto',1);
        gioca;
        delay(4000);
        textcolor(7);
        clrscr;
        scrivi;
        (*cerca;*)
        writeln;
        Writeln;
        tuoi_dati;
        textcolor(7);
        Writeln;
        Write(' Vuoi continuare?(si\no) ');
        readln(scelta);
        until scelta='no'

end.
09/10/12 21:55
Goblin
Opinione personale

Dato che, come hai detto, sei all'inizio e stai imparando, parti subito con il piede giusto, cerca di non ripetere il codice, ma accorpalo in funzioni/procedure.
Esempio banale
per selezionare la ruota hai scritto due volte
                   Write(' Inserisci il primo numero che vuoi puntare: ');
                                readln(numa);
                                Write(' Inserisci il secondo numero che vuoi puntare: ');
                                readln(numb);
                                gotoxy(2,10);
                                writeln('1 = Nazionale');
                                Writeln(' 2 = Bari');
                                Writeln(' 3 = Caglairi');
                                Writeln(' 4 = Firenze');
                                Writeln(' 5 = Genova');
                                Writeln(' 6 = Milano');
                                Writeln(' 7 = Napoli');
                                Writeln(' 8 = Palermo');
                                Writeln(' 9 = Roma');
                                writeln(' 10 = Tornino');
                                Writeln(' 11 = Venezia');
                                gotoxy(1,8);
                                Write(' Inserisci il nome (numero da 1 a 11) della ruota in cui vuoi giocare: ');
                                readln(ruota);

l'hai fatto sia per l'ambo che per il terno
Prova a scrivere una funzione/procedura che fa questo lavoro 1 sola volta sia che inserisci un ambo, un terno, una quaterna e così via, il codice ripetuto è fonte di errori e di difficile manutenzione se nel sorgente ci sono 2 pezzi che fanno la stessa cosa si scrive una sola volta e si richiama "alla bisogna"
Ibis redibis non morieris in bello
09/10/12 23:48
Ultimo

Ok puoi ancora migliorarlo come a detto Goblin ;)
If ok Then GOTO Avanza else GOTO Inizia

13/10/12 16:40
Dato che voglio proprio andare in fondo con questi programmi sull'estrazione del lotto ho deciso di agigungerci anche il SuperEnalotto, solo che questa procedura non so per quale motivo non funziona:

program estrazione_lotto;

uses crt;
type
   tabella = array[1..11,1..5] of integer;
   nomi = array[1..11] of string[12];
   super = array[1..6] of integer;
   righe = array[1..6] of integer;
const
   nomi_ruote : nomi = ('Nazionale', 'Bari','Cagliari',
   'Firenze','Genova','Milano','Napoli','Palermo','Roma','Torino','Venezia');
   righe_super : righe = (2,6,7,8,9,11);
var
   tab:tabella;
   numa,numb,numc,ruota,band:integer;
   inizio:string;
   tipo:char;
   sup:super;
procedure estr;
        var
        k,i,aux,pos:integer;
begin
    sup[1]:=tab[2,1];
    for k:=2 to 6 do
     begin
     i:=righe_super[k];
     pos:=1;
     aux:=tab[i,1];
     while (sup[pos]<>aux) and (pos<=k) do
     pos:=pos+1;
     write(sup[k]:4);
     end;

end;
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;
   numa:string;
    begin
     centra('Estrazione del lotto',1);
     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;

begin(* repeat*)
 clrscr;

        estrazione;
        
        writeln;
        estr; 
          writeln;
        scrivi;
      
        readln;
        readln;
end.


In pratica quello che faccio nella procedura estr è:
- Assegno dentro un array tutti le righe da cui voglio estrarre il primo numero (righe_super)
- Faccio un ciclo for in cui controllo sempre attraverso una variabile ausiliaria se il numero estratto non è uguale ad un altro numero del superenalotto
Ultima modifica effettuata da 13/10/12 16:43
13/10/12 17:03
Ultimo

più precisamente cosa non và
If ok Then GOTO Avanza else GOTO Inizia

13/10/12 20:55
procedure estr;
        var
        k,i,aux,pos:integer;
begin
    sup[1]:=tab[2,1];
    for k:=2 to 6 do
     begin
     i:=righe_super[k];
     pos:=1;
     aux:=tab[i,1];
     while (sup[pos]<>aux) and (pos<=k) do
     pos:=pos+1;
     write(sup[k]:4);
     end;
 
end;


Praticamente non funziona questa parte di codice che è legata all'estrazione dei primi numeri di alcune righe. (sarebbe l'estrazione del superenalotto).
14/10/12 8:49
Ultimo
Postato originariamente da stichtom:

procedure estr;
        var
        k,i,aux,pos:integer;
begin
    sup[1]:=tab[2,1];
    for k:=2 to 6 do
     begin
     i:=righe_super[k];
     pos:=1;
     aux:=tab[i,1];
     while (sup[pos]<>aux) and (pos<=k) do
     pos:=pos+1;
     write(sup[k]:4);
     end;

    
end;


Praticamente non funziona questa parte di codice che è legata all'estrazione dei primi numeri di alcune righe. (sarebbe l'estrazione del superenalotto).


procedure estr;
        var
        k,i,aux,pos:integer;
begin
    sup[1]:=tab[2,1];
    for k:=2 to 6 do
     begin
     i:=righe_super[k];
     pos:=1;
     aux:=tab[i,1];
     while (sup[pos]<>aux) and (pos<=k) do
     pos:=pos+1;
     write(sup[k]:=tab[i,1],4);
     end;

    
end;

If ok Then GOTO Avanza else GOTO Inizia

14/10/12 14:50
Uhm...

Non funziona, mi dice che al posto dei due punti ci dovrebbe essere la parentesi...