Cijferstatistiek: 1. Schrijf een programma dat de volgende output produceert. Lever dit in als Cijfers1.java. (4p) a) “gemiddelde: “, gevolgd door het gemiddelde van de cijfers; b) “aantal onvoldoendes: “, gevolgd door het aantal onvoldoendes (5 of lager); c) “hoogste cijfer: ”, gevolgd door het hoogste cijfer in de reeks. 2. Schrijf een programma dat het onderstaande output produceert. Lever dit in als Cijfers2.java. (4p) a) Voor ieder cijfer het aantal keren dat dat voorkomt. Voorbeeld: Bij de input 5 6 7 4 6 9 is de output (het eerste getal, de 5 is geen cijfer in de reeks , maar geeft het aantal cijfers in de reeks aan): 1: 0 2: 0 3: 0 4: 1 5: 0 6: 2 7: 1 8: 0 9: 1 10: 0 b) “modale cijfer: “, gevolgd door de modus van de reeks, dwz. Het cijfer dat het vaakst voorkomt. Als het vaakst voorkomende cijfer niet uniek is, moeten alle vaakst voorkomende cijfers gegeven worden. c) “mediaan: “, gevolgd door de mediaan. De mediaan van een reeks getallen is het getal dat de onderste helft van de bovenste helft scheidt. De mediaan kun je vinden door de getallen te sorteren en dan het middelste te nemen. Als het aantal getallen even is, is de mediaan het gemiddelde van de twee getallen aan weerszijden van het midden. Het sorteren is hier gebruikt om het begrip mediaan duidelijk te maken. Je hoeft in je programma de cijfers niet te sorteren en het strekt tot de aanbeveling als je het niet doet. In bovenstaand voorbeeld is de verlangde output: mediaan: 6. Bij input 6 6 7 4 6 9 8 is de output: mediaan: 6.5. GGD Lever je uitwerking van deze opgave in als GGD.java. Naast gemeentelijke gezondheidsdienst kan GGD ook grootste gemene deler betekenen. De grootste gemene deler ggd(a,b) van twee gehele niet-negatieve getallen is het grootste gehele getal dat een deler is van beide getallen. (Een geheel getal n is een deler van a als er een gehele k is, waarvoor geldt dat k * n = a.) Voor de grootste gemene deler ggd(a,b) met a>=b>=0 geldt de volgende recurrente betrekking. (amod b is de rest bij deling van a door b). Ggd(a,0) = a Ggd(a,b) = ggd(b,a mod b) als b>0 (1) (2) (3p) 1) Schrijf een klasse ggd met een functie int ggdrec(int a, int b) die de grootste gemene deler van a en b uitrekent. Deze functie dient recursief te zijn en gebaseerd op de bovenstaande recurrente betrekking. Geef van deze functie pre- en post condities. (3p) 2) Schrijf een iteratieve (niet-recursieve) functie ggdit die de ggd van twee getallen uitrekent. (3p) 3) De definitie van de ggd is uit te breiden tot een functie die op een lijst gehele getallen V werkt. Ggd(V) is dan het grootste getal dat een deler is van alle getallen in V. Voeg aan GGD een functie int ggd(int[] v) toe die de ggd van een array v niet-negatieve gehele getallen uitrekent. (2p) 4) We observeren dat ggd(a,a) = a en daardoor valt de gedachte in dat het nuttig kan zijn om de duplicaten uit de lijst te verwijderen voordat de ggd van de lijst uitgerekend wordt. Schrijf een functie int[] removeDuplicates(int [] v) die van een rij gehele getallen v de duplicaten verwijdert. De postcondities van removeDuplicates zijn (laat w =\result): Voor alle i: 0<=i< v.length: (Er is een j: 0<=j< w.length : v[i] = w[j] en Voor alle i en j : 0<= i,j < w.length ^ 1!= j : w.i != w.j De functie laat array v onveranderd. (1p) 5) Is het nuttig om jouw functie removeDuplicates uit te voeren op een lijst waarvan je de ggd wilt uitrekenen? Leg uit.