Hoe tel je alle cijfers per kolom in een array met elkaar op;

Moderators: jkien, Xilvo

Reageer
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. 

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 ;)
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:

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)

Reageer