Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [pascal] array: programma tombola

    ciao a tutti
    so che il pascal non è più in uso ma magari qualcuno si ricorda qualcosa. Sto lavorando con gli array, e volevo creare un programma che simulasse l'estrazione dei numeri alla tombola (quindi creare 99 numeri diversi random nell'array).




    il fatto è che all'inizio i numeri che escono sono tutti diversi, ma circa dopo i primi 15 esconoi solo 0... l'errore è percaso nella procedura RIEMPI?(che riempe l'array di numeri diversi)
    è quest'ultima un'ipotesi probabile perchè è una procedura improvvisata sul momento
    ecco il codice:
    codice:
    program tombola;
    uses crt;
    var vet:array[0..99] OF integer; i , j , num:integer; inter1 , inter2:boolean;
    
    
    procedure riempi; begin
      for i:=1 to 90 do
         repeat
         num:=(random(89))+1;
    
              for j:=0 to i-1 do
                 if vet[j]=num then inter1:=true;
    
    
                  if inter1=false then begin  inter2:=true; vet[i]:=num; end;
    
    
          until inter2;
    
    
    end;
    
    corpo del programma....
    non so, questa procedura mi puzza di bruciato, che ne pensate?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    che è computazionalmente poco efficiente o(n^2, anzi peggio con il generatore "normale" random), oltre che di dubbia funzionalità (se vuoi ci guardo, ma ti suggerisco il punto successivo...)

    ...si utilizza in questi casi il metodo dello "scambio": parti da un array ordinato, generi una serie di indici tra 1 e max, scambi i valori ("mischi"), ottenendo una complessità lineare

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    quindi una cosa come
    codice:
    for i:=1 to 90 do vet[i]:=i;
    for i:=1 to 90 do begin
      X:=random(89)+1; vet[i]:=vet[X];
    end;
    giusto?

    in ogni caso sapresti il motivo di questo problema?
    grazie di tutto

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Rising1
    in ogni caso sapresti il motivo di questo problema?
    sì, ma su in questo forum le correzioni (almeno le mie) non sono bene accette.
    non posso qualificare il tuo programma, ci vuole qualcuno più diplomatico

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da franzauker
    sì, ma su in questo forum le correzioni (almeno le mie) non sono bene accette.
    non posso qualificare il tuo programma, ci vuole qualcuno più diplomatico
    no, dai, perchè? del resto non è un programma complesso e io sono solo uno studente autodidatta di pascal

    in che senso non si può commentare?

    P.S., l'ho provato a fare con lo scambio, come ho scritto sopra, ma come temevo a volte la variabile j si ripete e di conseguenza anche i numeri

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Rising1
    no, dai, perchè? ...
    in che senso non si può commentare?
    Suscettibilità
    P.S., l'ho provato a fare con lo scambio, come ho scritto sopra, ma come temevo a volte la variabile j si ripete e di conseguenza anche i numeri


    Per il primo programma sono sbagliati tutti gli indici, e perfino la logica di funzionamento.

    Per il secondo... pure. E' come mischiare un mazzo di carte, nella seconda passata devi fare un ciclo di lunghezza quanto vuoi (anche 1000 o 1000000) nel quale "mischi" (ossia scambi) il contenuto di due celle a caso (in realtà potresti scambiare sempre la prima cella con una scelta a caso, ma la divergenza è più lenta).

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da franzauker
    Suscettibilità


    Per il primo programma sono sbagliati tutti gli indici, e perfino la logica di funzionamento.

    Per il secondo... pure. E' come mischiare un mazzo di carte, nella seconda passata devi fare un ciclo di lunghezza quanto vuoi (anche 1000 o 1000000) nel quale "mischi" (ossia scambi) il contenuto di due celle a caso (in realtà potresti scambiare sempre la prima cella con una scelta a caso, ma la divergenza è più lenta).

    scusami ho sbagliato io in un momento di strano delirio e non avevo messo neanche una variabile di appoggio, ora funziona a meraviglia. Grazie
    da ora in poi so come riempire un array di elementi tutti diversi

    P.S. non so come la pensi tu (o come la pensano gli altri) ma a me questi commenti sono molto graditi

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.