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

Maat: px
Weergave met pagina beginnen:

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

Transcriptie

1 Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde bladen. Achter op het tentamen staan nog enkele standaardfuncties Opgave 1 t/m 15 zijn meerkeuzevragen, die meetellen voor 15 3 = 45 punten. Opgave 16 en 17 zijn open vragen, die meetellen voor 2 15 = 30 punten. Opgave 18 is een programmeervraag, die meetelt voor 25 punten. Belangrijk: dit is versie 1 van het tentamen, vermeld dat boven je antwoorden. Meerkeuzevragen: de letter van het goede antwoord volstaat. (15 keer 3 punten) 1. Wat kan gezegd worden van het stukje programma b=!b (a) De expressie b=!b heeft altijd de waarde false (b) De expressie b=!b heeft altijd de waarde true (c) De opdracht b=!b; verandert de waarde van b in zijn tegenovergestelde (d) De opdracht b=!b; maakt de waarde van b gelijk aan false 2. Met using aan het begin van de broncode geef je aan (a) dat je een bepaalde namespace wilt gebruiken (b) dat je een bepaalde klasse wilt gebruiken (c) dat je een bepaalde methode wilt gebruiken (d) dat je een bepaalde interface wilt gebruiken 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 1

2 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" 6. De lengte van de string "n///\\\n" is (a) 6 (b) 7 (c) 8 (d) 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 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) 9. Als je de strings in een lijst van strings zichtbaar wilt maken in een ListView, dan moet je (a) methode OnDraw herdefiniëren in een subklasse van ListView, en daarin met foreach alle strings in de lijst tekenen. (b) de lijst meegeven aan een ArrayAdapter, die je gebruikt als property van de listview (c) de lijst gebruiken als waarde van CheckedItemPositions van de listview (d) met foreach elke string in de lijst meegeven aan SetItemChecked van de listview 10. Het resultaattype van de methode PutExtra is Intent, omdat (a) het handig is dat je het resultaat meteen kunt meegeven als parameter van StartActivity (b) het handig is dat je het resultaat meteen kunt meegeven als parameter van nog een aanroep van PutExtra (c) het handig is dat je het resultaat meteen onder handen kunt nemen met GetStringExtra (d) het handig is dat je het resultaat meteen kunt toekennen aan de Intent property van een Activity 2

3 11. Wat gebeurt er direct bij uitvoering van de volgende opdracht: new DatePickerDialog(this,(o,e)=>d=e.Date,2017,2,3).Show(); (a) Variabele d wordt een door de gebruiker uitgekozen datum (b) Variabele d wordt de datum van vandaag (c) De gebruiker krijgt de datum van vandaag te zien (d) De gebruiker kan bevestigen dat de Date-property van variabele e de datum van vandaag zal worden 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 < s.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 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

4 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 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 4

5 Twee open vragen (2 15 = 30 punten) 16. Dit is het syntaxdiagram van het begrip type: type struct naam sbyte byte float bool short ushort double char int uint decimal long ulong string object class naam [ ], (a) Wat is het verschil tussen de bovenste 14 types enerzijds, en de onderste 3 types anderzijds? (b) Welke exception kan er optreden bij gebruik van de onderste 3 types, en wanneer gebeurt dat? (c) Welke bijzondere rol heeft het type object? (d) Hoe worden de types genoemd die je krijgt als je de vierkante haakjes gebruikt, en wat wordt daarmee beschreven? (e) Geef een voorbeeld van een declaratie-met-initialisatie waarin een type zoals bedoeld bij (d) wordt gebruikt. 17. Beantwoord voor een drietal bijzonder soort methoden steeds drie vragen, waarbij het er om gaat hoe elk soort zich onderscheidt van gewone methoden: (a) Constructormethoden zijn een bijzonder soort methoden. Hoe kun je aan de header zien dat een methode een constructormethode is? Hoe wordt een constructormethode aangeroepen? Wat is de speciale rol van constructormethoden? (b) Static methoden zijn een bijzonder soort methoden. Hoe kun je aan de header zien dat een methode een static methode is? Hoe wordt een static methode aangeroepen? Wat is de speciale rol van static methoden? (c) Event handlers zijn een bijzonder soort methoden. Hoe kun je aan de header zien dat een methode een event handler is? Hoe wordt een event handler aangeroepen? Wat is de speciale rol van event handlers? 5

6 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>(); Einde tentamen 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) // TODO public void RaakAan(object o, TouchEventArgs tea) // TODO Schrijf 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 zichtbaar wordt in een pop-up kadertje, dat na een paar seconden weer verdwijnt. 6

7 Bijlage: standaardklassen uit hoofdstuk 8 10 namespace Android.Widget class EditText : TextView c EditText (Context) event EventHandler AfterTextChangedEventArgs AfterTextChanged class ListView : View void SetItemChecked (int, bool) event EventHandler ItemClickEventArgs ItemClick ChoiceMode ChoiceMode BaseAdapter Adapter SparseBooleanArray CheckedItemPositions enum ChoiceMode None, Single, Multiple class ArrayAdapter T : BaseAdapter c ArrayAdapter T (Context, Layout, IList T ) c ArrayAdapter T (Context, Layout, T[ ] ) enum Layout SimpleListItemChecked, SimpleListItemMultipleChoice, SimpleListItemActivate class BaseAdapter virtual long GetItemId (int) virtual object this [int] virtual int Count virtual View GetView (int, View, ViewGroup) class Toast c Toast (Context) ToastLength Duration static Toast MakeText (Context, string, ToastLength) void SetText (string) void Show () enum ToastLength Short, Long namespace Android.Util class SparseBooleanArray int Size () int KeyAt (int) bool ValueAt (int) namespace SQLite class SQLiteConnection c SQLiteConnection (string) void CreateTable T () TableQuery T Table T () void Insert T (T) void Update T (T) void Delete T (T) class TableQuery T : IEnumerable T TableQuery T Where (Expression) 7