Autore Topic: Calcolo combinatorio (anche per Formulinux)  (Letto 2562 volte)

Offline Michy9393

  • Gran Maestro dei Gamberi
  • *****
  • Post: 570
  • Ubuntu: Linux for Human Beings
    • Mostra profilo
Re: Calcolo combinatorio (anche per Formulinux)
« Risposta #15 il: 30 Aprile 2013, 00:26:32 »
Credo sia problemi con le versioni...forse ci sono ancora alcune cose che non vanno al massimo ;)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #16 il: 01 Maggio 2017, 23:40:07 »
Riprendo questa vecchia discussione perchè ho aggiornato il progetto usando la classe BigInt come mi ha fatto vedere Vuott.
Il programma sarebbe pronto, ma non riesco a testarlo perche appena premo il bottone Calcola mi va immediatamente in Errore di segmentazione(11).
Penso sia collegato all'utilizzo della classe BigInt, la vecchia versione con i Long funzionava.
Potete provare e vedere se capita anche a voi?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.242
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #17 il: 02 Maggio 2017, 01:13:52 »
Puoi spiegare come funziona ?
Più precisamente: quali campi dobbiamo valorizzare lì sul Form per verificare l'errore da te rilevato ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #18 il: 02 Maggio 2017, 21:31:09 »
Puoi spiegare come funziona ?
Più precisamente: quali campi dobbiamo valorizzare lì sul Form per verificare l'errore da te rilevato ?

Devi mettere dei valori nei campi in alto, "Totale elementi", "Elementi da usare" e, opzionale, "Ripetizioni", poi premere il bottone Calcola.
Ho provato ad eseguire il programma passo passo e ho trovato la linea che crea il problema, è nella funzione Calcoladisp:

Codice: [Seleziona]
Public Function Calcoladisp(Elementi As String, Dausare As String, Optional Ripeti As String) As BigInt ''ripeti è optional perchè non sempre serve
Dim Risultato, NElementi, NDausare, NRipeti, i As BigInt ''il risultato finale, num. elementi, num. elementi da usare, num. ripetizioni e indice in formato BigInt
NElementi = BigInt.FromString(Elementi) ''convertiamo le stringhe in BigInt
NDausare = BigInt.FromString(Dausare)
NRipeti = BigInt.FromString(Ripeti) <---E' QUESTA CHE DA ERRORE DI SEGMENTAZIONE
If NRipeti Then 'se ci sono delle ripetizioni...
   Risultato = NElementi ^ NRipeti '...è sufficiente un elevamento a potenza
   Return Risultato
Endif
Risultato = NElementi 'si parte da numero di elementi da usare conteggiando all'indietro
For i = NElementi To NElementi - NDausare + 2 Step -1 'il calcolo senza ripetizioni
   Risultato *= i - 1 'ogni elemento viene moltiplicato con quello che lo precede
Next
Return Risultato
End
Ma la cosa particolare è che lo fa solo se spunto la casellina davanti al campo "Combinazioni", e quindi quando esegue questa Function una seconda volta, Se non spunto la casellina l'errore non si produce.
Infatti in questa maniera e usando dei Print ho visto che Calcoladisp non da il risultato corretto, quindi devo correggerla, mentre Calcolaperm da dei numeri pazzeschi, quindi funziona. :D
Inoltre ho visto che non mi visualizza i risultati nella rispettive ValueBox, anche qui devo capire il perchè.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.242
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #19 il: 03 Maggio 2017, 00:21:19 »
Ho notato che, se i valori scritti nei campi "Totale elementi" e "Elementi da usare" sono uguali, non viene sollevato alcun errore.    :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.242
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #20 il: 03 Maggio 2017, 00:35:55 »
ho trovato la linea che crea il problema, è nella funzione Calcoladisp
Sì.
Sembra che alla riga:
Codice: [Seleziona]
NDisposizioni = Calcoladisp(Elementi, Dausare) 'calcoliamo le disposizioni
tu debba comunque passare anche il terzo argomento, anche se nella corrispondente routine della funzione chiamata il 3° parametro è dichiarato come "opzionale".

Correggendo dunque così:
Codice: [Seleziona]
NDisposizioni = Calcoladisp(Elementi, Dausare, Ripeti)
a me non viene sollevato alcun errore.
« Ultima modifica: 03 Maggio 2017, 00:37:35 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re:Calcolo combinatorio (anche per Formulinux)
« Risposta #21 il: 22 Luglio 2018, 17:21:21 »
Ultima versione riveduta e corretta del progetto, adesso funziona bene (almeno credo, controllate  :) ).
L'unica cosa che non ho ancora implementato è la suddivisione delle migliaia, Format$ non supporta i BigInt. Magari ci lavorerò più avanti, convertendo i valori in stringhe.  :coder:
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.