Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    il dato valore... è presente o meno nell'array indicato...?

    Mi spiego meglio...
    ho due array:

    a2 che contiene tutti i numeri random originatesi da:

    random = Math.floor(Math.random()*90);

    e

    a5 che contiene un sovrainsieme di a2 nel senso che ogni suo elemento è composto da n elementi di a2..

    es se n=10

    e a2 = 100

    a5 ha 10 elementi per ogni suo indice...

    a5[0] = primi dieci elementi di a2 ecc...


    Ora il mio problema risiede in questo...

    prima di aggiungere un nuovo elemento in a5[n] vorrei confrontare l'esistenza o meno del valore random in a5[n] in sostanza nn vorrei mettere numeri uguali in uno stesso elemento di a5...

    a5[0] = dovrebbe contenere tutti numeri diversi l'uno dall'altro
    a5[1] = idem con patatine

    anche se a5[0] e a5[1] potrebbero benissimo avere uno o piu' numeri uguali...

    La situazione è alquanto ingarbugliata.. almeno per me
    Se qualcuno riuscisse a dipanarla un po' ne sarei grato all'ennesima potenza

    "Vero sapiente è colui che sa di non sapere" (Socrate)

  2. #2
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Problema con verifica presenza di un valore in un array...

    Ho questo cod javascript...

    if (randomnum != a2) { //al posto di != devo mettere un altro operatore di confronto... chiedere su html...

    valoresecondoarray = a2.push(randomnum);
    }
    else{
    randomnum=Math.floor(Math.random()*90);
    }

    a2 è l'array

    cosa devo mettere al posto di != per far fungere il tutto?

    ciaooo & graz

    "Vero sapiente è colui che sa di non sapere" (Socrate)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non so se ho capito.
    Vuoi che il numero che inserisci sia "nuovo" per il vettore, cioe` non sia ancora compreso tra quelli del vettore?
    Devi fare un loop: non c'e` in JS una funzione che cofronta array.

    data una matrice a2, puoi procedere cosi`:
    codice:
    var rn;
    while (1) {
      var ok = true;
      rn = Math.floor(Math.random()*90);
      for var(i=0; i<a2.length; i++) {
        if(a2[i] == rn) {
          ok = false;
          break;
        }
      }
      if(ok) break;
    }
    a2.push(rn);
    Nota: se a2 contiene 89 o piu` numeri diversi prima di arrivare a questa routine, le routine non esce piu`.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Come possiamo ovviare al problema della subroutine che si blocca?

    E poi io vorrei in realtà avere la possibilità di generare n combinazioni di x numeri le quali rispettino queste 2 cose:

    1) In ogni combinazione i numeri devono essere tutti diversi tra loro
    2) Piu' combinazioni possono avere uno o piu' numeri uguali...

    es..
    una combinazione 23 45 67 89 65 21 32 33
    un'altra 23 44 68 90 12 13 32 33

    (23,32 e 33 sono uguali rispetto alle due combinazioni...)

    Con il metodo sopraesposto invece sembrerebbe a parte il blocco che generasse tutte combinazioni diverse tra loro ma addirittura aventi sempre un numero diverso rispetto ai 90 disponibili.

    Sapresti mica postare del codice che soddisfi i due punti sopra esposti?

    Grazie e ciao

    "Vero sapiente è colui che sa di non sapere" (Socrate)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Anzitutto il codice postato da me soddisfa il punto 1 (salvo errori); e rappresenta l'estrazione di UN SOLO numero. Per estrarne piu` di uno, occorre chiamare quella routine ricorsivamente. In pratica e` semplicemente quello che hai postato tu, scritto in maniera corretta.
    Per il punto 2 occorre chiamare la routine di cui qui sopra ogni volta che si vuole una sequenza.


    Ma forse dovresti spiegare meglio.

    Se e` una "estrazione del lotto" che intendi, il metodo sovraesposto e` concettualmente sbagliato: infatti nella seconda estrazione il moltiplicatore del random non puo` essere 90, ma deve essere 89. Dal punto di vista pratico cambia poco (e` difficile accorgersi), ma nessuno statistico ti darebbe l'OK.

    Avevo gia` postato una routine per l'estrazione del lotto qualche tempo fa. Prova a vedere se riesci a trovarla.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Generazione numeri random con controllo...

    Per adesso sono riuscito con il codice sottostante ad evitare l'immissione nell'array a del valore 0...

    Adesso vorrei evitare l'immissione nello stesso array a di qualsiasi valore già in esso presente...

    a = new Array();
    lunghezzadia=a.length;

    for (i=1; i<10; i++) {

    rn=Math.floor(Math.random()*i);

    ---tentativo di evitare l'aggiunta del valore 0 in a----- riuscito

    if (rn==0) {
    rn=Math.floor(Math.random()*i);
    }
    else{
    inserimento=a.push(rn);
    }
    -----tentativo di evitare l'aggiunta di un numero già presente in a---NON RIUSCITO

    for (k=1; k<=lunghezzadia; k++){

    if (rn==a[k])
    {
    brak; //se il valore è già presente dovrebbe bloccarsi invece
    // aggiunge tutto come se niente fosse... VVoVe:
    }

    }


    }

    alert(a); // per verificare i valori inseriti.. (che purtroppo per
    // adesso presenta sempre anche i doppioni...

    Qualke guru/a sa explicarmi pekke? :rollo:


    TNX!

    "Vero sapiente è colui che sa di non sapere" (Socrate)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Perche` apri una nuova discussione, quando e` una prosecuzione della discussione precedente?

    Ho unito le discussioni.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Ok pardon :)

    Ma adesso sapresti dirmi perchè sia questo cod..


    -----tentativo di evitare l'aggiunta di un numero già presente in a---NON RIUSCITO

    lunghezzadia=a.length;

    for (k=1; k<=lunghezzadia; k++){

    if (rn==a[k])
    {
    break; //se il valore è già presente dovrebbe bloccarsi invece
    // aggiunge tutto come se niente fosse...
    }
    }

    sia il tuo piu' in alto menzionato...

    non sortiscono alcuno effetto?

    Grazie
    "Vero sapiente è colui che sa di non sapere" (Socrate)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non capisco questa riga:
    for (k=1; k<=lunghezzadia; k++){

    In JS le matrici partono dall'indice 0;

    Ma ho visto un erorre nel mio codice:
    for var(i=0; i<a2.length; i++) {
    e` da correggere in:
    for(var i=0; i<a2.length; i++) {
    Strano che non trovasse l'errore di sintassi.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    No no quell'errore l'aveva individuato

    E io l'avevo corretto solo che non funge lo stesso..
    in sostanza sembrerebbe che non riesca a confrontare i valori..

    Per lui va tutto bene e continua ad aggiungere all'array indistintamente sia che il valore sia già presente sia che non lo sia

    VVoVe:
    "Vero sapiente è colui che sa di non sapere" (Socrate)

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.