Oefening 4: vuur mij opnieuw
Doel
Verschillende lussen implementeren, testen en debuggen.
Opdracht
- Bereken perfecte getallen.
- Bereken amortisatie tabellen.
- Converteer decimale getallen naar een binaire voorstelling.
Perfecte getallen
- Maak een nieuw project. Maak een Klasse PerfecteGetallen en voeg de klasse PerfecteGetallenTest terug te vinden op Toledo toe.
Een perfect getal is een positief geheel getal groter dan 0 waarvan de som van de positieve gehele delers uitgezonderd het getal zelf, gelijk is aan het getal zelf.
- Maak 2 methodes somVanPositieveGeheleDelersFor en somVanPositieveGeheleDelersWhile die de som van de positieve gehele delers van een geheel getal > 0 berekent. Deze 2 methodes dienen hetzelfde resultaat op te leveren, maar maken dus respectievelijk gebruik van een For-lus en een While-lus.
- Maak een methode isPerfectGetal om te bepalen of een getal een perfect getal is. Indien een getal <=0 wordt opgegeven moet het resultaat sowieso false zijn.
- Er zijn 4 perfecte getallen kleiner dan 10000. Geef deze weer in het terminal venster.
Vraag 1
Wat is het grootste perfect getal kleiner dan 10000?
Debugger
Een handige manier om de werking van code te inspecteren, is door gebruik te maken van een debugger. Met een debugger is het mogelijk om de uitvoer van het programma op elk moment te onderbreken, de huidige toestand te inspecteren en stap voor stap de code uit te voeren. Om de debugger te activeren klik dan in de marge van het code venster op de regel waarop de code moet stoppen. Er verschijnt een stop teken, dit is een breakpoint.
Figuur 1: Op regel 66 wordt de code onderbroken.
Voer de code uit. De code wordt onderbroken op de aangeduide plaats en het debugger venster verschijnt.
Figuur 2: Het debugger venster. Bekijk de huidige toestand van de variabelen en klik op de knoppen om stap voor stap door de code te gaan, de code verder uit te voeren, of de uitvoer van code af te breken.
Klik op Step of Step into om stap voor stap de code uit te voeren. Om tot het einde uit te voeren druk op Continue. Om het af te breken druk op Terminate.
- Indien de debugger niet meer nodig is. Klik dan nogmaals op het stopteken in het code venster. Het breakpoint verdwijnt.
Interest
Om een geleend bedrag af te lossen wordt aan de hand van een rentevoet en de termijn een vast maandelijks bedrag bepaalt om terug te storten. Een deel van dit maandelijks bedrag dient om het geleende kapitaal af te lossen en het ander deel om de interest te betalen. Hoewel het maandelijks bedrag vast is, verschilt de verhouding tussen afgelost kaptitaal en betaalde interest per maand. Een overzicht van deze terugbetalingen wordt een amortisatietabel genoemd. Maak een programma om een aan de hand van het geleend bedrag, een rentevoet en de termijn een dergelijke tabel weer te geven.
- Maak een klasse Lening.
- Het vast maandelijkse bedrag wordt berekend door:
Hou hierbij rekening dat de rente en looptijd moeten uitgedrukt worden in de tijdseenheid waarvan je het af te lossen bedrag wil berekenen. Bvb. een maandelijks bedrag vereist een maandelijkse rente uitgedrukt in percent en een looptijd uitgedrukt in maanden.
- Het interest gedeelte wordt bepaald door de huidige balans te vermenigvuldigen met de rente. Maak hiervoor een methode afTeLossenBedrag.
- De afbetaling van het af te lossen kapitaal is de maandelijkse afbetaling min het interest gedeelte.
- De nieuwe balans wordt bepaald door de afbetaling (dus zonder de interest) van de oude balans af te trekken.
Tip: maak gebruik van een formatted print om de tabel te rangschikken in kolommen, zie syllabus hoofdstuk 6. Een voorbeeld van een mogelijke vorm van amortisatietabel:
Figuur 1: Voorbeeld amortisatietabel.
Vraag 2
Wat is de balans na betaling 16 bij een 3 jarige lening van 10000 euro met een interestvoet van 4,3%?
Decimaal naar binair
- Maak een klasse Conversie.
Maak een methode decimaalNaarBinair die een positief geheel getal in decimale voorstelling kan omzetten naar binair. Kies int als type van de parameter. Geef als terugkeertype String op.
- Deel het getal door 2. Noteer de rest. Ga verder zolang het quotiënt niet 0 is. Noteer de rest steeds links van het tussenliggend resultaat.
Vraag 3
Wat is de binaire voorstelling van 127 (decimaal)?
Maak een methode decimaalNaarBinair die een positief komma getal in decimale voorstelling kan omzetten naar binair getal met een vaste komma. Geef twee int parameters op en een double parameter. De eerste int parameter stelt het decimale gedeelte voor de komma voor. De double parameter het decimale gedeelte na de komma. De tweede int parameter de precisie, met name het maximale aantal karakters dat moet berekend worden. Geef als terugkeertype String op. Bvb.
/** * Zet het decimaal komma getal om naar het binair equivalent met een vast komma * @param voorDeKomma positief geheel getal * @param naDeKomma voorstelling van de cijfers na de komma als 0.xxxx * @param precisie maximaal aantal karakters van het binair getal na de komma * @return binaire voorstelling met vaste komma van het getal */ public static String decimaalNaarBinair(int voorDeKomma, double naDeKomma, int precisie) { //... } //voorbeeld het getal 7.5 decimaal decimaalNaarBinair(7, 0.5, 8); //geeft als resultaat "111,1"
- Het gedeelte voor de komma kan je omzetten naar binair als positief geheel getal (zie 2.1).
- Vermenigvuldig het gedeelte na de komma met 2. Indien het resultaat kleiner is dan 1, noteer 0, indien groter dan 1, noteer 1 en trek 1 af van het resultaat. Ga door zolang het resultaat niet 0 is, of een bepaalde precisie van het binair getal bereikt werd (bvb. 20 karakters na de komma).
Vraag 4
Wat is de binaire voorstelling van 72,3 (decimaal) met een precisie van 8 karakters?