# Week 1

{% hint style="info" %}
Ook dit hoofdstuk bevat meer oefeningen dan je lief zijn. Zoek zelf de oefeningen uit die je aanspreken en focus je op het leren werken met methoden en deze te integreren in een grotere applicatie.

Tip van een lector: meestal als een boek veel oefeningen van een bepaald onderwerp bevat is de kans bestaande dat dit onderwerp misschien wel eens belangrijk kan zijn ;)
{% endhint %}

{% hint style="warning" %}
Opgelet: wanneer je een oefening maakt die invoer van de gebruiker vereist, gelieve die invoer dan BUITEN de methode te vragen (dus meestal in de `Main` methode). **Op die manier zorg je er voor dat je je methoden kunt herbruiken.**
{% endhint %}

{% hint style="info" %}
Sommige oefeningen zijn van de vorm "Maak een methode die...". Het is steeds de bedoeling dat je de werking van je methode ook test in je main door deze aan te roepen.
{% endhint %}

## Opwarmers (_Essential_)

Een extra grote hoop oefeningen om je methoden te drillen ([originele bron](https://codeforwin.org/2016/03/functions-programming-exercises-and-solutions-in-c.html)). De oefeningen zijn ongeveer gerangschikt naar moeilijkheid.

{% hint style="warning" %}
**OPGELET**: de naam van de methode geeft meestal aan wat er juist moet gebeuren. **`ReadLine` en `WriteLine` mag je bijna NOOIT in methoden gebruiken**. Enkel als de methode bijvoorbeeld `ToonGetal` heet dan zal je iets met `WriteLine` IN de methode moeten doen. Heet de methode `VraagGetal` dan zal je inderdaad ReadLine mogen gebruiken. In bijna alle andere gevallen mag dat niet en is het dus de bedoeling dat je de vereiste informatie als parameters aan de methode meegeeft (i.p.v `ReadLine`), en het resultaat als return teruggeeft (i.p.v. `WriteLine`).
{% endhint %}

Iedere oefening verwacht dat je steeds een methode schrijft en de werking ervan aantoont:

* Methode `Kwadraat` die het kwadraat van een ingevoerd getal berekent ( het getal geef je mee als parameter).
* Methode `BerekenStraal` die de straal van een cirkel kan berekenen waarvan je de diameter meegeeft (de diameter geef je mee als parameter).
* Idem voor omtrek en oppervlakte.
* Methode die het grootste van 2 getallen teruggeeft (beide getallen geef je mee als parameter).
* Methode `IsEven` die bepaalt of een getal even of oneven is (geeft een `bool` terug die `true` is indien even).
* Methode `ToonOnEvenNummers` die alle oneven getallen van 1 tot n toont waarbij n als parameter wordt meegegeven.
* (PRO) Methode `IsArmstrong` die bepaalt of een getal een Armstrong getal is.
* (PRO)Methode `ToonArmstrongNummers` die alle Armstrong nummers tot n toont.

## Basic

Maak een methode die jezelf voorstelt op het scherm in de vorm van "Ik ben Tim Dams, ik ben 18 jaar oud en woon in de Lambrisseringsstraat 666". Deze informatie mag hardcoded in je methode staan. Bedoeling is dat je de methode kan aanroepen als volgt:

```csharp
MyIntro();
```

{% hint style="info" %}
Deze methode toont enkel zaken op het scherm en heeft dus als returntype `void`.
{% endhint %}

### Basic 2

Zorg er voor dat je nu je naam, leeftijd en adres via parameters kan meegeven en dus de methode als volgt kunt aanhouden:

```csharp
MyIntro("Jos", 34, "Trammezantlei 21");
```

## Grootste methode

Schrijf een methode die 3 ints aanvaardt en vervolgens de grootste van de 3 parameters als resultaat terug geeft.

## Rekenmachine (_Essential_)

Maak minimaal de methoden genaamd `TelOp`, `TrekAf`, `Vermenigvuldig` en `Deel`. Je kan aan deze methoden steeds twee doubles meegeven en het resultaat dat terugkomt is uiteraard de bewerking van die twee parameters.

Maak een eenvoudig programma waarin je die methoden test.

## ChatGPT generator (_Essential_)

**Dit is geen oefening, maar wel een manier om voor je zelf extra oefeningen te maken.**

Gebruik volgende prompt om één of meerdere goede Methoden-oefeningen te genereren. Vervang "XXXX" door een onderwerp of genre waar je interesse in hebt (bijvoorbeeld "counterstrike", "F1 racing", etc.).

" Je bent een lector van een hogeschool die studenten helpt met programmeren. Je bent heel goed in interessante opgaves in C# te ontwikkelen die studenten motiveert om te blijven programmeren.

Verzin een C# oefening voor mij die me doet oefenen op methoden. Methoden geven maximum 1 element terug. Gebruik dus geen tuples of sets van returntypes bij methoden.

Volgende zaken mogen in de oefening aanwezig zijn:variabelen, if else, switch, expressies, de math bibliotheek en loops. De nadruk ligt op het oefenen op methoden.

Volgende zaken mogen niet in de oefening aan bod komen: arrays, lists, linq en object georiënteerd programmeren.

Laat de oefening gaan over XXXX. Toon geen voorbeeldcode of oplossing. Toon wel voorbeelduitvoer. Leg ook expliciet uit welke methoden ik moet schrijven en hoe ze werken Stel ook 3 mogelijke uitbreidingen voor. "

{% hint style="warning" %}
**OPGELET**: zoals je weet bestaat de kans dat ChatGpt toch oefeningen maakt die je nog niet kan, ondanks de prompt. Het kan bijvoorbeeld gebeuren dat de oefening toch vereist dat je al weet wat arrays zijn. In dat geval kan je zelf de oefening voor je zelf vereenvoudigen, of vragen aan ChatGPT om het stuk dat je niet begrijpt er uit te halen (of uit te leggen wat hij juist bedoelt).
{% endhint %}

### Klaar?

Gebruik volgende prompt om je code te verbeteren en evalueren, waarbij je "XXXX" vervang door je volledige code. OPGELET: doe dit in dezelfde chat als waarin je de opdracht prompt genereert:

" Hierna volgt mijn oplossing. Kan je deze evalueren op correctheid, naamgeving, mate van overbodige code, etc., Let op: we mogen geen gebruik maken van van arrays, linq, lambdas, goto, break mag enkel in switch, events, delegates en objectgeoriënteerd programmeren. Geef vooral aandacht aan het gebruik van methoden, wat het hoofddoel van de opdracht was. Hier mijn code: XXXX "

{% hint style="info" %}
ChatGPT kan wispelturig zijn. Als test moet je eens onderstaande prompt gebruiken om een voorbeeldoplossing te genereren. Vervolgens voer je zijn oplossing terug in via de voorgaande prompt om je code te evalueren. Ook z'n eigen code zal ChatGPT kritisch bekijken en soms met terechte verbeteringen afkomen.
{% endhint %}

### Weet je niet hoe aan de oefening te beginnen?

Gebruik volgende prompt, in dezelfde chat om een voorbeeldoplossing te krijgen:

" Los deze oefening voor me op in c#. Zonder gebruik te maken van arrays, linq, goto, break op een andere plaats dan een switch, lambdas, events, delegates en object georiënteerdprogrammeren. Plaats bij de code de nodige commentaar. De nadruk ligt op leren werken met methoden. Geef dus aandacht in je commentaar in de uitleg van hoe deze methoden geschreven werden. "

## Pro Rekenmachine

Kan je een eenvoudige zakrekenmachine maken (inclusief geheugen)? Voeg extra methoden naar keuze toe (denk aan macht, sinus, cosinus, modulo, etc.).

## Paswoord generator methode

Maak een paswoord generator die paswoorden van bepaalde lengte genereert en bestaat uit willekeurige letters, hoofdletters en cijfers. Plaats deze code in een methode die 1 parameter aanvaardt namelijk de lengte van het paswoord dat gemaakt moet worden. De methode geeft het gegenereerde paswoord terug als resultaat. (tip gebruik een random number generator(s) om getallen te genereren die je ook kan casten naar chars dankzij de Unicode waarde van chars).
