Uitwerking Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, uur

Vergelijkbare documenten
Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 22 december 2017, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Klassen. Hoofdstuk Klassen

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( )

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Voorbeeld: Simulatie van bewegende deeltjes

Modelleren en Programmeren

Uitwerking Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 19 oktober 2012, uur

B.3 Serie 3. B.3 Serie 3 7

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Intent. Intent: bedoeling om een nieuwe activiteit te starten. eigen activiteit. standard. Hallo Teller. web-browser text-sender

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

IMP Uitwerking week 13

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Veel succes! 1. Gegeven is de volgende klasse:

programmeren Mobiel Mobilofoon 1960 Apple iphone 2007 met ios Nokia Samsung S met Android Motorola Dyna-Tac 1973

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Deeltentamen Grammatica s en ontleden 22 december 2005

Modelleren en Programmeren

is eigenlijk overbodig!

Programmeren in Java les 3

Kompas. zijn klasse. protected override void OnDraw(Canvas canv) { base.ondraw(canv);

wat is er nodig om een ISensorEventListener te zijn?

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 9 november 2012, uur

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

b.text = "Rol!"; b.location = new Point(100, 0); b.click += this.rol; this.paint += this.teken;

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Hoofdstuk 9.4. Letterfrequentie turven

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, uur

Touch & go. Hoofdstuk Touch

Modelleren en Programmeren

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Zelftest Programmeren in Java


Vakgroep CW KAHO Sint-Lieven

Goede bedoelingen. Hoofdstuk Een App met meerdere activiteiten. 8.2 Dialogen

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Overerving & Polymorfisme

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica

Methoden om te tekenen

Modelleren en Programmeren

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Variabelen en statements in ActionScript

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( )

Figuur 7: De KlikkerApp in werking

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 21 oktober 2011, uur

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Objectgeoriënteerd programmeren in Java 1

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( )

Programmeren in C# Interfaces. Hoofdstuk 23

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

Dit hoofdstuk is niet een herhaling, maar gaat over herhaling in C#, en is dus nieuw!

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, uur

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Programmeren (1) Examen NAAM:

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, uur

Modelleren & Programmeren. Jeroen Fokker

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Transcriptie:

Uitwerking Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, 13.30-15.30 uur 1. Een static methode (a) Heeft geen parameters (b) Heeft geen resultaatwaarde (c) Heeft geen object onder handen (d) Heeft geen opdrachten 2. Als je variabelen van een object uit een subklasse van View hebt veranderd (a) Moet je daarna OnDraw aanroepen om de afbeelding weer te tekenen (b) Moet je daarna Invalidate aanroepen om de afbeelding weer te tekenen (c) Wordt automatisch de event-handler aangeroepen die je eerder hebt geregistreerd, waarin je de afbeelding weer kunt tekenen (d) Wordt automatisch Invalidate aangeroepen. weer te tekenen die je kunt overriden om de afbeelding 3. Als je vanuit een app een andere app wilt lanceren, en daarbij ook nog extra informatie wilt meegeven, moet je (a) De methode SetResult van die andere app aanroepen (b) Een Intent gebruiken waarvan je PutExtra hebt aangeroepen (c) Die app lanceren met StartActivityForResult in plaats van StartActivity (d) De constructor-methode van die andere app een extra parameter geven 4. De expressie x&&y heeft als waarde (a) als x gelijk is aan true dan x, en anders y (b) als x gelijk is aan true dan y, en anders x (c) als x gelijk is aan y dan true, en anders false (d) als x gelijk is aan null dan y, en anders x Toelichting op het antwoord: (a) is de or-operator, (c) is de ==-operator, (d) is de??- operator 5. Een string s die uit cijfer-tekens bestaat kun je omzetten naar de int die daardoor wordt gerepresenteerd door (a) Aanroep van de methode string.indexof(s) (b) Aanroep van de methode int.parse(s) (c) Gebruik van de cast-notatie (int)s (d) Gebruik van de notatie voor een interpolated string: $"s" Toelichting op het antwoord: Met de cast-notatie kun je wel van float of double naar int converteren, maar niet van string. Met de notatie voor een interpolated string kun je converteren van int naar string, dat is de andere kant op. Methode IndexOf levert wel een int op, maar dat is een positienummer, niet de geconverteerde waarde. 1

6. De lengte van de string "n///\\\n" is (a) 6 (b) 7 (c) 8 (d) 10 Toelichting op het antwoord: De combinaties \\ en \n zijn speciale codes voor respectievelijk een backslash en een newline; deze representeren één symbool. De overige vier symbolen staan voor zichzelf. De quotes tellen natuurlijk ook niet mee. Totaal dus 6 karakters. 7. Het is handiger om een char[] te gebruiken in plaats van een string als je (a) De declaratie wilt combineren met een initialisatie om een bepaald woord op te slaan (b) Bijzondere lettertekens wilt opslaan, bijvoorbeeld Griekse of Russische (c) Later individuele letters wilt opvragen (d) Later individuele letters wilt veranderen Toelichting op het antwoord: Initialisatie is juist gemakkelijker met een string. Zowel string als characters kunnen alle Unicode-karakters opslaan. Letters opvragen kan in een string en array even gemakkelijk. Individuele letters veranderen is in een string onmogelijk, dus daarvoor heb je een array nodig. 8. Als je met een foreach-opdracht een array a langsloopt, en je declareert in de header van de opdracht een variabele t, dan kun je in de body het element dat aan de beurt is opvragen (a) met de expressie a[t] (b) met de expressie a(t) (c) met de expressie t (d) met de expressie a.get(t) Toelichting op het antwoord: Denk aan een voorbeeld: foreach (Point p in punten)...p... In deze header declareer je variabele p, en in de body heeft dat de waarde van het punt dat aan de beurt is. Je schrijft dus niet punten[p] in de body! Het is natuurlijk een beetje gemeen dat de variabele hier t genoemd werd. Dat doet aan een tellertje denken, maar antwoord (a) hoort bij een situatie waar je niet een foreach maar een for gebruikt: for (int t=0; t<a.length; t++)...a[t]... 9. Je kunt de items van een ListView aanvinkbaar maken door (a) De methode SetItemChecked aan te roepen (b) Het ItemClick event van de juiste handler te voorzien (c) De goede layout te kiezen bij het creëren van de Adapter (d) De CheckedItemPositions op true te zetten 10. Met gebruik van een SQLite-database kun je de toestand van een activity vastleggen, zodat je de app weer in dezelfde toetstand aantreft als je hem later weer opnieuw opstart. Dit is echter niet nodig als (a) Je de app afsluit met de back knop van de telefoon, en later weer opstart (b) Je de app afsluit door aanroep van Finish, en later weer opnieuw lanceert (c) Je een andere app lanceert, en later weer terugkeert als die andere app Finish aanroept (d) De app opnieuw opstart omdat de gebruiker het beeldscherm heeft gedraaid 2

11. Het keyword override in de header van een methode betekent (a) Dat deze methode in een subklasse nog een invulling moet krijgen (b) Dat dit een nieuwe invulling is van een methode uit een superklasse (c) Dat dit de invulling is van een methode die in een interface werd beloofd (d) Dat de methode moet worden aangeroepen met base in plaats van this Toelichting op het antwoord: (a) is de betekenis van het keyword virtual. Door interfaces beloofde methodes behoeven geen apart keyword. Met base roep je juist de oorspronkelijke methode aan. 12. Iemand schrijft een methode om te kunnen bepalen of een string (die als parameter wordt meegegeven) een bepaalde waarde (die ook als parameter wordt meegegeven) bevat: bool Bevat(string s, char x) for (int t=0; t < a.length; t++) if (s[t] == x ) return true; return false; Wat is er fout in deze methode? (a) In de test moeten geen aanhalingstekens staan in x (b) In de test moeten dubbele aanhalingstekens staan, dus "x" in plaats van x (c) Voor de opdracht return false; moet nog else staan (d) De body van de for-opdracht moet tussen accolades staan omdat hij uit meerdere opdrachten bestaat Toelichting op het antwoord: Met die aanhalingstekens test je altijd op de 24e letter van het alfabet, niet op de inhoud van de variabele x. Dubbele kwoots is al helemaal onzin, want dat duidt op een string in plaats van een karakter. De opdracht return false moet pas worden uitgevoerd als alle letters van de string tevergeefs zijn uitgevoerd. Hij hoort dus niet bij de for-opdracht, en moet dus niet met accolades in de body gezet worden. Om dezelfde reden moet er ook niet else staan: dan zou hij de eerste ronde er altijd uitvliegen. (Deze opgave lijkt op opgave 12 uit deeltentamen 2, maar het programma is net anders. Leer nooit meerkeuzevragen uit je hoofd, maar probeer het te begrijpen!) 13. Iemand schrijft een methode om een getal x tot een niet-negatieve macht e te verheffen: int Macht(int x, int e) int res = 1; for (int t=0; t<=e; t++) res *= x; return res; Welk ongewenst effect heeft deze methode? (a) de herhaling gaat één stap te lang door (b) het werkt niet als x gelijk is aan 0 (c) het werkt niet als x gelijk is aan 1 (d) de uitkomst is altijd 1 3

Toelichting op het antwoord: De test had moeten zijn t<e, of de initialisatie int t=1. Als x gelijk is aan 0 of 1 werkt het juist net wel goed: de uitkomst is dan 0 of 1, zelfs als je een stap te lang doorgaat. (Deze opgave lijkt op opgave 13 uit deeltentamen 2, maar het programma is net anders. Leer nooit meerkeuzevragen uit je hoofd, maar probeer het te begrijpen!) 14. Iemand wil de waarde van een float-variabele x met wat toelichting in een string opnemen, en schrijft daarom: "de afstand is: x" Dit heeft niet het gewenste effect. De fout kan op verschillende manieren worden gecorrigeerd. Wat is niet de goede manier om de fout te corrigeren? (a) plustekens rond de x neerzetten, en daaromheen weer aanhalingstekens (b) een dollarteken voor de string neerzetten, en accolades openen en sluiten om de x heen toevoegen (c) een plusteken achter de string neerzetten, en de x helemaal naar het eind verplaatsen (d) direct achter de x nog.tostring() toevoegen Toelichting op het antwoord: (a), (b) en (c) zijn correcte manieren om de waarde van de variabele met de string te combineren "de afstand is: " + x + "" $"de afstand is: x" "de afstand is: " + x (d) is dus de gevraagde foute correctie: hiermee zou de tekst ToString zelf in de string terecht komen. 15. In de header van een klasse kan achter de naam van de klasse een dubbele punt staan, en daarachter nog iets. Welk van de volgende uitspraken is niet correct? (a) Achter de dubbele punt kan de naam van een interface staan, waarvan je de methoden moet implementeren (b) Achter de dubbele punt kan de naam van een interface staan, waarvan je de public variabelen mag gebruiken (c) Achter de dubbele punt kan de naam van een klasse staan, waarvan je de protected methoden mag aanroepen (d) Achter de dubbele punt kan de naam van een klasse staan, waarvan je de virtual methoden mag implementeren Toelichting op het antwoord: Een interface heeft geen variabelen, alleen methodeheaders die je moet implementeren. Twee open vragen (2 15 = 30 punten) 16. Als je verder wilt bouwen op een klasse die een andere programmeur heeft gemaakt, dan kun je er een kopie van maken en daarin methoden toevoegen en/of uitbreiden. Waarom is dit geen goed idee? Beschrijf wat er op termijn fout kan gaan als je deze aanpak kiest. Hoe moet het dan wel? Beschrijf hoe je het aanpakt om methodes uit te breiden, en hoe de oorspronkelijke auteur daarop anticipeert. 4

Antwoord: Als er later een bug wordt ontdekt in de oorspronkelijke tekst, zit die dus ook in de kopie, en moet hij tweemaal worden gefixt (of nog vaker als de tekst weer verder wordt doorgekopieerd). Je kunt beter een subklasse maken. Een methode die je wilt uitbreiden kun je met override herdefiniëren. In de body kun je met base de oorspronkelijke methode aanroepen tussen de uitbreidingen door. De oorspronkelijke auteur moet daarop geanticipeerd hebben door de methode als virtual te markeren. 17. Beschrijf de semantiek van de expressie-vorm methode-aanroep. Geef in je beschrijving aan hoe de aanroep zich verhoudt tot de definitie van de methode, en wat daarbij de rol is van parameters en resultaat van de methode, en welk type de expressie heeft. Antwoord: Als een methode-aanroep wordt uitgevoerd, worden de opdrachten uit de body van die methode uitgevoerd. Daarvoor worden eerst de waardes uitgerekend van de parameters die in de aanroep worden meegegeven. Deze waardes worden toegekend aan de variabelen die in de header van de methode zijn gedeclareerd. De waarde van de expressie die in de body van de methode achter return staat, is uiteindelijk de waarde die de methode-aanroep als geheel heeft. Het type daarvan is dat wat vooraan in de methode-header staat gespecificeerd. Eén programmeervraag (25 punten) In deze opgaven mag je de using-regels, en het public/private zijn van methoden en variabelen weglaten. 18. De klasse Stad bevat de gegevens van een stad: de naam, het punt waar (het centrum van) de stad ligt (in kilometers, volgens het nationale kilometer-grid van de Topografische Dienst). Een voorbeeld van de manier om een Stad-object aan te maken is new Stad("Utrecht", 136.8f, 455.9f). Je mag er van uitgaan dat de naam uit één woord bestaat, dus Den Haag is in deze versie van het programma nog niet mogelijk. (a) Schrijf deze klasse Stad, en maak daarbij de volgende methodes een constructormethode, die kan worden aangeroepen zoals in het voorbeeld een methode die de afstand berekent van de stad tot een als parameter meegegeven punt een methode om de gegevens van de stad in een string weer te geven een methode om de string van de vorige methode weer om te zetten in een stadobject (naar keuze een extra constructormethode, of de andere gangbare manier om dit te doen) (b) Bekijk de volgende klasse: class StedenView : View public List<Stad> steden = new List<Stad>(); string tekst = ""; public StedenView(Context ctx) : base(ctx) steden.add( new Stad("Utrecht, 136.8f, 455.9f) ); // en nog vele andere steden op dezelfde manier... this.touch += RaakAan; public void OnDraw(Canvas c) Paint verf = new Paint(); verf.textsize = 40; // TODO 5

public void RaakAan(object o, TouchEventArgs tea) MotionEvent me = tea.event; // TODO Schrijf de ontbrekende delen van de bodies van OnDraw en RaakAan op zo n manier dat Alle steden op het scherm getekend worden, als een rondje op de juiste plaats met de naam van de stad ernaast. Je mag de kilometers van het grid laten corresponderen met pixel-coördinaten op het scherm. Als de gebruiker het scherm aanraakt, de naam van de stad die daar het meest dichtbij ligt linksboven op het scherm verschijnt. (Hint: maak daarbij gebruik van de gedeclareerde variabele tekst). Antwoord: public class Stad public string naam; public float x, y; public Stad(string nm, float a, float b) naam = nm; x = a; y = b; public float Afstand(float a, float b) return Math.Sqrt((x-a)*(x-a)+(y-b)*(y-b)); public override string ToString() return $"x y naam"; public Stad(string s) string[] velden = s.split(); x = float.parse(velden[0]); y = float.parse(velden[1]); naam = velden[2]; // in de body van OnDraw: c.drawtext(tekst, 0, 0, verf); foreach(stad s in steden) c.drawcircle( s.x, s.y, 50, verf ); c.drawtext( s.naam, s.x+60, s.y, verf); // in de body van RaakAan: foreach(stad s in steden) float min = 10000; float dist = s.afstand(me.getx(), me.gety() if ( dist < min ) min = dist; tekst = s.naam; this.invalidate(); 6