Springen naar inhoud

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


  • Log in om te kunnen reageren

#1

Hippogrief

    Hippogrief


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 06 december 2018 - 14:53

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. 

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Hippogrief

    Hippogrief


  • 0 - 25 berichten
  • 11 berichten
  • Gebruiker

Geplaatst op 07 december 2018 - 16:35

Ondertussen al opgelost door een apparte for loop te maken. Desondanks zijn alternatieve, kortere of beter versies zijn nog altijd welkom.


#3

Benm

    Benm


  • >5k berichten
  • 10756 berichten
  • VIP

Geplaatst op 08 december 2018 - 02:39

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





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures