Cijferstatistiek: Schrijf een programma dat de volgende output

advertisement
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.
Download