INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :
........................................................................................................................
OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing na het verstrijken van de 3 uur is niet toegelaten. Het examen is "open boek" : dit betekent dat het toegelaten is de syllabus (eventueel aangevuld met nota's in eigen handschrift en cursusmateriaal) te gebruiken. Andere documentatie (elektronisch of op papier) is niet toegelaten. Ook de standaard Java-documentatie mag lokaal geconsulteerd worden. Voor elke opgave krijg je een aan te vullen bestand. Noteer boven in dit bestand je naam in commentaar. Het is niet de bedoeling om de code van de main-methode te wijzigen. Doe je dit toch, gelieve dit dan te verantwoorden. Lees zorgvuldig de opgaven en construeer een algoritme vooraleer je begint te programmeren. Vergeet niet op geregelde tijdstippen je bestand op harde schijf op te slaan ! MATLAB: - de studenten die voor het “oude” vak “Informatica” ingeschreven zijn, implementeren de gevraagde functie als statische java-methode - MatLab is enkel via het netwerk toegankelijk. Het netwerk wordt na 1 uur afgesloten. Start dus met de MatLab-oefening en sla de oplossing op de harde schijf, lokaal op.
VEEL SUCCES !!! 1. MATLAB Schrijf een MatLab functie die een geheel getal X als parameter neemt en daarmee een willekeurige vierkante matrix M, gevuld met gehele getallen in het interval [0,X[, genereert. Zorg er voor dat de matrix M weergegeven wordt gedurende het uitvoeren van de functie. De functie geeft uiteindelijk een kolomvector terug met op de i-de rij het verschil tussen het element op de hoofddiagonaal op rij i en het element op de nevendiagonaal op rij i in de aangemaakte matrix M.
OPGELET : ZORG DAT JE WEL DEGELIJK DE .M FILE INDIENT !
Vakgroep Informatietechnologie – Onderzoeksgroep IBCN Gaston Crommenlaan 8, bus 201, B - 9050 Gent www.ibcn.intec.UGent.be - T. +32 9 33 14900 - Fax +32 9 33 14899
2. TELEFONIE Bij het ontwerpen van een telefooncentrale, is het belangrijk ervoor te zorgen dat elk inkomend gesprek voldoende kans heeft om een connectie te krijgen. Anderzijds is het economisch niet verantwoord evenveel telefooncircuits te voorzien als er in het slechtste geval nodig zijn (dit slechtste geval doet zich voor als iedereen tegelijk een gesprek wenst te starten). De kans dat een gesprek niet doorgaat, wordt de "blokkeringskans" genoemd. Stelt E (reëel getal) de hoeveelheid aangeboden traffiek voor, en m (geheel getal) het aantal schakelcircuits in de centrale, dan kan deze blokkeringskans B kan als volgt berekend worden :
B(0,m) = 0
geen blokkering indien geen traffiek
B(E,0) = 1 voor E > 0 steeds blokkering indien geen circuits voorzien zijn 1 m 1 = 1+ voor m > 0 E B(E,m −1) B(E, m) Dit wordt de ErlangB-formule genoemd. Programmeer de methode erlangB met 2 argumenten (E en m, zoals hierboven gedefinieerd), die de blokkeringskans op een RECURSIEVE manier uitrekenen. Test je methode via volgende main()-methode. public class TestErlang { public static void main(String[] args) { for(int i=0;i<10;i++) { System.out.println(erlangB(i,5)); } } }
3. EN 4. Opmerking : Onderstaande tekst situeert vragen 3 en 4. Lees ze dus grondig na. In het populaire spel Rummikub krijgen de spelers een reeks stenen, en is het de bedoeling om deze stenen af te leggen door geldige reeksen te vormen. Een steen wordt gekenmerkt door een kleur (rood [r], blauw [b], zwart [z], oranje [o]) en een cijferwaarde (1 t.e.m. 13). Daarnaast zijn ook een aantal jokers [j] in het spel, die om het even welke cijferwaarde en kleur kunnen aannemen. Geldige reeksen. Er zijn twee soorten geldige reeksen, namelijk: 1) Een reeks van minstens 3 en hoogstens 4 stenen van verschillende kleur en zelfde cijferwaarde. (b.v.
, )
Vakgroep Informatietechnologie – Onderzoeksgroep IBCN Gaston Crommenlaan 8, bus 201, B - 9050 Gent www.ibcn.intec.UGent.be - T. +32 9 33 14900 - Fax +32 9 33 14899
2) Een reeks van minstens 3 stenen van dezelfde kleur, waarbij de cijferwaarden oplopen en aansluiten (b.v. , ) Zoals hierboven aangegeven, kan een joker steeds een steen van willekeurige cijferwaarde en kleur voorstellen. Volgende reeksen zijn dan ook geldig : <j,r10,o10>, <j,j,b10>, <j,z2,z3,z4,z5>, <j,j,z10,z13>.
3. DE KLASSE STEEN Opmerking vooraf : programmeer deze klassen zonder gebruik te maken van 'magic numbers'. M.a.w. gebruik Java-constructies om een constante symbolisch voor te stellen. Dit moet toelaten om je klasse makkelijk aan te passen, mocht er b.v. later beslist worden en bijkomende kleur in het spel in te voeren. Programmeer de klasse Steen volgens onderstaande richtlijnen. (a) Voorzie gegevenselementen om elke Steen te karakteriseren, namelijk: - de kleur (via een karakter, 'r', 'b', 'z' of 'o') - de cijferwaarde (via een geheel getal) Bij conventie krijgt een joker als kleurwaarde '?' en als cijferwaarde 0. Opnieuw bij conventie, krijgt een ongeldige Steen als kleurwaarde '.' en als cijferwaarde -1. (b) Programmeer een constructor met 2 argumenten. Het eerste argument (type char) stelt de kleur van de nieuwe Steen voor, het tweede (type int) de cijferwaarde. Controleer of beide argumenten geldig zijn. Indien niet, wordt een foutboodschap gegenereerd. (c) Indien een constructor zonder argumenten opgeroepen wordt, wordt een joker aangemaakt. (d) Programmeer toegangsmethoden voor de kleur en cijferwaarde van de Steen. (e) Programmeer een methode die toelaat de Steen automatisch in String gedaante om te zetten, wanneer nodig. Zorg dat het uitvoerformaat als volgt is : (f) Programmeer een methode isGelijk, met als argument een Steen. De methode geeft waar of vals terug, naargelang de Stenen al dan niet gelijk zijn. Twee Stenen zijn gelijk als ze identieke kleur en cijferwaarde hebben. (g) Gegeven de onderstaande klasse Sorteer en de interface Sorteerbaar. De methode sorteer is een variant die toelaat om via bubblesort een lijst Sorteerbare objecten van klein naar groot te sorteren. Programmeer het nodige om Stenen te kunnen sorteren. Doe dit volgens onderstaande logica: (i) een joker komt voor elke andere Steen (ii) indien de Stenen verschillende kleuren hebben, wordt enkel naar de kleur gekeken. De ordening is 'r' < 'b' < 'z' < 'o' (waarbij < staat voor "komt voor"). (iii) indien de Stenen dezelfde kleur hebben, wordt de cijferwaarde bekeken (gewone ordening van gehele getallen). Je moet geen rekening houden met ongeldige stenen.
Vakgroep Informatietechnologie – Onderzoeksgroep IBCN Gaston Crommenlaan 8, bus 201, B - 9050 Gent www.ibcn.intec.UGent.be - T. +32 9 33 14900 - Fax +32 9 33 14899
interface Sorteerbaar { public boolean komtVoor(Sorteerbaar s); } class Sorteer { public static void sorteer(ArrayList a) { for(int i=0;i
4. DE KLASSE SERIE Opmerking vooraf: - Vermijd het gebruik van 'magic numbers' (zie ook opm. bij vorige vraag). - Gebruik zoveel mogelijk de functionaliteit van de klasse Steen. In deze oefening programmeren we een klasse die een reeks Stenen voorstelt. Programmeer ze volgens onderstaande richtlijnen. (a) Voorzie de nodige gegevenselementen om per Serie een reeks Stenen bij te houden. (b) Programmeer een methode om automatisch een Serie naar String-gedaante om te zetten, wanneer nodig. Zorg ervoor dat elke Steen van de Serie afgedrukt wordt. (c) Programmeer volgende methoden: - zelfdeKleur : geeft waar of vals naargelang ALLE Stenen van de Serie dezelfde kleur hebben - verschillendeKleuren : geeft waar indien GEEN enkel kleur meer dan 1 maal voorkomt in de Serie. Geeft vals in alle andere gevallen. - zelfdeWaarde : geeft waar of vals naargelang ALLE Stenen van de Serie dezelfde waarde hebben
Vakgroep Informatietechnologie – Onderzoeksgroep IBCN Gaston Crommenlaan 8, bus 201, B - 9050 Gent www.ibcn.intec.UGent.be - T. +32 9 33 14900 - Fax +32 9 33 14899
Zorg hierbij dat, indien de Serie 1 of meer jokers heeft, dit GEEN invloed heeft op het resultaat van de methode. (d) Programmeer een methode sorteer, die de Stenen binnen de Serie ordent (volgens de ordening in vraag 3 gedefinieerd). (e) Programmeer een methode isGeldig, die aangeeft of de Serie al dan niet geldig is (volgens de hoger gedefinieerde regels). Test het geheel via volgende main()-methode. public class TestSerie { public static void main(String[] args){ // test Serie Steen[] s1={new Steen('b',3),new Steen('r',7),new Steen('o',13),new Steen('o',8),new Steen()}; Serie t1=new Serie(s1); System.out.println(t1); t1.sorteer(); System.out.println(t1); // test isGeldig Steen[] a1={new Steen('o',12),new Steen('b',12),new Steen('z',12)}; Steen[] a2={new Steen('b',3),new Steen('b',6),new Steen('b',5),new Steen('b',4)}; Serie b1=new Serie(a1); Serie b2=new Serie(a2); System.out.println(""+b1+b1.isGeldig()); System.out.println(""+b2+b2.isGeldig()); // test met joker Steen[] a3={new Steen('o',12),new Steen(),new Steen('z',12)}; Steen[] a4={new Steen('b',3),new Steen('b',6),new Steen(),new Steen('b',4)}; Serie b3=new Serie(a3); Serie b4=new Serie(a4); System.out.println(""+b3+b3.isGeldig()); System.out.println(""+b4+b4.isGeldig()); // test met twee jokers Steen[] a5={new Steen('o',12),new Steen(),new Steen()}; Steen[] a6={new Steen('b',3),new Steen('b',7),new Steen(),new Steen('b',4)}; Serie b5=new Serie(a5); Serie b6=new Serie(a6); System.out.println(""+b5+b5.isGeldig()); System.out.println(""+b6+b6.isGeldig()); } }
Vakgroep Informatietechnologie – Onderzoeksgroep IBCN Gaston Crommenlaan 8, bus 201, B - 9050 Gent www.ibcn.intec.UGent.be - T. +32 9 33 14900 - Fax +32 9 33 14899
Steen(),new