Springen naar inhoud


- - - - -
Solved

Berekenen Gemiddelde

Average

  • Log in a.u.b. om te beantwoorden
Er zijn 4 reacties in dit onderwerp

#1 Langsomt

Langsomt

    Starting Developer

  • Leden
  • 16 berichten
    Laatst bezocht 15 Apr 2012 12:13
  • LocatieMaarkedal

Geplaatst op 12 April 2012 - 13:37


hallo,

Met de kennis die ik tot nu toe opgedaan heb uit het leerboek van Roger Frans heb ik volgende oefening gemaakt uit een ander boek zonder naar de oplossing te kijken.

Men krijgt de uitslag van vier testen en de vierde test telt dubbel, bereken mij hiervan het gemiddelde en toon dit resultaat in een textvenster

De oplossing die ik gebruikt heb is volgende:

Visual Basic Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBereken.Click

		Dim sngTestEen As Single
		Dim sngTestTwee As Single
		Dim sngTestDrie As Single
		Dim sngEindTest As Single

		' Input
		sngTestEen = CSng(txtTestEen.Text)
		sngTestTwee = CSng(txtTestTwee.Text)
		sngTestDrie = CSng(txtTestDrie.Text)
		sngEindTest = CSng(txtEindTest.Text)

		' Berekening en output (eindtest telt dubbel)
		txtGemiddelde.Text = CStr((sngTestEen + sngTestTwee + sngTestDrie + (sngEindTest * 2)) / 5)

	End Sub

Dit is de oplossing in het boek:

Visual Basic Code:
 Private Sub Bereken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bereken.Click

		Dim sngTest1 As Single
		Dim sngTest2 As Single
		Dim sngTest3 As Single
		Dim sngFinalTest As Single
		Dim sngTotal As Single
		Dim sngAverage As Single

		' Input
		sngTest1 = Convert.ToSingle(txtTestEen.Text)
		sngTest2 = Convert.ToSingle(txtTestTwee.Text)
		sngTest3 = Convert.ToSingle(txtTestDrie.Text)
		sngFinalTest = Convert.ToSingle(txtGemiddelde.Text)

		' Processing
		' Calculate average
		' Final test is double
		sngTotal = sngTest1 + sngTest2 + sngTest3 + (sngFinalTest * 2)
		sngAverage = sngTotal / 5

		' Output
		txtGemiddelde.Text = sngAverage.ToString("n1")

	End Sub

Mijn oplossing lijkt korten, ik gebruik twee variabelen minder! Doch, ben ik goed bezig of niet????
We leggen de lat héél hoog, zo kunnen we er makkelijk onderdoor!

#2 chrissie1

chrissie1

    Moderator

  • Moderators
  • 486 berichten
    Laatst bezocht 12 Mar 2013 19:33
  • LocatieMoerbeke-Waas
Inzender

Geplaatst op 12 April 2012 - 13:43

Je bent perfect bezig. alleen doet hij een tostring("n1") en jij niet maar dat verandert niets aan het resultaat van de berekening gewoon aan hoe het wordt weergegeven op het scherm.

#3 Langsomt

Langsomt

    Starting Developer

  • Leden
  • 16 berichten
    Laatst bezocht 15 Apr 2012 12:13
  • LocatieMaarkedal

Geplaatst op 12 April 2012 - 17:10

Oef!! dus toch goe bezig!

de ("n1") zorgt ervoor dat er 1 decimaal na de komma verschijnt, ik weet wel nog niet hoe ik het moet doen in de code die ik geschreven heb.

bedankt voor het nazicht
We leggen de lat héél hoog, zo kunnen we er makkelijk onderdoor!

#4 Vozzie

Vozzie

    Moderator

  • Moderators
  • 1852 berichten
    Laatst bezocht gisteren, 09:40
Inzender

Geplaatst op 12 April 2012 - 22:59

Hallo,

In je code converteer je een "String" naar een "Single". TextBox.Text geeft een "String" terug. Zowel Convert.ToSingle als CSng converteren naar een "Single". Toch geef ik de voorkeur om te converteren aan "Single.TryParse". Het verschil is volgt...

Bij zowel "Convert.ToSingle" als "CSng" is er geen controle of de "String" waarde in de TextBox wel een "Single" is. Is het een getal of tekst? Is het getal niet te groot, te klein? Indien het geen getal is, of een te groot/klein getal, dan zal je een fout krijgen. Daarom moet je fouten bij het gebruik van "Convert.ToSingle" en "CSng" opvangen. Dit kan als volgt...

Visual Basic Code:
'Proberen converteren naar singles
Try
	sngTestEen = CSng(txtTestEen.Text)
	sngTestTwee = CSng(txtTestTwee.Text)
	sngTestDrie = CSng(txtTestDrie.Text)
	sngEindTest = CSng(txtEindTest.Text)
Catch ex As Exception
	' Als het fout loopt een melding geven
	MessageBox.Show("Gelieve correcte getallen in te geven." & vbCrLf & ex.ToString(), "Fout!")
	' En de procedure verlaten
	Return
End Try

Deze foutopvang is belangrijk, ... Maar ... Werken met een Try-Catch zoals in dit voorbeeld is slecht voor de performance indien er zich veel fouten voordoen. Daarom is TryParse beter. Voorbeeldje,...

Visual Basic Code:
If Not Single.TryParse(txtTestEen.Text, sngTestEen) Then
	MessageBox.Show("Gelieve correcte getallen in te geven.")
	Return
End If
If Not Single.TryParse(txtTestTwee.Text, sngTestTwee) Then
	MessageBox.Show("Gelieve correcte getallen in te geven.")
	Return
End If
If Not Single.TryParse(txtTestDrie.Text, sngTestDrie) Then
	MessageBox.Show("Gelieve correcte getallen in te geven.")
	Return
End If
If Not Single.TryParse(txtGemiddelde.Text, sngFinalTest ) Then
	MessageBox.Show("Gelieve correcte getallen in te geven.")
	Return
End If

Deze code lijkt natuurlijk veel langer,... maar wat als je de waarden uit de texboxen in een array stopt?

Visual Basic Code:
' een array maken van de 4 textboxen (laatste textbox 2 keer)
Dim strings() As String = {txtTestEen.Text, txtTweeEen.Text, txtDrieEen.Text, txtGemiddelde.Text, txtGemiddelde.Text}
' een array van singles voorzien
Dim singles(strings.Length - 1) As Single
' alle strings uit textboxen aflopen
For i As Integer = 0 To strings.Length-1
	' indien er één geen single is
	If Not Single.TryParse(strings(i), singles(i)) Then
		' foutmelding en procedure verlaten
		MessageBox.Show("Geef overal een nummer in.")
		Return
	End If
Next
' gemiddelde tonen 1 na decimaal teken
MsgBox(singles.Average().ToString("0.0"))

Groetjes
Stappen, keuzes en herhaling combineren is programmeren.
Explicit, Strict and don't Infer

#5 Langsomt

Langsomt

    Starting Developer

  • Leden
  • 16 berichten
    Laatst bezocht 15 Apr 2012 12:13
  • LocatieMaarkedal

Geplaatst op 13 April 2012 - 00:05

Bedankt voor de fijne uitleg en inderdaad, de voorbeeldcode die U geeft lijkt me logisch maar zover ben ik nog niet! dit komt in de volgende hoofdstukken! controle op de ingevoerde waarden, error handling, if then, ect...

Ik was al blij dat het progje draaide zonder te spieken 8-)

Visual Basic Code:
' gemiddelde tonen 1 na decimaal teken
MsgBox(singles.Average().ToString("0.0"))

dit lijntje heb ik toegepast op volgende lijn bij mij

Visual Basic Code:
txtGemiddelde.Text = ((sngTestEen + sngTestTwee + sngTestDrie + (sngEindTest * 2)) / 5).ToString("0.0")

en nu heb ik ook één decimaal na de komma

bedankt
We leggen de lat héél hoog, zo kunnen we er makkelijk onderdoor!





Ook met taq Solved, Average voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Solved] Untitled 1

Hosting provided by Combell
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be