Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 14-12-2002, 17.55.14   #1
Kleidemos
Senior Member
 
Registrato: 01-12-2002
Loc.: Pavia
Messaggi: 202
Kleidemos promette bene
[Vb6]Come posso migliorare sto cod?

Codice:
 ' La somma di due integer può essere superiore a 32768,
' quindi è meglio restituire un long
Public Function Addiziona(n As Integer, m As Integer) As Long
Dim ris As Long
ris = n + m
Addiziona = ris
End Function
' Non è necessario restituire un long, ma per coerenza...
Public Function Sottrai(r As Integer, l As Integer) As Long
Dim risul As Long
ris = r - l
Sottrai = risul
End Function
' Stesso discorso fatto per la moltiplicazione....
Public Function Moltiplica(n As Integer, m As Integer) As Long
Dim ris As Long
ris = n * m
Moltiplica = ris
End Function
' Così puoi restituire anche risultati con decimali
Public Function Dividi(n As Integer, m As Integer) As Single
Dim ris As Long
ris = n / m
Dividi = ris
End Function
'Cancella dalla Ram il prog
Private Sub Chiudi_Click()
Unload Princ
End Sub

Private Sub diviso_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
    res.Text = Dividi(primo.Text, secondo.Text)
Else
    res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub infos_Click()
Dim info
info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub meno_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
    res.Text = Sottrai(primo.Text, secondo.Text)
Else
    res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub per_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
    res.Text = Moltiplica(primo.Text, secondo.Text)
Else
    res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub plus_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
    res.Text = Addiziona(primo.Text, secondo.Text)
Else
    res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub Readme_Click()
Dim info
info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub
come lo miglioro????????
___________________________________

on
Lang: C++()
Compilatori:
Kleidemos non è collegato   Rispondi citando
Vecchio 14-12-2002, 18.25.08   #2
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
.. Se volessi essere veramente cattivo ti direi : "cambiando linguaggio" .. però non lo sono, quindi ti do un paio di consigli:

innanzitutto indentalo bene, tutto ! .. non se se molti spazi siano spariti perché se li è mangiati il forum .. ma io vedo che deve essere indentato...

secondo: perché ti appoggi ad un valore transitorio dimensionato a parte come long quando la stessa funzione ritorna un long?

basta scrivere <funzione> = operazione senza passare dalla variabile intermedia che occupa solo memoria (e tanta!)

terzo: le condizioni valutate con operatori logici come AND vanno sempre separate da parentesi:

quindi IF (condizione1) AND (condizione2) .. THEN
questo aiuta la leggibilità

Quarto: non è necessario scrivere "= TRUE" . basta scrivere: "IsNumeric(numero)" .. perché l'if valuta sempre il true.


Quinto: se fosse programmato ad oggetti ti avrei bastonato per quel public .. ma così non è .. quindi passiamola liscia

sesto: ciao

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 14-12-2002, 18.27.17   #3
Kleidemos
Senior Member
 
Registrato: 01-12-2002
Loc.: Pavia
Messaggi: 202
Kleidemos promette bene
ora riprovo, ok?
___________________________________

on
Lang: C++()
Compilatori:
Kleidemos non è collegato   Rispondi citando
Vecchio 14-12-2002, 18.31.27   #4
Kleidemos
Senior Member
 
Registrato: 01-12-2002
Loc.: Pavia
Messaggi: 202
Kleidemos promette bene
Ora?
Codice:
 
' La somma di due integer può essere superiore a 32768,
' quindi è meglio restituire un long
Public Function Addiziona(n As Integer, m As Integer)
    Dim ris As Long
    ris = n + m
    Addiziona = ris
End Function
' Non è necessario restituire un long, ma per coerenza...
Public Function Sottrai(r As Integer, l As Integer)
    Dim risul As Long
    ris = r - l
    Sottrai = risul
End Function
' Stesso discorso fatto per la moltiplicazione....
Public Function Moltiplica(n As Integer, m As Integer)
    Dim ris As Long
    ris = n * m
    Moltiplica = ris
End Function
' Così puoi restituire anche risultati con decimali
Public Function Dividi(n As Integer, m As Integer)
    Dim ris As Single
    ris = n / m
    Dividi = ris
End Function

Private Sub diviso_Click()
    If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
        res.Text = Dividi(primo.Text, secondo.Text)
    Else
        res.Text = "Non è un numero valido!"
    End If
End Sub

Private Sub infos_Click()
    Dim info
    info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub meno_Click()
    If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
        res.Text = Sottrai(primo.Text, secondo.Text)
    Else
        res.Text = "Non è un numero valido!"
    End If
End Sub

Private Sub per_Click()
    If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
        res.Text = Moltiplica(primo.Text, secondo.Text)
    Else
        res.Text = "Non è un numero valido!"
    End If
End Sub

Private Sub plus_Click()
    If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
        res.Text = Addiziona(primo.Text, secondo.Text)
    Else
        res.Text = "Non è un numero valido!"
    End If
End Sub

Private Sub Readme_Click()
    Dim info
    info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub
___________________________________

on
Lang: C++()
Compilatori:
Kleidemos non è collegato   Rispondi citando
Vecchio 14-12-2002, 20.37.50   #5
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
.. ma perché questo passaggio:

Codice:
Public Function Addiziona(n As Integer, m As Integer)
    Dim ris As Long
    ris = n + m
    Addiziona = ris
End Function
se Ris è > di 32768 cosa succede?
(magari funziona lo stesso, ma solo perché il basic è magnanimo nella gestione dei tipi)

perché non così?
Codice:
PRIVATE Function Addiziona(n As Integer, m As Integer) AS LONG
    Addiziona = n + m
End Function
.. poi questo public? ..

Sono solo consigli, nessuna critica

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 14-12-2002, 20.39.39   #6
Kleidemos
Senior Member
 
Registrato: 01-12-2002
Loc.: Pavia
Messaggi: 202
Kleidemos promette bene
Quota:
Originariamente inviato da P8257 WebMaster
.. ma perché questo passaggio:

Codice:
Public Function Addiziona(n As Integer, m As Integer)
    Dim ris As Long
    ris = n + m
    Addiziona = ris
End Function
se Ris è > di 32768 cosa succede?
(magari funziona lo stesso, ma solo perché il basic è magnanimo nella gestione dei tipi)

perché non così?
Codice:
PRIVATE Function Addiziona(n As Integer, m As Integer) AS LONG
    Addiziona = n + m
End Function
.. poi questo public? ..

Sono solo consigli, nessuna critica

Bye


Tnk
___________________________________

on
Lang: C++()
Compilatori:
Kleidemos non è collegato   Rispondi citando
Vecchio 15-12-2002, 15.25.03   #7
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Potresti persino fare così:

Codice:
Function Func_Operazione(Operatore as String, _
                         PrimoVal as Single, _
                         SecondoVal as Single)As Single
Dim Risultato As Single

If Not IsNumeric(PrimoVal) Or Not IsNumeric(SecondoVal) Then
	MsgBox "Inserire due numeri ",vbExclamation + vbOkOnly,"Attenzione !"
Else
	Select Case Operatore
	       Case "+":Risultato=PrimoVal+SecondoVal
	       Case "-":Risultato=PrimoVal-SecondoVal
               Case "*":Risultato=PrimoVal*SecondoVal
               Case "/":Risultato=PrimoVal/SecondoVal
	End Select
End If
Func_Operazione=Risultato
End Function

Private Sub infos_Click()
    Dim info
    info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub Readme_Click()
    Dim info
    info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub

Private Sub plus_Click()
Res.Text=Func_Operazione("+",Primo.Text,Secondo.Text)
End Sub

Private Sub meno_Click()
Res.Text=Func_Operazione("-",Primo.Text,Secondo.Text)
End Sub

Private Sub diviso_Click()
Res.Text=Func_Operazione("/",Primo.Text,Secondo.Text)
End Sub

Private Sub per_Click()
Res.Text=Func_Operazione("*",Primo.Text,Secondo.Text)
End Sub
LoryOne non è collegato   Rispondi citando
Vecchio 15-12-2002, 15.46.39   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
...mi sa comunque che se non trasformi in numeri Primo.Text e Secondo.Text prima di passarli alla funzione, il compilatore ti dia un errore.

Passali con Val(Primo.Text) e Val(Secondo.Text)
LoryOne non è collegato   Rispondi citando
Vecchio 15-12-2002, 16.28.52   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Potresti rivedere il tutto in questo modo:
Inserisci 2 TextBox chiamate TxtPrimoVal e TxtSecondoVal
Inserisci una Label chiamata LblRisultato
Inserisci un CommandButton chiamato CmdCalcola
Inserisci un array di OptionBox chiamato OptOperatore da 0 a 3, cioè:
1) Inserisci il primo OptionBox
2) Fai un copia del controllo
3) Fai un incolla del controllo rispondendo di Si al messagebox che ti appare

In fine inserisci il codice seguente:

Codice:
Option Explicit

Private Indice As Integer

Private Sub CmdCalcola_Click()
If Not IsNumeric(TxtPrimoVal) Or Not IsNumeric(TxtSecondoVal) Then
    MsgBox "Immettere due valori", vbExclamation + vbOKOnly, "Attenzione !"
Else
    Select Case OptOperatore(Indice).Tag
        Case "+": LblRisultato = Val(TxtPrimoVal) + Val(TxtSecondoVal)
        Case "-": LblRisultato = Val(TxtPrimoVal) - Val(TxtSecondoVal)
        Case "*": LblRisultato = Val(TxtPrimoVal) * Val(TxtSecondoVal)
        Case "/"
            If Val(TxtSecondoVal) = 0 Then
                MsgBox "Il secondo valore non può essere zero", vbExclamation + vbOKOnly, "Attenzione !"
            Else
                LblRisultato = Val(TxtPrimoVal) / Val(TxtSecondoVal)
            End If
    End Select
End If
End Sub
Secondo me così è anche meglio.
Attento, però ?
Qual'è il valore di LblRisultato se inserisco 1,2 (Virgola, non punto) in TxtPrimoVal e 2 in TxtSecondoVal ?
Se hai voglia vedi se riesci a risolvere il problema.

Ciao
LoryOne non è collegato   Rispondi citando
Vecchio 15-12-2002, 16.31.59   #10
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Scusa, mi ero dimenticato un pezzo.
Il codice completo è questo:

Codice:
Option Explicit

Private Indice As Integer

Private Sub CmdCalcola_Click()
If Not IsNumeric(TxtPrimoVal) Or Not IsNumeric(TxtSecondoVal) Then
    MsgBox "Immettere due valori", vbExclamation + vbOKOnly, "Attenzione !"
Else
    Select Case OptOperatore(Indice).Tag
        Case "+": LblRisultato = Val(TxtPrimoVal) + Val(TxtSecondoVal)
        Case "-": LblRisultato = Val(TxtPrimoVal) - Val(TxtSecondoVal)
        Case "*": LblRisultato = Val(TxtPrimoVal) * Val(TxtSecondoVal)
        Case "/"
            If Val(TxtSecondoVal) = 0 Then
                MsgBox "Il secondo valore non può essere zero", vbExclamation + vbOKOnly, "Attenzione !"
            Else
                LblRisultato = Val(TxtPrimoVal) / Val(TxtSecondoVal)
            End If
    End Select
End If
End Sub

Private Sub Form_Load()
OptOperatore(0).Tag = "+"
OptOperatore(1).Tag = "-"
OptOperatore(2).Tag = "*"
OptOperatore(3).Tag = "/"
End Sub

Private Sub OptOperatore_Click(Index As Integer)
Indice = Index
End Sub
LoryOne non è collegato   Rispondi citando
Vecchio 15-12-2002, 16.54.51   #11
Kleidemos
Senior Member
 
Registrato: 01-12-2002
Loc.: Pavia
Messaggi: 202
Kleidemos promette bene
ok, tnk!
___________________________________

on
Lang: C++()
Compilatori:
Kleidemos non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Hard Disk che fa clac clac: Solo i v/s consigli posso evitarmi il suicidio! Mike73 Hardware e Overclock 12 12-11-2007 23.10.40
Come posso vedere i video incompleti .part di edonkey/emule? mimmo77 Multimedia | audio - video 13 28-06-2006 14.36.26
Offese tramite pvt: posso denuniare se vengo offeso...???? AlexMineo Chiacchiere in libertà 46 28-06-2006 09.53.20
MS WORD perche' non posso selezionare connettori??? mag Office suite 7 21-03-2004 07.48.29
un consiglio...dove posso comprare....dischetti dvd deniro Chiacchiere in libertà 3 22-11-2003 01.07.27

Orario GMT +2. Ora sono le: 10.55.54.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.