Archief - [PROG][C#] iets delen vanuit een arraylist

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

maxdevis

Legacy Member
waarom werkt deze deling niet:
werkt niet zei:
public void BerekenGeslaagden()
{
System.Console.WriteLine("Geef het vak:");
string v = System.Convert.ToString(System.Console.ReadLine());
float teller = 0;
float noemer = 0;
float f;
const float helft = 0.5f;
foreach (Student s in Lijst)
{
foreach (Examen e in s.Examenlijst)
{
if (e.Vak == v)
{


if ((e.Score/e.Maximum) >= helft)
{
teller++;
}
noemer++;
}
}
}
f = (teller / noemer)*100;
System.Console.WriteLine("Het percentage geslaagden van het vak {0} bedraagt {1}%.\n", v, f);
}

werkt wel zei:
public void BerekenGeslaagden()
{
System.Console.WriteLine("Geef het vak:");
string v = System.Convert.ToString(System.Console.ReadLine());
float teller = 0;
float noemer = 0;
float f;
const float helft = 0.5f;
foreach (Student s in Lijst)
{
foreach (Examen e in s.Examenlijst)
{
if (e.Vak == v)
{

float tempscore = e.Score;
float tempmax = e.Maximum;
if (tempscore / tempmax >= helft)
{
teller++;
}
noemer++;
}
}
}
f = (teller / noemer)*100;
System.Console.WriteLine("Het percentage geslaagden van het vak {0} bedraagt {1}%.\n", v, f);
}

in de veronderstelling dat er een Arraylist Lijst met personen is, die elk een arraylist Examenlijst met examens hebben.

als er een gemakkelijkere manier is om dat te berekenen, graag!
dit is waarschijnlijk een beginners-oplossing (logisch ook :p ).

edit:sorry voor de wanorde, maar blijkbaar wil dit forum alles links gecentreerd

killgore

Legacy Member
uhu

/ met enkel ints geeft een gehele deling en geeft als resultaat dus ook een int

bv.

4/5 = 0
4/4 = 1
4/3 = 1
4/2 = 2

als je het met floats doet (tenminste 1 van de getallen is float) dan zal je dit krijgen:
4.0/5 = 0.8
4.0/4 = 1.0
4.0/3 = 1.3333...
4.0/2 = 2.0

Aangezien de score altijd kleiner of gelijk is ana het maximum (normaal gezien toch :p) gaat hij dus bijna altijd 0 geven bij jou ;).

deze code zal dus normaal gezien werken:
Code:
public void BerekenGeslaagden()
{
System.Console.WriteLine("Geef het vak:");
string v = System.Convert.ToString(System.Console.ReadLine()) ;
float teller = 0;
float noemer = 0;
float f;
const float helft = 0.5f;
foreach (Student s in Lijst)
{
foreach (Examen e in s.Examenlijst)
{
if (e.Vak == v)
{


if (((float)(e.Score)/e.Maximum) >= helft)
{
teller++;
}
noemer++;
}
}
}
f = (teller / noemer)*100;
System.Console.WriteLine("Het percentage geslaagden van het vak {0} bedraagt {1}%.\n", v, f);
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan