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
Sk_Anonymous
Per quello che vuoi fare te esiste la funzione InStr(string1,string2) che
restituisce la posizione di string2 in string1.Se string2 non e' presente in
string1 allora la funzione restituisce 0.
Percio' potresti fare cosi':
if InStr(string1,",")<> 0 " allora trasforma in frazione string1" else " lascia inalterato"
Archimede

stellacometa
:smt108 :?:

antonio89x
OK!
Grazie mille :-D

stellacometa
Leggendo qua e la alcune funzionalità di VB ne ho trovata una che a quanto pare riproduce l'effetto dell'esplosione del Form...Qualcune ne ha mai sentito parlare??

antonio89x
Esplosione del form?

What? :?

stellacometa
si..in pratica c'è una funzionalità con cui il forum si ingrandisce tutto assieme e dicono che è come se "esplodesse"...

stellacometa
FORUM??? :-D volevo dire FORM

Nidhogg
Si è possibile far esplodere un form utilizzando ActiveX.

stellacometa
E come si fa?? Insomma..se voglio fare un programma eseguibile , lo potrei anche fare?

Nidhogg
prova con questo:

Public Sub CloseForm(FRM As Form)
Dim counter As Integer
Dim i As Integer
On Error Resume Next
FRM.Caption = ""
If FRM.WindowState = vbMaximized Or _
FRM.WindowState = vbMinimized Then FRM.WindowState = vbNormal
counter = FRM.Height

Do: DoEvents
counter = counter - 100
If counter < 0 Then Exit Do
FRM.Height = counter
FRM.Top = (Screen.Height - FRM.Height) / 2
Loop
i = 10
counter = FRM.Width

Do: DoEvents
counter = counter - i
If counter <= 0 Then Exit Do
FRM.Width = counter
FRM.Left = (Screen.Width - FRM.Width) / 2
i = i + 2
Loop Until counter <= 100 'Screen.Width
End Sub

stellacometa
non succede niente...

stellacometa
A TUTTI GLI ESPERTI DI VB.....Mi potreste insegnare qualche trucchetto o, meglio, effetto speciale da utilizzare in alcuni miei prog??

Grazie all'infinito!!!

eafkuor1
ecco un trucco speciale: passa a C! :P

stellacometa
:cry: mi piacerebbe ma purtroppo a scuola per il momento sto studiando solo VB e quindi mi piacerebbe almeno saper fare di piu che semplici programmini bellini colorati e stop!!! :oops:

antonio89x
Il linguaggio C lo sto cominciando a studiare a scuola. Per quando riguarda il VB sono un autodidatta, infatti ho imparato tutto da solo. Ovviamente non sono un professionista...

Trucchi in particolare non saprei...

stellacometa
okay...allora facciamo che inizio a sperimentare qualcosa in C. Però in casi di smarrimento conto su di voi!!!!!!!!!!!!

antonio89x
Sinceramente fino ad ora preferisco il VB, però può darsi che in futuro possa cambiare idea... :roll:

Nidhogg
Tips Visual Basic: http://www.visual-basic.it/

Nidhogg
"eafkuor":
ecco un trucco speciale: passa a C! :P


Non capisco! Se stai parlando del linguaggio C non vedo relazione. Il linguaggio C è stato un'evoluzione del linguaggio B, ed è stato usato per scrivere i primi sistemi operativi UNIX. Come linguaggio è molto minimalista e sinceramente come effetti grafici si può fare molto poco (soprattutto se si parla di ANSI C). Il linguaggio C ha il predominio su sistemi di tipo real-time ed annessi, perchè il C è famoso per la sua efficienza. Se si vuole fare grafica con il linguaggio C si devono usare i suoi "derivati" nel campo della programmazione ad oggetti, cioè C#, C++ o Java.

luciano791
"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.


dovresti essere + chiaro
se parli di risultato numerico fai capire che hai come input un'operazione. Quindi se hai le due variabili A e B di tipo numerico e il risultato deve essere A/B fai così:

If A mod B > 0 Then
  MsgBox (A & " / " & B)
Else
  MsgBox (A/B)
End If


Se invece non parti da un'operazione, ma parti da un numero, la cosa è + complicata. Per capire se ha decimali non conviente utilizzare il metodo InStr, per 2 motivi: primo non sai con certezza con che formato è scritto il numero (di solito si usa il punto, non la virgola, oppure può avere i separatori delle migliaia), secondo perchè si possono indicare i decimali anche quando sono tutti a zero (nei database sono sempre indicati anche se non ci sono, quindi c'è sempre il separatore dei decimali). Per capire se è un decimale fai così:

If Fix(Cdbl(String1)) <> Cdbl(String1) Then
  MsgBox "E' decimale, dovresti scrivere la frazione"
Else
  Msgbox String1  'ovvero il numeri intero
End If


Il problema è trasformare in frazione. Se ti va bene approssimare a N decimali basta che scrivi

If Fix(Cdbl(String1)) <> Cdbl(String1) Then
  MsgBox (Fix(Cdbl(String1) * 10^N) & " / " & 10^N)
Else
  Msgbox String1  'ovvero il numeri intero
End If


se non ti vuoi approssimare non esiste alcun metodo certo, in quanto esistono infiniti numeri decimali che possono essere trasformati in interi soltanto moltiplicandoli per altri numeri decimali di infinite cifre. Se dai per scondato che il numero "String1" sia il risultato della divisione di 2 numeri interi devi fare:

If Fix(Cdbl(String1)) <> Cdbl(String1) Then
  For i = 1 To Max
    If Fix(Cdbl(String1) * i) = (Cdbl(String1) * i) Then
       Exit For
    End If
  Next i
  If i <= Max Then
    MsgBox "La frazione è: " & Cdbl(String1) * i & " / " & i
  Else
    MsgBox "Frazione non trovata"
  End If
Else
  Msgbox String1
End If


... dove Max è un numero massimo che stabilisci te, creando così un range di ricerca di possibili divisori (magari 50.000.000, sembra tanto ma la ricerca durerà una decina di secondi)

PS: non ho mai tenuto conto del segno, ma si tratta di lievi modifiche

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