Esercizio Vb!!

IlaCrazy
Ho da poco iniziato la programmazione in Visual Basic, e ho provato a fare questo esercizio ma non riesco a completarlo. Sapreste darmi una mano????
Grazie!!! :-D :-D :-D :-D

"con una finestra di dialogo l'utente può inserire un numero e con 2 pulsanti di comando può scegliere tra quadrato e cerchio.Il programma calcola l'area della figura in base alla richiesta dell'utente,utilizzando il numero fornito come lato nel caso del quadrato o come raggio nel caso del cerchio".

Aspetto una risposta!!! thanxxxx!!!

Risposte
johnjohn2
"IlaCrazy":
Ho da poco iniziato la programmazione in Visual Basic, e ho provato a fare questo esercizio ma non riesco a completarlo. Sapreste darmi una mano????
Grazie!!! :-D :-D :-D :-D

"con una finestra di dialogo l'utente può inserire un numero e con 2 pulsanti di comando può scegliere tra quadrato e cerchio.Il programma calcola l'area della figura in base alla richiesta dell'utente,utilizzando il numero fornito come lato nel caso del quadrato o come raggio nel caso del cerchio".

Aspetto una risposta!!! thanxxxx!!!


Usi VB6 o .Net?
Per finestra di dialogo intendi InputBox(,,,,) o un form modale???

Se ho più dati ti posso postare il progetto già fatto!!!
CIAO

TomSawyer1
Meglio non postare gli interi compiti di altre persone, ma aiutarle a risolvere.

Cosa non riesci a fare, precisamente? Ti bastano una textbox, un commandbutton e due option.

johnjohn2
emmmm .... non volevo postare compiti.... non sono più studente da molti anni e non pensavo a questa eventualità!!

volevo solo fornire del codice di esmpio da studiare!!

Scusate ancora. :-(

TomSawyer1
Ah, ma non c'e' niente per cui scusarsi :D. Era un'informazione sullo spirito di questo forum.

eugenio.amitrano
Non conosco il visualbasic, pero' vediamo se riesco a darti ugualmente una mano.

Hai un interfaccia grafica con 2 pulsanti e due caselle numeriche.

I due pulsanti saranno legati a due funzioni, di cui il nome di queste funzioni sara' specificato da te nelle proprieta' dell'oggetto pulsante.

Mentre le due caselle numeriche avranno un nome sempre assegnato dalle proprieta' dell'oggetto e chiamate opportunamente casella_parametro e casella_risultato.

Supponiamo che il pulsante che deve restituirti l'area del quadrato hai assegato una funzione di nome area_quadrato, mentre all'altro pulsante area_cerchio.

Sub area_quadrato

   lato = leggi_valore(casella_parametro)
   area = lato * lato
   scrivi_valore(casella_risultato, area)

End Sub


Sub area_cerchio

   raggio = leggi_valore(casella_parametro)
   area = raggio * raggio * 3.14
   scrivi_valore(casella_risultato, area)

End Sub


Dove le funzioni leggi_valore e scrivi_valore, cosi' chiamate da me, devi trovare il corrispondente nella guida del VB nella sezione in cui si parla delle interazioni con l'interfaccia grafica.

A presto,
Eugenio

johnjohn2
Studiati questo codice :
su di un form devi mettere questi controlli
- 2 text box chiamate Text1 e Text2
- 2 label chiamate Label1 e Label2
- 2 CommandButton chiamati Command1 e Command2

poi copia questo nel codice



Private Sub Command1_Click()
Text2.Text = AreaQuadrato(Val(Text1.Text))
End Sub

Private Sub Command2_Click()
Text2.Text = AreaCerchio(Val(Text1.Text))
End Sub

Private Sub Form_Load()
Label1.Left = 120
Label1.Top = 120
Label1.Caption = "Lato o raggio"
Label1.AutoSize = True

Label2.Left = 120
Label2.Top = 1800
Label2.Caption = "Risultato"
Label2.AutoSize = True

Text1.Left = 120
Text1.Top = 480
Text1.Text = ""

Text2.Left = 120
Text2.Top = 2200
Text2.Text = ""

Command1.Top = 1000
Command1.Left = 120
Command1.Caption = "Area Quadrato"

Command2.Top = 1000
Command2.Left = 1100
Command2.Caption = "Area Cerchio"
End Sub

Function AreaCerchio(raggio As Single) As Single
AreaCerchio = raggio * raggio * 3.14
End Function

Function AreaQuadrato(lato As Single) As Single
AreaQuadrato = lato * lato
End Function



nota l'uso della funzione per restituire il valore senza farlo passare per una variabile e senza scriverlo direttamente nella textbox.
posso così riutilizare la funzione tutte le volte che voglio.
Spero ti sia di aiuto!

IlaCrazy
@Crook:mi blocco su quale comando dover usare x indicare che se si seleziona il cerchio allora l'area deve avere una certa formul,ain caso contrario un'altra......
@Eugenio: grazie 1000 ora provo......
tra poco posto come l'ho fatto..........

IlaCrazy
Allora,faccio una legenda dei nomi assegnati:
txt1= la textbox in cui metto il valore del lato
txtris=la textbox del risultato
Opt1= seleziono cerchio
Opt= seleziono quadrato

Private Sub cmd1_Click()
Dim a As Integer
Dim ris As Integer
a = txt1.Text
If Opt1.Value = True Then
ris = a * a * 3.14
Else
If Opt2.Value = True Then
ris = a * a
End If
txtris.Text = ris

End Sub



Cosa sbaglio???
Non funziona!!!
Grazie anke a johnjohn ora lo provo!!!

johnjohn2
per peima cosa Txt1.text è una stringa e non un numero e la devi quindi convertire prima di usarla :
a = Val(txt1.Text)

poi sia "a" che "ris" non devono essere integer ma Single soprattutto se moltiblichi per 3.14!!!

If Opt1.Value = True Then
ris = a * a * 3.14
end if
If Opt2.Value = True Then
ris = a * a
End If

hai sbagliato a scrivere gli if.... End if, come ho scritto io è giusto.

Riprova.... ci sei quasi... solo ualche errore di sintassi!!

IlaCrazy
Private Sub cmd1_Click()
Dim a As Single
Dim ris As Single
a = Val(txt1.Text )
If Opt1.Value = True Then
ris = a * a * 3.14
Else
If Opt2.Value = True Then
ris = a * a
End If
End if
txtris.Text = ris
End Sub

Così credo funzioni.. ....... grazie tntss!!

johnjohn2
si... adesso dovrebbe andare ma il secondo if...end if si può togliere.

bravo

TomSawyer1
Basta che scrivi
if opt1.value=true then
ris=a^2*3.14
else
ris=a^2
end if

Comunque, VB6 fa la conversione automaticamente, non serve il Val; e, in ogni caso, è più corretto scrivere CSng.
Poi, usare le variabili di tipo single non ha senso, in questo caso, perché hai quelle a precisione doppia, le double.

IlaCrazy
Grazie ancora x ttt le info!! ora ho capito!!!!
Essendo all'inizio di Vb6 faccio ancora un pò fatica ad orientarmi.....

Se avete qualke esercizio da proporre,ve ne sarei mlt grata!!!!!!!!!

TomSawyer1
Ok, allora prova a fare un programma che, inserendo i coefficienti di un polinmio di 2° grado, ne calcoli le radici in $RR$, cioè solo se delta >= 0.

IlaCrazy
Provo a postare l'esercizio di risoluzione di un'equazione di 2° grado come rikiesto:

Dim a, b, c As Integer
Dim ris1, ris2 As Double
Dim delta As Long

Private Sub cmdcalcola_GotFocus()
a = txta.Text
b = txtb.Text
c = txtc.Text
delta = b ^ 2 - 4 * a * c
If delta < 0 Then
MsgBox "il delta è <0,reinserire i coeff", , "ATTENZIONE"
txta.Text = ""
txtb.Text = ""
txtc.Text = ""
txtris.Text = ""
txta.SetFocus
Else
ris1 = -b + Math.Sqr(delta) / 2 * a
ris2 = -b - Math.Sqr(delta) / 2 * a
End If
txtris.Text = CStr(ris1) & " " & CStr(ris2)




End Sub

Private Sub cmdesci_Click()
End
End Sub


Private Sub txta_Change()
Dim a As Integer

a = txta.Text

If IsNumeric(a) = False Then
MsgBox "si deve inserire un valore numerico", vbCritical, "Attenzione"
Cancel = True
Else
If txta.Text = "" Then
MsgBox "inserire un numero", vbInformation
Cancel = True
End If
End If


End Sub


Private Sub txta_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyReturn
txtb.SetFocus
End Select
End Sub



Private Sub txtb_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyReturn
txtc.SetFocus
End Select

End Sub



Private Sub txtc_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyReturn
cmdcalcola.SetFocus
End Select
End Sub


DITEMI SE è CORRETTO!!!!!
GRAZIEEEEEEEEEE

IlaCrazy
Per la cronaca,l'utente inserisce i coefficienti a,b,c dell'equazione. La textbox di risultato è txtris.

TomSawyer1
Sì, va bene, mi piace il fatto che premendo Enter ti sposti sull'altro coefficiente :wink:. Vanno riscritti ris1 e ris2, cioè ris1 = (-b-sqr(delta))/(2*a) e ris2 = (-b+sqr(delta))/(2*a). Puoi benissimo omettere il Math. .

IlaCrazy
Ah!!!! ko allora grazie 10000!!!!!!!!!!!!!!!!

IlaCrazy
Ne ho un altro da proporre abbastanza urgente:
dato in input un numero n,mandare in output la somma di tutti i numeri primi da zero a n...
Come faccio a scrivere con Vb i numeri primi??
Può servire la funzione mod??
Grazie a tutti!!!

TomSawyer1
Certo che serve.

L'algoritmo abbastanza efficiente per decidere se un numero è primo:
Function IsPrime(n as long) as boolean
dim i as long
if n mod 2 = 0 then IsPrime = false: Exit Function
for i=3 to sqr(n) step 2
if n mod i = 0 then IsPrime = false: Exit Function
next i
IsPrime = true
End Function

Usa il classico crivello di Eratostene, andrà bene.

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