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

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

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 21 oktober 2011, uur

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

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

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 19 oktober 2012, uur

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

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, uur

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

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

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

Uitwerking Derde deeltentamen Imperatief programmeren Woensdag 2 februari 2011, uur

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

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

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Uitwerking Aanvullend tentamen Imperatief programmeren Maandag 14 maart 2011, uur

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

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

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

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

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

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, uur

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

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

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

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

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

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

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

Voorbeeld: Simulatie van bewegende deeltjes

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

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

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

Veel succes! 1. Gegeven is de volgende klasse:

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

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

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

vandaag èn vrijdag deadline maandag 12 dec.

Klassen. Hoofdstuk Klassen

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, 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.

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

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 Gameprogrammeren Vrijdag 7 november 2014, uur

IMP Uitwerking week 13

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

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, 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 Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur

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

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Modelleren & Programmeren. Jeroen Fokker

Programmeren (1) Examen NAAM:

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

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

PRAKTICUMOPGAVE 1. De eerste prakticumopgave is het maken van een applet om een "Mandelbrotfiguur" te tekenen, zoals hieronder omschreven.

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur

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

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

Zelftest Programmeren in Java

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

Programmeren in C# Interfaces. Hoofdstuk 23

is eigenlijk overbodig!

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

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

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

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

Programmeren in C# Samenvatting van C#

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Vakgroep CW KAHO Sint-Lieven

Werkcollege-opgaven. Bijlage B

Labo 2 Programmeren II

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

Scala. Korte introductie. Sylvia Stuurman

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

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

Programmeren in C# Overerving

Modelleren en Programmeren

// schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo. Freq( e, "some text" );

Modelleren en Programmeren

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Programmeren in C# Klassen schrijven

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

class Solver { static Valuatie Vervul (IFormule formule, ISet<string> variabelen, Valuatie valuatie) { if (variabelen. Count==0)

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Programmeren in Java 3

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

Werkcollege-opgaven 11

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

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


Modelleren en Programmeren

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Tentamen Imperatief Programmeren

Transcriptie:

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, 8.30 10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde bladen. De lijst met standaardfuncties na afloop graag weer inleveren. De antwoorden komen binnenkort op de website. Opgave 1 t/m 10 zijn meerkeuzevragen, die meetellen voor 10 4 = 40 punten. Opgave 11 en 12 zijn programmeer- en tekstvragen, die meetellen voor 20 en 40 punten. Meerkeuzevragen: de letter van het goede antwoord volstaat. Belangrijk: dit is versie 1 van het tentamen, vermeld dat boven je antwoorden. 1. De methode Main mag gedefinieerd worden met een parameter. Deze parameter moet dan het volgende type hebben: (a) string (b) string[] (c) List<string> (d) Stream Toelichting op het antwoord: De parameter van Main bevat de op de commandoregel ingetikte woorden, elk woord in een apart element van een array van strings. 2. Een lambda-expressie kun je niet gebruiken (a) Als parameter van de constructor van Thread (b) Bij de registratie van een event-handler (c) Als parameter van een zelfgemaakte methode (d) Voor het opvangen van een exception Toelichting op het antwoord: Een lambda-expressie is een anonieme methode, die je kunt opschrijven in plats van de methode-naam als je die moet meegeven als parameter. Dit gebeurt o.a. in de constructor van Thread, maar kan ook in eigen methodes (zoals in het diktaat in de Bitmap-editor gebeurt bij aanroep van combineer), en rechts van de += van event-handler registraties. Met exceptions heeft dit echter niets te maken. 3. Wat is een verschil tussen een interface en een abstracte klasse? (a) Je kunt geen variabele declareren met een interface als type (b) Je kunt geen new object aanmaken van een interface (c) Je kunt geen membervariabelen declareren in een interface (d) In een interface staan geen properties 1

Toelichting op het antwoord: Variabelen declareren kan wel (ook bij abstracte klassen trouwens, dus dat is sowieso geen verschil). Een new object aanmaken kan niet (wel van een implementatie van de interface, of van een subklasse van de abstracte klasse), maar dit is dus ook geen verschil. In een interface staan wel properties (zoals Count in ICollection), ook bij abstracte klasse kan dit trouwens. Membervariabelen declareren kan niet in een interface, dat doe je pas bij de implementatie. In een abstracte klasse kan dit wel, dus dit is een echt verschil. 4. Een abstracte methode (a) mag de membervariabelen niet gebruiken (b) kan niet overridden worden (c) moet in een abstracte klasse staan (d) heeft geen opdrachten in zijn body Toelichting op het antwoord: Membervariabelen mag je niet gebruiken in een static methode; in een abstracte methode mag dit wel. Abstracte methoden zijn juist speciaal bedoeld om wel te overriden. Een abstracte methode heeft helemaal geen body, dus je kunt niet ervan spreken of daar opdrachten in staan. Als er abstracte methoden zijn, wordt daarmee de klasse ook abstract, dus dat was het goede antwoord. 5. Welk van onderstaande uitspraken is niet waar? (a) UTF8 kan dezelfde tekens opslaan als Unicode (b) UTF8 gebruikt een variabel aantal bytes per teken (c) UTF8 kost altijd minder ruimte dan Unicode (d) UTF8 codeert tekens met code 0 t/m 127 hetzelfde als Latin1 Toelichting op het antwoord: UTF8 kost soms (bij Westeuropese teksten) minder bytes dan Unicode, maar soms (bij Chinese teksten) juist meer. De andere uitspraken zijn wel waar. 6. Een verschil tussen een list en een collection is (a) Een collection heeft geen indexer-property (b) In een collection kun je het aantal elementen niet bepalen (c) Een collection kun je niet met foreach doorlopen (d) In een collection zitten geen dubbele elementen Toelichting op het antwoord: De indexer-property indexeert met een volgnummer, en dat is specifiek voor List. Collection heeft wel een Count. Collection is een subinterface van Enumerable, en mag je dus gebruiken in foreach. Geen dubbele elementen zitten in een Set. 7. In de header van een foreach-opdracht waarmee je een List<T> doorloopt declareer je een variabele (a) van het type List<T> (b) van het type T (c) van het type IEnumerable<T> (d) van het type IEnumerator<T> Toelichting op het antwoord: Kijk bijvoorbeeld naar de foreach-opdracht in opgave 12: je declareert een variabele met als type het element-type van de lijst. 2

8. In een MDI-programma... (a) wordt het menu aangemaakt in de klasse van de container, maar wordt een deel alleen getoond als er een child-window aktief is (b) wordt het menu aangemaakt in de klasse van het child, maar wordt dit getoond in het container-window (c) worden menu s aangemaakt in de klasse van de container én die van het kind, maar worden ze gecombineerd getoond in het aktieve child-window (d) worden menu s aangemaakt in de klasse van de container én die van het kind, maar worden ze gecombineerd getoond in het container-window 9. Is het mogelijk om in een klasse onder andere een member-variabele te declareren met diezelfde klasse als type? (a) Nee, een object van dit type zou oneindig veel geheugen vragen (b) Nee, ophalen van de waarde van deze member zou oneindig veel tijd vragen (c) Ja, maar alleen als je zorgt dat deze variabele niet verwijst naar het object waar het deel van is (d) Ja, dit kan altijd 10. Met de opdracht Console.Out.WriteLine("hallo"); wordt aangeroepen: (a) de static methode WriteLine in de klasse Console.Out (b) de niet-static methode WriteLine in de klasse TextWriter (c) de static methode WriteLine in de klasse Console (d) de niet-static methode WriteLine in de klasse string Toelichting op het antwoord: Out is een static property van de klasse Console. Deze property is een object van het type TextWriter. Dit object wordt onder handen genomen door de methode WriteLine, die dus in de klasse TextWriter moet staan. 11. (telt voor 20%) Voor elk punt (x, y) van het platte vlak, waarbij x en y reële getallen zijn, kan een bijbehorend getal worden bepaald laten we dit het mandelgetal noemen. Om het mandelgetal te kunnen uitrekenen, bekijken we eerst de volgende functie, die punten (a, b) van het vlak transformeert naar andere punten: f (a, b) = (a a b b + x, 2 a b + y) Let op: deze functie transformeert het punt (a, b), maar in de berekening speelt ook de waarde van x en y, dat is het punt waarvan we het mandelgetal willen bepalen, een rol. Deze functie f nu, passen we toe op het punt (a, b) = (0, 0). Op het punt dat daar uitkomt, passen we nog eens de functie f toe. Op het punt dat daar weer het resultaat van is, passen we opnieuw f toe, enzovoorts. We stoppen pas met toepassen van f als het resultaat-punt een afstand van meer dan 2 tot het punt (0, 0) heeft. Het mandelgetal is nu gelijk aan het aantal keren dat f is toegepast. Voor sommige punten (x, y) is dat meteen na de eerste keer al zo, en is het mandelgetal dus gelijk aan 1. Voor andere punten duurt het langer: die hebben een groter mandelgetal. Er zijn ook punten waarbij je f kan blijven toepassen, zonder dat de afstand tot de oorsprong ooit meer dan 2 wordt. Die punten hebben een oneindig groot mandelgetal. 3

(a) Schrijf een methode mandel die het mandelgetal oplevert van het punt waarvan de coordinaten als parameter worden meegegeven, tenzij het mandelgetal groter dan 100 is of oneindig: in dat geval levert de methode 100 als resultaat op. (b) Schrijf het ontbrekende stuk van de methode teken, die de punten op het scherm zwart kleurt die een even mandelgetal hebben. De gedeclareerde schaal moet worden gebruikt zo dat het plaatje wordt getoond voor x en y tussen 0 en 4. class Mandelbrot : Form double schaal = 0.01; // TODO opgave a: methode mandel public void teken(object obj, PaintEventArgs pea) Graphics gr = pea.graphics; for (int x=0; x<400; x++) for (int y=0; y<400; y++) // TODO opgave b: body public Mandelbrot this.paint += this.teken; (Zie de uitwerking van de eerste practicumopgave). 12. (telt voor 40%: onderdeel a t/m e elk voor 4%, f voor 8%, en g en h voor 6%) Bekijk het gegeven programma op pagina 5 (de klasse Sterrenhemel en pagina 6 (de klassen Ster en Program). Onderaan deze pagina staat een screenshot van het programma in werking. De gebruiker kan plaatsen aanklikken in een window. Gecentreerd op die plaatsen verschijnt een ster met een oneven aantal uiteinden: 3, 5 enzovoorts tot maximaal 25. Het aantal uiteinden van een ster wordt bepaald door de stand van een schuifregelaar op het moment van klikken. Het aantal sterren is praktisch onbegrensd. Als de gebruiker op de button Leeg drukt, verdwijnen alle sterren en kan hij/zij opnieuw beginnen. Als de gebruiker op de button Opslaan drukt, wordt de huidige situatie opgeslagen in een tekstbestand. Als de gebruiker op de button Inlezen drukt, verdwijnt het huidige plaatje, en wordt de situatie hersteld van de laatste keer Opslaan. (a) In de klasse Ster worden de eigenschappen van een ster gemodelleerd: de positie van het midden en het aantal uiteinden (tips). De methode LaatZien laat zo n ster zien op een graphics. Leg uit hoe de toekenningen aan a en b bijdragen in de vorming van de ster. (Je hoeft de wiskunde in de regels er boven niet uit te leggen). de waarden van a en b zijn de volgnummers van de tips die verbonden moeten worden. In zon ster is dat steeds de bijna tegenoverliggende tip. Daarom wordt b de naar beneden afgeronde tips/2. In de loop schuift het steeds door: a wordt de oude b, de volgende b wordt vermeerderd met tips/2. Omdat de ster rond is, moet de nummering modulo tips worden gedaan. (b) In de methode MaakKnop staan twee toekenningen aan b.click. Leg uit waarom dat handig is in een programma zoals dit (en eventuele toekomstige uitbreidingen ervan). Elke knop dit met MaakKnop wordt gemaakt kan nu een eigen eventhandler krijgen, maar zal daarnaast ook altijd automatisch Invalidate aanroepen. Dat hoeft dus niet meer in de aparte eventhandler van elke knop te gebeuren. 4

(c) Geef de drie ontbrekende declaraties in de klasse Sterrenhemel, compleet met hun initialisaties. List<Ster> sterren = new List<Ster>(); TrackBar aantal = new TrackBar(); TrackBar kleur = new TrackBar(); (d) Schrijf het ontbrekende opdracht aan het eind de constructormethode van Sterrenhemel, zonder daarbij nieuwe methodes in de klasse te definiëren. Dit kan mooi met een lambda-expressie, vooral ook omdat na Clear geen Invalidate meer nodig is (zie opgave b): this.controls.add(maakknop("leeg", 210, (object o, EventArgs ea) => sterren.clear())); of, omdat je in het parameter-gedeelte van de lambda-expressie de types mag weglaten: this.controls.add(maakknop("leeg", 210, (o,ea) => sterren.clear())); (e) Schrijf de ontbrekende methode in de klasse Ster. public override string ToString() return plek.x + " " + plek.y + " " + tips; We willen nu dat de gebruiker behalve sterren ook zonnen kan tekenen, door met de rechter muisknop te klikken. Een zon ziet er bijna hetzelfde uit als een ster, maar het verschil is dat de stralen van de ster nu een rood/oranje/gele cirkel als achtergrond krijgen. De kleur van de zon wordt bepaald door de tweede schuifregelaar: naar links is roder, naar rechts is geler. (f) Schrijf een klasse Zon. Vermijd hierbij zo veel mogelijk overbodig schrijfwerk. public class Zon : Ster int kleur; public Zon(Point p0, int t0, int k0) plek = p0; tips = t0; kleur = k0; public override string ToString() return base.tostring() + " " + kleur; public override void LaatZien(Graphics g) Brush br = new SolidBrush(Color.FromArgb(255, kleur, 0)); g.fillellipse(br, plek.x - straal, plek.y - straal, 2 * straal, 2 * straal); base.laatzien(g); Deze alternatieve versie van de constructor is eigenlijk mooier, maar de benodigde notatie voor het aanroepen van de constructor van de base class is niet besproken in het college: public Zon(Point p0, int t0, int k0) : base(p0,t0) kleur = k0; (g) Schrijf de methode MuisKlik in de klasse Sterrenhemel. public void MuisKlik(object o, MouseEventArgs mea) int a = aantal.value * 2 + 1; 5

if (mea.button == MouseButtons.Right) sterren.add(new Zon(mea.Location, a, kleur.value)); else sterren.add(new Ster(mea.Location, a)); this.invalidate(); (h) Schrijf de methode Inlezen in de klasse Sterrenhemel. public void Inlezen(object o, EventArgs ea) sterren.clear(); StreamReader r = new StreamReader(filenaam); string s; while ((s=r.readline())!=null) string[] a = s.split(); Point p = new Point(int.Parse(a[0]), int.parse(a[1])); int t = int.parse(a[2]); if (a.length == 4) sterren.add( new Zon(p, t, int.parse(a[3]))); else sterren.add(new Ster(p, t)); r.close(); Links in het voorbeeld-plaatje zie je vier 9-puntige sterren. Daarnaast heeft de gebruiker ook 5-, 7-, 11- en 15-puntige sterren gemaakt, en zes zonnen met verschillende kleur en aantal uiteinden. 6

// Bijlage bij opgave 12 using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; using System.IO; public class Sterrenhemel : Form // TODO opgavr c: declaraties private Button MaakKnop(string s, int x, EventHandler eh) Button b = new Button(); b.text = s; b.backcolor = Color.LightGray; b.location = new Point(x, 200); b.click += eh; b.click += Herstellen; return b; public Sterrenhemel() this.clientsize = new Size(600, 250); this.text = "Sterrenhemel"; this.backcolor = Color.White; this.paint += this.teken; this.mouseclick += this.muisklik; aantal.location = new Point(310, 200); aantal.size = new Size(100, 20); aantal.minimum = 1; aantal.maximum = 12; aantal.value = 4; kleur.location = new Point(430, 200); kleur.size = new Size(128, 20); kleur.maximum = 255; kleur.value = 128; this.controls.add(aantal); this.controls.add(kleur); this.controls.add(maakknop("opslaan", 10, this.opslaan)); this.controls.add(maakknop("inlezen", 110, this.inlezen)); // TODO opgave d: derde knop public void Teken(object o, PaintEventArgs pea) foreach (Ster s in sterren) s.laatzien(pea.graphics); public void Herstellen(object o, EventArgs e) this.invalidate(); // TODO opgave g: methode MuisKlik const string filenaam = "sterren.txt"; public void Opslaan(object o, EventArgs ea) StreamWriter w = new StreamWriter(filenaam); foreach (Ster s in sterren) w.writeline(s.tostring()); w.close(); // TODO opgave h: methode Inlezen 7

// vervolg bijlage bij opgave 12 public class Ster protected const int straal = 25; protected Point plek; protected int tips; public Ster() public Ster(Point p0, int t0) plek = p0; tips = t0; // TODO opgave e: ontbrekende methode public virtual void LaatZien(Graphics g) int a = 0; int b = tips / 2; for (int t = 0; t < tips; t++) int dx1 = (int)(math.cos(2*math.pi*a/tips)*straal); int dy1 = (int)(math.sin(2*math.pi*a/tips)*straal); int dx2 = (int)(math.cos(2*math.pi*b/tips)*straal); int dy2 = (int)(math.sin(2*math.pi*b/tips)*straal); g.drawline(pens.black, plek.x+dx1, plek.y+dy1, plek.x+dx2, plek.y+dy2); a = b; b = (b + tips / 2) % tips; class Program static void Main() Application.Run(new Sterrenhemel()); // TODO opgave f: klasse Zon 8