Springen naar inhoud

Gemiddelde berekenen


  • Log in om te kunnen reageren

#1

phenomen

    phenomen


  • >100 berichten
  • 220 berichten
  • Ervaren gebruiker

Geplaatst op 01 oktober 2011 - 19:29

Hallo

Ik zou iets willen schrijven in C# waarmee ik van een aantal geheel ingevoerde getallen het gemiddelde kan berekenen. Als er een negatief getal ingevuld wordt moet deze het gemiddelde berekenen.

Ik zou zoiets in mijn console willen zien:

1> 63
2> 88
3> 1009
4> -22
"Het gemiddelde is" : Hier moet dan de som van de eerste 3 getallen komen gedeelde door 3.
"Opnieuw berekenen?" "Ja/Nee"


Ik heb dit al staan maar dit doet niet echt correct wat ik zou willen. (berekening van gemiddelde is fout en de for lus blijft doortellen.

int getal = 0;
int som = 0;
double gemiddelde = 0;

for (int i = 1; i > 0; i++)
{

Console.Write(i + ">");
getal = int.Parse(Console.ReadLine());


if (getal > 0)
{
som += getal;
}
else
{
gemiddelde = (som / i);
Console.WriteLine(gemiddelde);
}
}

Iemand die me kan helpen dit te doen met alleen for/do while/while lussen?

Bedankt!

Veranderd door phenomen, 01 oktober 2011 - 19:30


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

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 01 oktober 2011 - 19:56

for (int i = 1; i > 0; i++)


Tenzij je de waarde van i binnen die for lus nog expliciet gaat aanpassen is dit een oneindige loop.

Je zegt, begin op i = 1, verhoog i bij elke stap en blijf dit doen zolang i groter is dan 0.

Ik zou iets doen als:

while(true){
...
	if( negatieve input){
		....
		break;
	}
...
}

Hier maak je ook een oneindige loop aan, maar wanneer je merkt dat de user-input negatief is zeg je dat je uit te loop wil stappen.

Ik zou zoiets in mijn console willen zien:
1> 63
2> 88
3> 1009
4> -22
"Het gemiddelde is" : Hier moet dan de som van de eerste 3 getallen komen gedeelde door 3.
"Opnieuw berekenen?" "Ja/Nee"


...berekening van gemiddelde is fout...

...
Console.Write(i + ">");
...
gemiddelde = (som / i);
...


Zie je zo waardoor het resultaat niet klopt?

In principe kan je de oneindige loop ook maken zoals je hier doet op voorwaarde dat je 'breakt'. Alternatief is de while lus die ik voorstel waar je dan nog een teller inzet. Persoonlijk vind ik de while lus mooier omdat het daar duidelijk is dat de loop oneindig is. Je kan in de while lus ook maken dat je enkel de positieve inputs telt.

#3

phenomen

    phenomen


  • >100 berichten
  • 220 berichten
  • Ervaren gebruiker

Geplaatst op 01 oktober 2011 - 20:31

Enorm bedankt. Ik heb het met die break gedaan.

Ik zie niet in hoe ik dit kan doen werken met een "while"?

#4

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 01 oktober 2011 - 20:45

Ik zie niet in hoe ik dit kan doen werken met een "while"?

Het zijn schoonheidsdetails. Jouw structuur werkt ook, als je die 2 kleine aanpassingen doet, maar voor de volledigheid:

De while loop werkt als volgt:
Je schrijft while(expressie){ code in loop }. Zolang die expressie true is, zal de loop herhaald worden. Als je dus gewoon schrijft while(true) dan is de expressie gewoon true en zal die altijd true blijven. Dit is de meestgebruikte manier om een (met opzet) een oneindige loop te starten.

Je kan dan rustig een voor een inputs aannemen van de user en die verwerken. Wanneer je dan een negatief getal binnenkrijgt dan break je.
Je zal er wel een teller moeten bijzetten om bij te houden hoeveel (positieve) getallen er ingevoerd werden.

Dus:
int i = 0;
while(true){
	if(positief){
	i++;
	...
	}else
		break;
}
Op deze manier heb je ook gewoon de juiste waarde in i en niet in i-1.

Met een for loop heb je die teller al direct en die code zal ook gewoon werken, maar ze is niet zo mooi omdat het niet duidelijk is dat je een oneindige loop hebt.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures