Oppure

Loading
07/03/18 18:11
Carlo
Algoritmo più matematico.

VB.Net

Ho due campi numerici di input che possono essere riempiti da un utente:

N1 e N2, per l'uso da codice ho bisogno che N1/N2 dia resto zero (quoto)
Non posso chiedere all'utente inserisci i numeri in modo che siano divisibili.

Ho inserito un algoritmo che corregge l'input di N2 cercando il valore maggiore più vicino a quello inserito dall'utente ma divisibile.

Il riassunto del codice è:

' per esempio se i dati inseriti sono:

Dim N1 as short = 60 ' dividendo
Dim N2 as Short = 7 ' divisore 


   If N2 > N1 Then ' se il divisore è + grande del dividendo
        N2 = N1 ' per se stesso è divisibile
   ElseIf N1 Mod N2 = 0 Then ' non da resto, per cui va bene
        Debug.Print(N2) ' il valore iserito resta invariato
   Else
        Do Until N1 Mod N2 = 0 ' cerco il primo divisore che non da resto
            N2 += 1
        Loop
        Debug.Print(N2)
   End If

' N2 verrà variato da 7 a 10


Il codice funziona, ma non mi piace, e volevo sapere se esiste un metodo "matematico" per ottenere lo stesso risultato.
Ultima modifica effettuata da Carlo 07/03/18 18:27
in programmazione tutto è permesso
07/03/18 18:52
nessuno
Non c'è un modo matematico. Ma a cosa ti serve una cosa del genere?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
07/03/18 19:10
Carlo
i numeri sono dimensioni e velocità di spostamento di componenti grafiche, che l'utente può scegliere.
Se non sono divisibili tra loro le componeti grafiche non si sposteranno di un numero corretto di pixel, lo stesso algoritmo aggiusta le cose anche dopo un ridimensionamento, con relativo zoom, il codice tratta il contesto grafico in modo relativo.
L'utente può cambiare la velocità, la dimensione degli oggetti, e la dimensione della scena, ma tutto continua a funzionare regolarmente.
Ultima modifica effettuata da Carlo 07/03/18 19:13
in programmazione tutto è permesso
07/03/18 23:56
Mikelius
Qualche delucidazione:
Gli input sono esclusivamente degli interi?
se si, che range hanno?
aaa
08/03/18 0:12
Carlo
si, solo interi, parliamo di coordinate in pixel, e la velocità è un incremento di pixel, il range è quello della dimensione del form, anche se al disotto di certi valori tutto diventa così piccolo che anche se il programma ancora funziona, non si riesce più ad usare.
in programmazione tutto è permesso
08/03/18 0:30
Mikelius
Lo chiedevo per vedere se era possibile ottimizzare il codice.
Ad esempio, se N2 è =1, inutile stare a cercare il divisore, 1 è il divisore di tutti i numeri.
Stessa cosa per i numeri primi. Se come N1 inserisco un numero primo (ad esempio 4.999.999)
e come N2=2 (non so se poi effettui delle verifiche dell'input per evitare simili casi) il tuo algoritmo potrebbe stare un pochettino a trovarlo...
Quindi forse in alcuni casi converrebbe avere una lista di numeri primi e verificare prima se è tra essi (tu devi farti i conti su cosa conviene).
aaa
08/03/18 10:28
Carlo
Si, infatti quando è l'utente ad inserire i valori l'efficienza non è influente, visto che il codice viene eseguito solo una volta.
Invece quando si ridimensiona il form i valori cambiano ripetutamente, e una ottimizzazione può migliorare l'aspetto visivo del ridimensionamento.
Grazie dei consigli e delle riflessioni.

Ne approfitto per farti due domade fuori tema, che codice bisogna inserire per far apparire il testo quotato?
Il tasto Home per tornare sulla Home page dov'è?
in programmazione tutto è permesso
08/03/18 11:16
Mikelius
Postato originariamente da Carlo:

Si, infatti quando è l'utente ad inserire i valori l'efficienza non è influente, visto che il codice viene eseguito solo una volta.
Invece quando si ridimensiona il form i valori cambiano ripetutamente, e una ottimizzazione può migliorare l'aspetto visivo del ridimensionamento.
Grazie dei consigli e delle riflessioni.

Ne approfitto per farti due domade fuori tema, che codice bisogna inserire per far apparire il testo quotato?
Il tasto Home per tornare sulla Home page dov'è?


Per quotare, in basso a destra sopra il tasto rispondi c'è il tasto quote, comunque i tag dovrebbero essere

[ quote ] ... [ /quote ] (senza spazi)

Per tornare alla home page, onestamente non so se c'è un tasto...io clicco ogni volta sul logo in alto (è linkato al sito stesso)
aaa