Hoe tel je alle cijfers per kolom in een array met elkaar op;
-
- Berichten: 56
Hoe tel je alle cijfers per kolom in een array met elkaar op;
Hallo
Op school volg ik programmeren en omdat ik niet zo goed ben in arrays probeer ik voor mezelf een oefening te maken. (Ik ben nog een beginner).
De oefening:
Een groep van 10 personen krijgt punten voor 3 vakken.
Eerst moet er een inputbox verschijnen met 'geef de naam' en dan vervolgens punten van 'vak1, vak2 en vervolgens vak 3' en dit moet zich
10 keer herhalen. De namen moeten in een apparte array van 10 staan en de punten in een andere array van 10 rijen en 3 kolommen.
dan moeten alle gegevens netjes onder elkaar staan in een multiline textbox of itemlist:
NAAM VAK1 VAK2 VAK3 PROCENT
naam: Punt1 punt2 punt 3, procent
naam: punt1, punt2 punt 3, procent
___________________________
Gem. vak1 " vak2 "vak 3
Dan moeten de percentages er nog bij en de gemiddelden. De percentages lukten maar de gemiddelden niet.
Ik vraag me af hoe je dus alle gegevens optelt in de eerste kolom, dan de 2e en zo telkens appart afdrukt en onder
die streep zet.
Dit is mijn code:
Public Class Form1
Dim naam(10)
Dim punten(10, 3)
Dim leerlingen As Integer = 2
Dim vak(1, 3)
Dim gemiddelde As Decimal
Dim procent As Decimal
Private Sub btnBereken_Click(sender As Object, e As EventArgs) Handles btnBereken.Click
vak(1, 1) = "Pascal"
vak(1, 2) = "COBOL"
vak(1, 3) = "C"
For i = 1 To leerlingen
naam(i) = InputBox("Voer naam voor nieuwe leerling in")
For y = 1 To 3
punten(i, y) = InputBox("Voer punten voor vak " & vak(1, y) & " in")
Next
MsgBox("de punten van " & naam(i) & " zijn " & procent)
Next
End Sub
Private Sub bnToon_Click(sender As Object, e As EventArgs) Handles bnToon.Click
For i = 1 To leerlingen
txtArray.Text = txtArray.Text & vbCrLf & naam(i) & Space(5)
procent = 0
gemiddelde = gemiddelde + punten(1, i)
For y = 1 To 3
txtArray.Text = txtArray.Text & punten(i, y) & Space(2)
procent = procent + punten(i, y) / 6 * 10
Next
txtArray.Text = txtArray.Text & Space(5) & "| " & Math.Round(procent, 2) & " % "
Next
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
End Class
Ik hoop dat het beetje duidelijk is.
alvast bedankt.
Op school volg ik programmeren en omdat ik niet zo goed ben in arrays probeer ik voor mezelf een oefening te maken. (Ik ben nog een beginner).
De oefening:
Een groep van 10 personen krijgt punten voor 3 vakken.
Eerst moet er een inputbox verschijnen met 'geef de naam' en dan vervolgens punten van 'vak1, vak2 en vervolgens vak 3' en dit moet zich
10 keer herhalen. De namen moeten in een apparte array van 10 staan en de punten in een andere array van 10 rijen en 3 kolommen.
dan moeten alle gegevens netjes onder elkaar staan in een multiline textbox of itemlist:
NAAM VAK1 VAK2 VAK3 PROCENT
naam: Punt1 punt2 punt 3, procent
naam: punt1, punt2 punt 3, procent
___________________________
Gem. vak1 " vak2 "vak 3
Dan moeten de percentages er nog bij en de gemiddelden. De percentages lukten maar de gemiddelden niet.
Ik vraag me af hoe je dus alle gegevens optelt in de eerste kolom, dan de 2e en zo telkens appart afdrukt en onder
die streep zet.
Dit is mijn code:
Public Class Form1
Dim naam(10)
Dim punten(10, 3)
Dim leerlingen As Integer = 2
Dim vak(1, 3)
Dim gemiddelde As Decimal
Dim procent As Decimal
Private Sub btnBereken_Click(sender As Object, e As EventArgs) Handles btnBereken.Click
vak(1, 1) = "Pascal"
vak(1, 2) = "COBOL"
vak(1, 3) = "C"
For i = 1 To leerlingen
naam(i) = InputBox("Voer naam voor nieuwe leerling in")
For y = 1 To 3
punten(i, y) = InputBox("Voer punten voor vak " & vak(1, y) & " in")
Next
MsgBox("de punten van " & naam(i) & " zijn " & procent)
Next
End Sub
Private Sub bnToon_Click(sender As Object, e As EventArgs) Handles bnToon.Click
For i = 1 To leerlingen
txtArray.Text = txtArray.Text & vbCrLf & naam(i) & Space(5)
procent = 0
gemiddelde = gemiddelde + punten(1, i)
For y = 1 To 3
txtArray.Text = txtArray.Text & punten(i, y) & Space(2)
procent = procent + punten(i, y) / 6 * 10
Next
txtArray.Text = txtArray.Text & Space(5) & "| " & Math.Round(procent, 2) & " % "
Next
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
End Class
Ik hoop dat het beetje duidelijk is.
alvast bedankt.
-
- Berichten: 56
Re: Hoe tel je alle cijfers per kolom in een array met elkaar op;
Ondertussen al opgelost door een apparte for loop te maken. Desondanks zijn alternatieve, kortere of beter versies zijn nog altijd welkom.
-
- Berichten: 12.262
Re: Hoe tel je alle cijfers per kolom in een array met elkaar op;
Ik denk dat een for(each) loop hier best een aardige oplossing is om het totaal voor een kolom te bereken zodat je uiteindelijk een percentage kunt bereiken via een eenvoudige deling.
Zeker bij dit soort aantallen maakt efficientie niet zoveel uit - even verondersteld dat je het op een redelijk snelle processor doet net op een of ander embedded systeem dat heel energiezuinig moet zijn.
Als je dit echt sneller wilt doen zul je het denk ik in assembly moeten doen: als je de exacte geheugenadressen kent van alle waardes kun je die sneller bij elkaar optellen dan via een for loop. Het lijkt me echter iets dat je alleen zou doen als je extreme problemen had met de snelheid, zeker als je niet 100% zeker bent op welke hardware de code gedraaid wordt.
Wat dat betreft is er wel wat veranderd in informatica: ooit was het belangrijk om zaken zo efficient mogelijk te doen qua gebruik van resources (cpu cycles, geheugen etc), maar tegenwoordig is de kostenbesparing op programmeurs meestal hoger dan wat het je aan extra hardware kost om het wat minder efficient aan te pakken
Zeker bij dit soort aantallen maakt efficientie niet zoveel uit - even verondersteld dat je het op een redelijk snelle processor doet net op een of ander embedded systeem dat heel energiezuinig moet zijn.
Als je dit echt sneller wilt doen zul je het denk ik in assembly moeten doen: als je de exacte geheugenadressen kent van alle waardes kun je die sneller bij elkaar optellen dan via een for loop. Het lijkt me echter iets dat je alleen zou doen als je extreme problemen had met de snelheid, zeker als je niet 100% zeker bent op welke hardware de code gedraaid wordt.
Wat dat betreft is er wel wat veranderd in informatica: ooit was het belangrijk om zaken zo efficient mogelijk te doen qua gebruik van resources (cpu cycles, geheugen etc), maar tegenwoordig is de kostenbesparing op programmeurs meestal hoger dan wat het je aan extra hardware kost om het wat minder efficient aan te pakken
Victory through technology
-
- Berichten: 7.068
Re: Hoe tel je alle cijfers per kolom in een array met elkaar op;
Ik ben niet heel erg bekend met VB. Je bent gewaarschuwd.
In feite heb je een tabel. Elk vakje in je tabel draagt aan twee zaken bij: het gemiddelde van een kolom en het percentage per rij (ik heb geen idee wat je met dit laatste bedoelt). Het is het efficiëntst om elk vakje maar 1 keer te bekijken (= de tabel maar 1 keer volledig te doorlopen). Dit kan met twee for-lussen. Bestudeer het volgende stukje code om te zien hoe:
In feite heb je een tabel. Elk vakje in je tabel draagt aan twee zaken bij: het gemiddelde van een kolom en het percentage per rij (ik heb geen idee wat je met dit laatste bedoelt). Het is het efficiëntst om elk vakje maar 1 keer te bekijken (= de tabel maar 1 keer volledig te doorlopen). Dit kan met twee for-lussen. Bestudeer het volgende stukje code om te zien hoe:
Code: Selecteer alles
Dim vakken() As String = {"Haskell", "Javascript", "C"}
Dim studenten() As String = {"Henk", "Ingrid"}
Dim punten = {
{1.0, 2.0, 3.0},
{4.0, 5.0, 6.0}
}
Dim somVak(vakken.Length)
Dim somStudent
For s As Integer = 0 To (studenten.Length - 1)
somStudent = 0
For v As Integer = 0 To (vakken.Length - 1)
somVak(v) = somVak(v) + punten(s, v)
somStudent = somStudent + punten(s, v)
Next
// gemiddelde student = (somStudent / vakken.Length))
Next
// gemiddeldes per vak: (somVak(0) / studenten.Length), (somVak(1) / studenten.Length) en (somVak(2) / studenten.Length)