Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [PASCAL] Eliminare numeri uguali all'interno di un array bidimensionale

    Salve a tutti.

    Sto creando un programma in Pascal in cui devo simulare un'estrazione del lotto. Il problema sorge dal fatto che su ogni ruota devono esserci tutti numeri diversi.

    Io onestamente non saprei bene come fare questo codice che controlla se i numeri sono uguali e se eventualmente lo sono li sostituisce.


    Ecco il codice;
    codice:
    program estrazione_lotto;
    uses crt;
    type
       tabella = array[1..11,1..5] of integer;
    var
       tab:tabella;
       k,s:string;
       f:integer;
    
    procedure estrazione;
    var
       a,b: integer;
       trovato:boolean;
    begin
    randomize;
         for a:=1  to 11 do
    
              for b:=1 to 5 do
                 tab[a,b]:=random(90+1)
    end;
    
    procedure scrivi;
    var
       a,b,num,col:integer;
        begin
         num:=15;
         col:=5;
              for a:=1 to 11 do
                   begin
                    gotoxy(num,col);
                    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 nomi;
    
    begin
            gotoxy(2,5);
            Write('Nazionale');
            gotoxy(2,6);
            Write('Bari');
            gotoxy(2,7);
            Write('Cagliari');
            gotoxy(2,8);
            Write('Firenze');
            gotoxy(2,9);
            Write('Genova');
            gotoxy(2,10);
            Write('Milano');
            gotoxy(2,11);
            Write('Napoli');
            gotoxy(2,12);
            Write('Palermo');
            gotoxy(2,13);
            Write('Roma');
            gotoxy(2,14);
            Write('Torino');
            gotoxy(2,15);
            Write('Venezia');
    
    end;
    
    procedure cerca;
     var num,a,b,cont: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;
    
    begin
            estrazione;
            clrscr;
            centra('Estrazione del lotto',1);
            scrivi;
            nomi;

  2. #2
    Per le estrazioni del lotto credo che ci siamo in giro numerosi algoritmi.
    Dunque non so se è la l'idea è la più perfomante, ma io farei un array di interi con 90 posizioni poi a random vado a pescare una posizione e la metto dove ne ho bisogno e al suo posto ci scrivo un -1, successivamente prima di prendere la nuova posizione testo se dentro c'e' il valore -1 nel caso ripeto il numero random.

    per non stravolgere la tua logica qualcosa del tipo:
    codice:
    aNumeri array [1..90]  
    ....
    for a:=1 to 11 do
       for b:=1 to 5 do
       begin
          while true do
          begin
            nEstratto := random(90+1);
            if aNumeri[nEstratto] <> -1 then
            begin
               tab[a,b] := aNumeri[nEstratto];
               aNumeri[nEstratto] := -1;
               break;
            end;
         end;
      end;
    NB: mi scuso dieventuali errori nel codice, è stato scritto al volo e non testato, ma spero che la logica sia chiara

    N.

  3. #3
    Grazie per la risposta.
    Purtroppo neanche io posso provare il codice fino a domani ma a prima visto quello che hai scritto dovrebbe funzionare.

    Solo una cosa: a cosa serve il "while true do"?

  4. #4
    Double post..

  5. #5
    il while serve x continuare a generare numeri sino a che non si becca quello giusto, peruscire dal loop con il comando break
    correggo il codice:
    codice:
    aNumeri array [1..90]  
    ....
    for a:=1 to 11 do
       for b:=1 to 5 do
       begin
          while true do
          begin
            nEstratto := random(90+1);
            if aNumeri[nEstratto] <> -1 then
            begin
               tab[a,b] := nEstratto;
               aNumeri[nEstratto] := -1;
               break;
            end;
         end;
      end;
    N.

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590

    OT

    Originariamente inviato da stichtom
    Purtroppo neanche io posso provare il codice fino a domani ma a prima visto quello che hai scritto dovrebbe funzionare.
    Penso che tu possa provarlo su ideone.com
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7

    Re: OT

    Originariamente inviato da Scara95
    Penso che tu possa provarlo su ideone.com
    Carino, ho fatto una prova al volo:
    test sorgente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.