Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

C# while loop

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Jancsharp
  • Registratie: september 2020
  • Laatst online: 13-09 15:38
Mijn vraag
Hoe lees ik dit (in het Nederlands? Probeer C# te leren als hobby (reeds 64 jaar oud).

Relevante software en hardware die ik gebruik
Deze opdrachten komt uit het boek HeadFirst CSharp derde editie.

Wat ik al gevonden of geprobeerd heb
Ik heb alle voorbeelden op het internet opgezocht. Maar dit wordt niet duidelijk. Waarom twee maal het woord Count in de statements (oef 1) en hoe lees ik dat? Waarom twee loops(oefeningen 2 en 3) in elkaar en opnieuw: hoe lees je dat? Neem je een getal en vul je dat in? En welk getal begin je dan mee? Waarom in oefening 2 een int j definieren maar in de while loop staat ineens een int i? Kortom: ik weet niet waar te beginnen!

Iemand suggesties?

Jancsharp

Beste antwoord (via Jancsharp op 13-09-2020 15:39)


  • M2M
  • Registratie: juli 2006
  • Laatst online: 23:05

M2M

medicijnman

Jancsharp schreef op zondag 6 september 2020 @ 15:54:
Ah, oefening 1 wordt duidelijk: De twee counts tussen de curly brackets, moeten worden gelezen als: het antwoord uit count 1 moet ingevoerd worden in count 2 en dan krijg je dus -15. Dan snap ik dat die loop maar 1 keer loopt. Dank "M2M" en "onbekend"!!!
Ik denk dat het begint bij les 0. In alle programmeertalen bestaan dingen als keywords. Dat betekent niets meer of minder dan het volgende;

Als ik een stuk tekst intyp dat ik wil laten uitvoeren als C# code en ik typ een keyword, dan verwacht de computer een klein stukje structuur en weet de computer welke actie uitgevoerd moet worden.

Bijvoorbeeld regel 2 van voorbeeld 1;
int count = 5;

Dat int is een keyword. Als je dat intypt weet de computer dat je een variabele wil definiëren. Die variabele heeft als type integer (enkel hele getallen, dus geen 3,5) en verwacht dus ook wat extra informatie.

int [variabele naam] = [waarde van die variabele];

Dat count ding is dus geen keyword, maar iets jij als programmeur verzonnen hebt. Die naam mag zo lang zijn als je wil en alles zijn wat je wil, behalve keywords. Dit mag dus niet;

int while = 3;
Oefening 2 is mij nog niet helemaal duidelijk, al gloort er licht aan de horizon, haha! De forloop met i als variabele voer je eerst uit en dan snap ik dat die 7x loopt. Maar de verbinding die je vervolgens tussen de i variabele en de j variabele is niet duidelijk. Mat name dit zinnetje van M2M is raadselachtig maar volgens mij zeer cruciaal: "Daarom definieer je j=2 buiten de forloop en kun je 'm binnen de forloop gebruiken".
Oefening 2 maakt het geheel al een stuk lastiger, en ik denk dat je de forloop wel door hebt. De while loop die erin zit werkt als volgt;

De eerste keer dat de forloop uitgevoerd wordt, heeft j de waarde 2. Vervolgens zie je
code:
1
j = j - 1
staan. Dit betekent dat de variabele genaamd j, die eerst de waarde 2 had, nu de waarde 1 krijgt.

Dan begint de while loop (nog steeds in de eerste keer dat de forloop uitgevoerd wordt), waarbij de whileloop net zo lang blijft lopen zolang j een waarde heeft die kleiner is dan 25. We weten dat j inderdaad kleiner is dan 25, dus die while loop wordt net zolang uitgevoerd tot j een waarde bereikt heeft die groter of gelijk is aan 25.

Binnen die while loop staat aangegeven dat met elke iteratie, j met 5 verhoogd wordt. Binnen de eerste FOR loop wordt de While loop dus 5 keer uitgevoerd met als eindresultaat j = 26.

De tweede keer dat de FOR loop loopt, wordt j in waarde verminderd naar 25. Dat is nog steeds groter of gelijk aan de 25 in de while loop, die while loop doet dus niks.

De derde keer dat de FOR loop loopt, wordt j in waarde verminderd naar 24. Dat is inmiddels kleiner dan 25, die while loop loopt dus 1 keer waarna j de waarde 29 krijgt.


In het kort komt het er dus op neer dat na de eerste for loop, de while loop 1 maal uitgevoerd wordt, elke 5 FOR loops.

-_-

Alle reacties


  • RobIII
  • Registratie: december 2001
  • Laatst online: 00:20

RobIII

Admin Devschuur®

^ Romeinse 3 ja!

Zonder context of beschrijving van de oefeningen zien wij niet heel veel meer dan wat jij hier post en waarom de count dan enkele keren in een loop voorkomt is mij ook een raadsel; ik denk dat het gewoon rare voorbeelden zijn :? Of op z'n minst nutteloos abstracte en nutteloos-in-z'n-algemeenheid voorbeelden.

[Voor 14% gewijzigd door RobIII op 06-09-2020 15:25]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Cyphax
  • Registratie: november 2000
  • Laatst online: 22:09

Cyphax

Moderator NOS
Jancsharp schreef op zondag 6 september 2020 @ 15:09:
Mijn vraag
Hoe lees ik dit (in het Nederlands? Probeer C# te leren als hobby (reeds 64 jaar oud).

Relevante software en hardware die ik gebruik
Deze opdrachten komt uit het boek HeadFirst CSharp derde editie.

Wat ik al gevonden of geprobeerd heb
Ik heb alle voorbeelden op het internet opgezocht. Maar dit wordt niet duidelijk. Waarom twee maal het woord Count in de statements (oef 1) en hoe lees ik dat? Waarom twee loops(oefeningen 2 en 3) in elkaar en opnieuw: hoe lees je dat? Neem je een getal en vul je dat in? En welk getal begin je dan mee? Waarom in oefening 2 een int j definieren maar in de while loop staat ineens een int i? Kortom: ik weet niet waar te beginnen![Afbeelding]

Iemand suggesties?

Jancsharp
Wat een rare voorbeelden, je kunt wel proberen ze logisch te volgen op zich... voorbeeld 1 is een voorbeeld van een loop die uiteindelijk na 1 keer al stopt, want er wordt in 2 regels de variabele 'count' op -15 gezet (1 keer in de vorm van 5 * 3 en vervolgens dat keer -1) waardoor de conditie niet meer 'true' oplevert en de loop dus is geeindigd.

Ik denk dat je beter bent gebaat bij voorbeelden waarbij je je niet steeds afvraagt "waarom doen ze dit?". :)

Misschien zoiets: YouTube: C# Tutorial

[Voor 6% gewijzigd door Cyphax op 06-09-2020 15:19]

Saved by the buoyancy of citrus


  • TweakerVincent
  • Registratie: april 2014
  • Laatst online: 23:56
Ik denk dat ze een voorbeeldje wilde maken dat je ziet dat er met count zaken gebeuren en dat dat gevolgen heeft.

  • M2M
  • Registratie: juli 2006
  • Laatst online: 23:05

M2M

medicijnman

Ok, in't nederlands;

Zo'n While loop kun je zien als een ding dat rondjes blijft lopen, zolang het statement tussen de twee () waar is.

In geval 1 blijft de while loop rondjes lopen zolang de variabele genaamd ' count ' groter is dan 0. Voordat de while loop begint, wordt de variabele count gedefinieerd met een waarde 5. Dit wordt binnen de while loop vermenigvuldigd met 3, waardoor count 15 geworden is. Vervolgens vermenigvuldigd met -1 waarna count dus -15 wordt. Aangezien -15 kleiner is dan 0, stopt de while loop na 1 keer.

De forloop in nummer 2 bestaat uit 3 dingen tussen de (). Het eerste stuk stelt de beginvariabele (i in dit geval). Dan staat er hoe lang de for-loop moet lopen (totdat i kleiner is dan 100). En dan staat er een stukje in voor de verandering in i, na elke keer dat er door de for-loop gelopen wordt.

Aangezien je begint met 1, en dan vermenigvuldigd met 2 elk rondje, loopt het ding dus 7 rondjes in totaal. De laatste keer zal i 64 zijn.

Die j is dus een andere variabele, compleet onafhankelijk van i. Als je die binnen de for-loop definieert, zal j zichzelf elke keer "resetten" naar zijn beginwaarde. Daarom definieer je j=2 buiten de forloop en kun je 'm binnen de forloop gebruiken.

In vraag 2 gebeuren dus bijzondere zaken aangezien hierin een while-loop in een forloop genesteld zit. Als je wil weten wat daar gebeurt, kun je het beste de code even in je favoriete codeerprogramma stoppen en het programma regel voor regel uitvoeren. Per stap houd je dan de variabelen i en j in de gaten om uit te vogelen hoe ze precies veranderen.

-_-


  • Jancsharp
  • Registratie: september 2020
  • Laatst online: 13-09 15:38
Ja, in het boek zijn dit voorbeelden van Loops met als commentaar
Here are a few loops. Write down if each loop will repeat forever or eventually end. If
it’s going to end, how many times will it loop? Also, answer the questions in the
comments in loops #2 and #3.¨


De antwoorden staan er dus onder. Maar ze zeggen mij niets. Vooral omdat ik niet begrijp hoe je bijvoorbeeld oefening 1 leest. Hoe verhouden zich de twee "Counts" tot elkaar. Hoe lees je in oefening twee de nested loop? Vul je zomaar een getal in OF staat dat gedefineerd in j of in int i??

  • Onbekend
  • Registratie: juni 2005
  • Laatst online: 23:10
@Jancsharp
Count is één variabele. Op de eerste regel wordt daar de waarde 5 aan toegekend.
Daarna wordt gekeken of die waarde groter dan 0 is, en dat is hij.
Daarna wordt de variabele count met de waarde count x 3 gevuld. Aangezien count 5 was, wordt dat nu 5x3 = 15.
In de volgende stap wordt de waarde van count keer -1 gedaan. Dus nu komt in count de waarde 15 keer -1 = -15 te staan.

Einde while loop, dus terug naar het begin om de waarde van count te vergelijken. Is count groter dan 0? Nee, hij is -15, dus doet de while loop dat niet nog eens. En nu heeft hij het eind van de code bereikt.


@de rest:
Dit soort vragen zijn vragen die ik bij mijn C++/C#-examens op papier kreeg. :) Hartstikke leuk om te testen of je voldoende kennis bezit, maar niet handig als beginnerscursus. :)

Speel ook Airplane Manager en Repeat


  • Boudewijn
  • Registratie: februari 2004
  • Niet online

Boudewijn

omdat het kan

Kun je de code in de loop eens 5x achter elkaar op schrijven? Uit oefening 1. En wat is count na 5x?

[Voor 12% gewijzigd door Boudewijn op 06-09-2020 15:40]

Ik ben verslaafd aan koken. Volg me op https://www.kookjunk.nl


  • Jancsharp
  • Registratie: september 2020
  • Laatst online: 13-09 15:38
Ah, oefening 1 wordt duidelijk: De twee counts tussen de curly brackets, moeten worden gelezen als: het antwoord uit count 1 moet ingevoerd worden in count 2 en dan krijg je dus -15. Dan snap ik dat die loop maar 1 keer loopt. Dank "M2M" en "onbekend"!!!

Oefening 2 is mij nog niet helemaal duidelijk, al gloort er licht aan de horizon, haha! De forloop met i als variabele voer je eerst uit en dan snap ik dat die 7x loopt. Maar de verbinding die je vervolgens tussen de i variabele en de j variabele is niet duidelijk. Mat name dit zinnetje van M2M is raadselachtig maar volgens mij zeer cruciaal: "Daarom definieer je j=2 buiten de forloop en kun je 'm binnen de forloop gebruiken".

  • RobIII
  • Registratie: december 2001
  • Laatst online: 00:20

RobIII

Admin Devschuur®

^ Romeinse 3 ja!

To be honest: ik denk dat je eens moet gaan kijken naar een ander boek / youtube tutorials / een van de vele online leerplatformen (pluralsight, udemy, codecademy, ...). Dit zijn echt superslechte voorbeelden, zeker voor een beginner...

[Voor 14% gewijzigd door RobIII op 06-09-2020 16:01]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Daos
  • Registratie: oktober 2004
  • Niet online
Het zijn geen voorbeelden die je in de praktijk tegenkomt. Je moet er dan ook geen reden of functie achter zoeken. Wat meer het doel is, is leren mentaal te volgen wat er gebeurt. Die eigenschap is an sich wel belangrijk voor het kunnen programmeren.

Je kan de code vanaf boven regel voor regel bekijken en op een papiertje bijhouden wat er in de variabelen zit (of de code uitvoeren en de variabelen printen of in de debugger bekijken bij elke stap). Aan het begin van een loop is er een conditie. Is die waar, dan ga je in de loop-body. Is die niet waar, dan ga je onder de loop verder. Aan het einde van een loop-body spring je weer naar de bovenkant van die loop en kijk je of je conditie nog waar is en zo verder.

Loops kan je dus ook nesten. Ook dan kan je er regel voor regel doorheen stappen en de variabelen bijhouden.

Acties:
  • Beste antwoord
  • +1Henk 'm!

  • M2M
  • Registratie: juli 2006
  • Laatst online: 23:05

M2M

medicijnman

Jancsharp schreef op zondag 6 september 2020 @ 15:54:
Ah, oefening 1 wordt duidelijk: De twee counts tussen de curly brackets, moeten worden gelezen als: het antwoord uit count 1 moet ingevoerd worden in count 2 en dan krijg je dus -15. Dan snap ik dat die loop maar 1 keer loopt. Dank "M2M" en "onbekend"!!!
Ik denk dat het begint bij les 0. In alle programmeertalen bestaan dingen als keywords. Dat betekent niets meer of minder dan het volgende;

Als ik een stuk tekst intyp dat ik wil laten uitvoeren als C# code en ik typ een keyword, dan verwacht de computer een klein stukje structuur en weet de computer welke actie uitgevoerd moet worden.

Bijvoorbeeld regel 2 van voorbeeld 1;
int count = 5;

Dat int is een keyword. Als je dat intypt weet de computer dat je een variabele wil definiëren. Die variabele heeft als type integer (enkel hele getallen, dus geen 3,5) en verwacht dus ook wat extra informatie.

int [variabele naam] = [waarde van die variabele];

Dat count ding is dus geen keyword, maar iets jij als programmeur verzonnen hebt. Die naam mag zo lang zijn als je wil en alles zijn wat je wil, behalve keywords. Dit mag dus niet;

int while = 3;
Oefening 2 is mij nog niet helemaal duidelijk, al gloort er licht aan de horizon, haha! De forloop met i als variabele voer je eerst uit en dan snap ik dat die 7x loopt. Maar de verbinding die je vervolgens tussen de i variabele en de j variabele is niet duidelijk. Mat name dit zinnetje van M2M is raadselachtig maar volgens mij zeer cruciaal: "Daarom definieer je j=2 buiten de forloop en kun je 'm binnen de forloop gebruiken".
Oefening 2 maakt het geheel al een stuk lastiger, en ik denk dat je de forloop wel door hebt. De while loop die erin zit werkt als volgt;

De eerste keer dat de forloop uitgevoerd wordt, heeft j de waarde 2. Vervolgens zie je
code:
1
j = j - 1
staan. Dit betekent dat de variabele genaamd j, die eerst de waarde 2 had, nu de waarde 1 krijgt.

Dan begint de while loop (nog steeds in de eerste keer dat de forloop uitgevoerd wordt), waarbij de whileloop net zo lang blijft lopen zolang j een waarde heeft die kleiner is dan 25. We weten dat j inderdaad kleiner is dan 25, dus die while loop wordt net zolang uitgevoerd tot j een waarde bereikt heeft die groter of gelijk is aan 25.

Binnen die while loop staat aangegeven dat met elke iteratie, j met 5 verhoogd wordt. Binnen de eerste FOR loop wordt de While loop dus 5 keer uitgevoerd met als eindresultaat j = 26.

De tweede keer dat de FOR loop loopt, wordt j in waarde verminderd naar 25. Dat is nog steeds groter of gelijk aan de 25 in de while loop, die while loop doet dus niks.

De derde keer dat de FOR loop loopt, wordt j in waarde verminderd naar 24. Dat is inmiddels kleiner dan 25, die while loop loopt dus 1 keer waarna j de waarde 29 krijgt.


In het kort komt het er dus op neer dat na de eerste for loop, de while loop 1 maal uitgevoerd wordt, elke 5 FOR loops.

-_-


  • Jancsharp
  • Registratie: september 2020
  • Laatst online: 13-09 15:38
Wow, super bedankt voor alle reacties, speciaal die van M2M! Mijn grijze hersenen kraken ervan. Ik begrijp het, maar doorgrond het nog niet (biblisme). Ik ga er de komende dagen nog ettelijke keren naar kijken om het geschetste proces echt te snappen!
Nogmaals bedankt

Jancsharp

  • R4gnax
  • Registratie: maart 2009
  • Laatst online: 20:02
Het is een beetje een mind-fuck voor iedereen met een niet-programmeer achtergrond dat de = in C# en andere soortgelijke talen niet "is gelijk aan" betekent in de wiskundige zin, maar "wordt gelijk gesteld aan."

Talen zoals Pascal zijn wat dat betreft educatief meer verantwoord. Deze gebruiken de operator := om zo'n assignment te bewerkstelligen.

Een assignment werkt van rechts naar links: je rekent eerst uit wat er rechts van de = staat, en dat wordt daarna pas toegekend aan de variable die links staat, waar deze dus de vorige waarde (die mogelijk rechts gebruikt mag worden!) vervangt. Je kunt dus niet zomaar van links naar rechts lezen, want dan raak je de draad kwijt.

Maar probeer het eens in gedachten te lezen zoals een domme computer bovenstaande regels zou toepassen. Dwz.
lees het eens als recept en vertaal het in je hoofd:

code:
1
2
3
4
5
int count = 5;
while(count > 5) {
  count = count * 3;
  count = count * -1;
}
  1. Neem 5 en ken toe aan count
  2. Zolang count groter is dan 5, doe het volgende:
    1. Bereken count * 3 en ken het resultaat toe aan count.
    2. Bereken count * -1 en ken het resultaat toe aan count.
    3. (Terug naar 2.)
  3. (Einde programma.)
Als je dit stelselmatig oefent gaat het op een gegeven moment vanzelf. Je zult (simpele) programma's sneller kunnen lezen en merken dat je met minder moeite kunt zien wat de 'flow' is en wat de code probeert te doen.

Verder overigens chapeau dat je op 64e jarige leeftijd voor de hobby nog het edele programmeervak in gaat duiken. Nooit te oud om te leren, zeggen ze dan. (y)

[Voor 17% gewijzigd door R4gnax op 09-09-2020 17:12]


  • Jancsharp
  • Registratie: september 2020
  • Laatst online: 13-09 15:38
Ha, Rvgnax, ook bedankt voor de aanvulling. Het helpt inderdaad om te vergelijking van rechts naar links te lezen en het = teken niet wiskundig te lezen. Alweer een hele goede tip!!
Pagina: 1


Apple iPhone SE (2020) Microsoft Xbox Series X LG CX Google Pixel 4a CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True