Sempre VB6

antonio89x
Ho un problema: non so quali sono le istruzioni per far si che un risultato numerico se intero rimanga tale, se è decimale venga trasformato nella frazione corrispondente.

In parole povere non so "fare capire" al computer che quando il numero "è con la virgola" lo deve trasformare in frazione.

Grazie in anticipo.

Risposte
stellacometa
Sapete come si costruisce un programma in VB che inserendo l'equazione di una retta la rappresenti??

antonio89x
Non ho mai provato...

Però posterò il mio programma dopo averlo fatto.

Sempre che qualcuno non lo faccia prima di me :-D

stellacometa
ok...sono arrivata a questa conclusione...so come si può disegnare un punto in un grafico di VB...però, e ora c'è il buffo, come si disegna il piano???

tony19
"antonio89x":
Ho un problema: non so quali sono le istruzioni per far si che un risultato numerico se intero rimanga tale, se è decimale venga trasformato nella frazione corrispondente...

per quanto riguarda il tentativo di esprimere (o approssimare) un numero decimale con una frazione, allego, se può servire di esempio, una mia vecchia routinetta in Basic; nella prova eseguita approssima pigreco.

tony

il programma:
FUNCTION PBMAIN()
  DIM dec AS DOUBLE, num AS DOUBLE, den AS DOUBLE, answ AS STRING
  DIM precis AS DOUBLE, diff AS DOUBLE, bestDiff AS DOUBLE, relErr AS DOUBLE
  
  precis = 10 ^ -16     ' the desired precision
  dec = 4 * ATN(1)      ' the number to be expressed as a fraction (this is PI)

  PRINT "---"; dec; "approx. = "
  PRINT "fraction"; TAB(23); "value"; TAB(45); "rel. error"

  bestDiff = 10^6
  FOR den = 1 TO 10 ^ 18
    num = INT(den * dec + .5)
    diff = num / den - dec
    IF ABS(diff) < bestDiff THEN
      bestDiff = ABS(diff): relErr = diff / dec
      PRINT num; "/"; den; TAB(23); num / den; TAB(45); relErr
      IF ABS(relErr) < precis THEN EXIT FOR
    END IF
  NEXT den
  LINE INPUT "press enter to exit" answ
END FUNCTION

il risultato:
--- 3.14159265358979 approx. =
fraction              value                 rel. error
 3 / 1                 3                    -4.50703414486279E-2
 13 / 4                3.25                  3.45071300973197E-2
 16 / 5                3.2                   1.85916357881302E-2
 19 / 6                3.16666666666667      7.9813062486705E-3
 22 / 7                3.14285714285714      4.02499434770721E-4
 179 / 57              3.14035087719298     -3.95269703534519E-4
 201 / 64              3.140625             -3.08013704032383E-4
 223 / 71              3.14084507042254     -2.37963112882781E-4
 245 / 78              3.14102564102564     -1.80485704760031E-4
 267 / 85              3.14117647058824     -1.32475163857499E-4
 289 / 92              3.14130434782609     -9.17705748314385E-5
 311 / 99              3.14141414141414     -5.6822190314114E-5
 333 / 106             3.14150943396226     -2.64896301670023E-5
 355 / 113             3.14159292035398      8.49136786973483E-8
 52163 / 16604         3.14159238737654     -8.47383116450023E-8
 52518 / 16717         3.14159239097924     -8.35915344177218E-8
 ..... omissis ......
 58466453 / 18610450   3.14159265358978     -2.82715971685646E-15
 63885804 / 20335483   3.14159265358979     -1.98612111456408E-15
 69305155 / 22060516   3.14159265358979     -1.27657028718897E-15
 74724506 / 23785549   3.14159265358979     -6.69931938764863E-16
 80143857 / 25510582   3.14159265358979     -1.45361288176262E-16
 165707065 / 52746197  3.14159265358979      9.11786617667818E-17
press enter to exit

antonio89x
Ok, grazie a tutti per esservi cimentati. :D

stellacometa
Come si fa a far funzionare correttamente la funzione msgbox??Insomma...quando se schiaccio un bottone mi faccio apparire una finestra di avviso con due scelte, ok e annulla, se schiaccio ok mi faccio un collegamento ad un secondo form altrimenti rimango li dove sono...Ora però se io schiaccio annulla mi collega ugualmente al secondo form...Avete qualche idea???

luciano791
"stellacometa2003":
Come si fa a far funzionare correttamente la funzione msgbox??Insomma...quando se schiaccio un bottone mi faccio apparire una finestra di avviso con due scelte, ok e annulla, se schiaccio ok mi faccio un collegamento ad un secondo form altrimenti rimango li dove sono...Ora però se io schiaccio annulla mi collega ugualmente al secondo form...Avete qualche idea???


TastoSchiacciato = MsgBox("Schiaccia un tasto",VbOkCancel)

If TastoSchiacciato = VbOk Then
    Msgbox "è stato premuto OK (VbOk)"
    FormDaAprire.Show
Else
    MsgBox "è stato premuto Cancel (VbCancel)"
End If


TastoSchiacciato è un intero
VbOk e VbCancel sono costanti di vb e valgono rispettivamente 1 e 2

stellacometa
ok..piu o meno ho capito il procedimento. Grazie..cmq... mi spieghi questo fatto di VbOkCancel..non lo avevo utilizzato mai!!

antonio89x
VbOkCancel visualizza un messaggio in una finestra di dialogo e dopo che hai scelto un pulsante restituisce un valore che indica il pulsante scelto.
in questo caso visualizza i pulsanti OK e Annulla.

stellacometa
come faccio a cambiare titolo alla finestra di dialogo che appare (la scritta nello spazio blu)???

luciano791
"stellacometa2003":
come faccio a cambiare titolo alla finestra di dialogo che appare (la scritta nello spazio blu)???


MsgBox "Questo è il testo del MsgBox", VbOkOnly, "Questo è il titolo"


Il msgbox chiede diversi paramentri (i parametri sono quelle voci separate da una virgola, in genere, specie a livelli di partenza, vengono utilizzati solo i primi tre)

MsgBox (TestoDaVisualizzare, TipoDiMsgBox, Titolo)

TestoDaVisualizzare è l'unico campo obbligatorio e deve essere una stringa
TipoDiMsgBox è un numero o, ancor meglio, una costante di vb che può indicare il tipo standard di MsgBox da usare (per esempio VbYesNo visualizza il tasto Yes ed il tasto No e restituisce i valori "VbYes" o "VbNo" come nell'esempio di ieri, oppure VbCritical visualizza il punto esclamativo per indicare una warning... dovresti vedere la guida con tutti i tipi)
Titolo è facoltativo ed è quello che cercavi

stellacometa
Come si utilizza il metodo REFRESH ad esempio per cancellare il contenuto di una textbox durante l'esecuzione schiacciando un bottone???

luciano791
"stellacometa2003":
Come si utilizza il metodo REFRESH ad esempio per cancellare il contenuto di una textbox durante l'esecuzione schiacciando un bottone???

Il metodo refresh ha un solo scopo: aggiorna il form con i nuovi valori delle proprietà sue e di ogni oggetto che lo compone. Per esempio, se cambi la caption di una Label all'interno del form, cambi una proprietà. Non è detto che il cambiamento lo vedi in diretta, dipende da quanto è impegnato il pc. Se il programma ha tante istruzioni da eseguire, il pc spesso non ha il tempo (o le capacità, in base al processore, alla ram...) di aggiornare il form, quindi se interroghi la proprietà caption della Label ti restituisce il nuovo valore, ma a video vedi ancora il testo vecchio. Refresh è anche utile per i cambiamenti di immagine. Detto in parole semplici, refresh ridisegna il form. Può essere applicato anche ad ogni singolo oggetto. Di solito è meglio inserire dopo il refresh l'istruzione "DoEvents", per dare il tempo al pc di "respirare" e di ridisegnare il form con calma.

stellacometa
Mi potresti fare un esempiose volessi utilizzare questo metodo per non visualizzare più il vecchio testo presente in un textbox??

stellacometa
HEEEELP!!!!!come faccio per non visualizzare più il vecchio testo inserito in un textbox schiacciando un bottone????? :smt102

luciano791
mi sa che non hai capito :-D
Il testo della textbox VB lo modifica da solo. Refresh va aggiunto solo se il programma non ha il tempo di aggiornare il form, per esempio all'interno di un lungo ciclo for.
Nel seguente modo non ci sono problemi
Sub Tasto1_Click()
    Text1.Text = "Questo è il nuovo testo"
End Sub


In quello che segue va aggiunto refresh
    Dim i As Integer
    For i=1 To 20000
         Text1.Text = i
         Me.Refresh
         DoEvents
    Next i

Con questo programma faccio visualizzare in text1 i numeri fino a 20000. Se ometto Refresh rischio di vedere solo l'ultimo numero in quanto il pc potrebbe non avere il tempo di aggiornare lo schermo perchè il programma deve eseguire parecchie istruzioni senza un attimo di tregua.
Il problema è che Refresh rallenta parecchio il ciclo. Se per esempio devo leggere un file di 1.000.000 record e voglio far visualizzare il contatore record (solo per vedere a che punto è l'elaborazione) non posso far visualizzare tutti i numeri, ci metterebbe 10 volte tanto, quindi faccio visualizzare solo i numeri multipli di 1.000

stellacometa
Si si scusa....ho risolto il problema ieri.Oggi però a scuola è nato un nuovo dubbio e come sempre il prof di info dice: perchè non lo vai a cercare??Non vi posso dare la pappa pronta"....Boh!!!Cmq, io ho provato a capire, ma come si fa ad esempio quando creo un inputbox a uscire da questo stesso schiacciando annulla??Perchè con ok fa quello che deve fare ma se voglio annullare mi segnala errore!!!
HELP VI PREGO...

Vincent2
E' una cosa complicatuccia da spiegare, si utilizza una specie di puntatore.
In pratica
Dim s As String
s = InputBox("Scrivi qualcosa qui dentro")
If StrPtr(s) = 0 Then
'Ha premuto il tasto annulla
End If

stellacometa
cosa vuol dire StrPtr???
Spiega il passaggio se riesci...

Vincent2
Fa un confronto con il puntatore alla stringa ottenuto tramite la funzione StrPtr. Se la stringa non e' creata, il puntatore alla stringa (meglio, alla struttura BSTR che la rappresenta) vale zero. Solo quando la stringa viene creata (anche se vuota), il puntatore diventa diverso da zero.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.