Eerste deeltentamen Nagekeken werk ligt voor in de zaal Neem je eigen werk mee: in het college wordt het besproken Vragen over de beoordeling: in de pauze
Uitslag eerste deeltentamen
x=IMP, y=NW
Opgave 1a: methode methode: groepje opdrachten met een naam aanroep is een opdracht bij een void methode aanroep is een expressie bij een niet-void methode (of: bij een return-opdracht in de body)
Opgave 1b: Syntax van return-opdracht Semantiek expressie wordt uitgerekend waarde van de expressive wordt teruggegeven aan de aanroeper van de methode expressie return ;
Opgave 1c: Standaarddtypes int: gehele getallen bool: true en false string: teksten float: getallen met een drijvende komma double: als float, met 15 significante cijfers long, short, uint, byte, sbyte, ...
Opgave 1d: const declarative gedeclareerde variabele kan elders niet meer gewijzigd worden gebruik const zo dat de constante niet per ongeluk toch gewijzigd kan worden
Opgave 1e: x % y x%y is de rest na deling van x door y equivalent: x – (x/y)*y of: (int)((((double)x / y) – x/y) * y)
Type / Expr / Opdr / Decl / Head / X Methode (((3))) E int //k T return 3==5; O string s = "\\"; D 3E-5 E int a(int 3) X using System; X y = x!=x ; O (int) 3.5 E void p(int x) H int a, b=5; D Font f(Color c) H 3=5 X new Button() E Brush T while (true) while (false) x = x; O
E T O D E X X O E H D H X E T O -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 14 20 30 33 22 23 19 16 9 5 2 2 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 11 10 9,5 9 8 7 6 5 4 3 2 1 E T O D E X X O E H D H X E T O
Opgave 3: Kopieer & Druiven o-o-o-o-o .o-o-o-o. ..o-o-o.. ...o-o...
----/\---- ----\/---- --/\/\/\-- --\/\/\/-- Opgave 3: Kopieer & Ruiten ----/\---- ----\/---- --/\/\/\-- --\/\/\/-- /\/\/\/\/\ \/\/\/\/\/
----/\---- ----\/---- --/\/\/\-- --\/\/\/-- Opgave 3: Kopieer & Ruiten static string Kopieer (int n, string x) { string res = ""; int t; for (t=0; t<n; t++) res += x; return res; } ----/\---- ----\/---- --/\/\/\-- --\/\/\/-- /\/\/\/\/\ \/\/\/\/\/
----/\---- ----\/---- --/\/\/\-- --\/\/\/-- Opgave 3: Kopieer & Ruiten static string Kopieer (int n, string x) { static string Ruiten (int n) { string res = ""; string res = ""; string a, b, x, y, s; int t; for (t=0; t<n; t++) int p=1, q=2*(n-1); for (int t=0; t<n; t++) res += x; { x = Kopieer(p, "/\\"); return res; y = Kopieer(p, "\\/"); } s = Kopieer(q, "-"); ----/\---- ----\/---- --/\/\/\-- --\/\/\/-- /\/\/\/\/\ \/\/\/\/\/ a = s + x + s + "\n"; b = s + y + s + "\n"; res += a + b ; p+=2; q-=2; } return res; }
Opgave 4: Boogbrug
Opgave 4: Boogbrug class Boogbrug { : Form TrackBar b; int n=2; const int x=100, y=100, w=500; Boogbrug ( ) { void teken (obj o, PEA pea) { b = new TrackBar(); Graphics g = pea.Graphics; b.Location=new Point(x,10); b.Size = new Size(w,10); b.SetRange(0, 255); int k = b.Value; Pen p = new Pen( Color.FromArgb(k,k,k), 2 ); this.Controls.Add(b); for (int t=0; t<=this.n; t++) this.Paint += teken; this.MouseClick += klik; b.ValueChanged += kleur; { int d = w * t / n ; } g.DrawLine (p, void kleur (obj o, EA ea) { x, y+d, x+w-d, y); this.Invalidate(); g.DrawLine (p, } x+w, y+d, x+d, y); void klik (obj o, MEA mea) { } this.n ++; this.Invalidate(); } } }
Opgave 4: Boogbrug (punten) class Boogbrug { : Form TrackBar b; int n=2; const int x=100, y=100, w=500; Boogbrug ( ) { void teken (obj o, PEA pea) { b = new TrackBar(); Graphics g = pea.Graphics; b.Location=new Point(x,10); b.Size = new Size(w,10); b.SetRange(0, 255); int k = b.Value; Pen p = new Pen( Color.FromArgb(k,k,k), 2 ); this.Controls.Add(b); for (int t=0; t<=this.n; t++) this.Paint += teken; this.MouseClick += klik; b.ValueChanged += kleur; { int d = w * t / n ; } g.DrawLine (p, void kleur (obj o, EA ea) { x, y+d, x+w-d, y); this.Invalidate(); g.DrawLine (p, } x+w, y+d, x+d, y); void klik (obj o, MEA mea) { } this.n ++; this.Invalidate(); } } }
Hoofdstuk 7 Keuze
Opdrachten voorwaardelijk uitvoeren opdracht wordt steeds opnieuw uitgevoerd zolang voorwaarde geldt if while (temperatuur<0) temperatuur += 5; if (temperatuur<0) uitvoer.Text = "Het vriest!"; opdracht wordt alleen uitgevoerd als voorwaarde geldt
opdracht wordt alleen uitgevoerd als voorwaarde niet geldt Twee alternatieven if (temperatuur<0) uitvoer.Text = "Het vriest!”; else uitvoer.Text = "Het dooit."; opdracht wordt alleen uitgevoerd als voorwaarde niet geldt
Keuze is ook een opdracht for (n=1; n<20; n++) if (n%3==0) uitvoer.Text += (n + " drievoud"); else uitvoer.Text += (n + " geen drievoud"); één opdracht dus geen accolades nodig! if-opdracht dient in z’n geheel als body van for-opdracht
Meer opdrachten als body if (temperatuur<0) lab1.Text = "Het vriest"; { } lab2.Text = "Koud he!"; accolades maken twee opdrachten tot één body
Meerdere alternatieven if (leeftijd<4) uitvoer.Text = "Gratis"; else if (leeftijd<12) uitvoer.Text = "Railrunner"; else if (leeftijd<65) uitvoer.Text = "Vol tarief"; else uitvoer.Text = "Senioren"; if-opdracht dient in z’n geheel als body van else-deel if-opdracht dient in z’n geheel als body van else-deel
Meerdere alternatieven if (leeftijd<4) uitvoer.Text = "Gratis"; else if (leeftijd<12) uitvoer.Text = "Railrunner"; else if (leeftijd<65) uitvoer.Text = "Railrunner"; else if (leeftijd<65) uitvoer.Text = "Vol tarief"; else uitvoer.Text = "Senioren"; uitvoer.Text = "Vol tarief"; else uitvoer.Text = "Senioren"; uitzondering op gewoonte om body in te springen
Meerdere alternatieven bij return-opdracht is methode beëindigd private string tarief(int leeftijd) { } if (leeftijd<4) return "Gratis"; else if (leeftijd<12) return "Railrunner"; else if (leeftijd<65) return "Vol tarief"; else return "Seniorenkaart"; if (leeftijd<4) return "Gratis"; if (leeftijd<12) return "Railrunner"; if (leeftijd<65) return "Vol tarief"; return "Seniorenkaart";
CirkelGroei class Cirkel : Form { Button kleiner, groter; int straal = 100; Cirkel() { kleiner = new Button(); groter = new Button(); kleiner.Text = "Kleiner"; kleiner.Location = ...; // etc. this.Controls.Add(kleiner); this.Controls.Add(groter); this.Paint += this.teken; this.kleiner.Click += this.klik; this.groter.Click += this.klik; } }
CirkelGroei class Cirkel : Form { Button kleiner, groter; int straal = 100; void teken(object o, PEA pea) { pea.Graphics.FillEllipse( , Brushes.Green , 150–this.straal, 150–this.straal , 2*this.straal, 2*this.straal ); } void klik(object obj, EA ea) { if (obj==kleiner) && straal>10) this.straal –= 10; if (obj==groter) && straal<150) this.straal += 10; this.Invalidate(); } }
Geheime tekening class Geheim : Form { bool open; Geheim ( ) { open = false; this.Paint += this.teken; } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; } void teken (object o, PEA pea) { pea.Graphics.FillEllipse(Brushes,Yellow,10,10,100,100); pea.Graphics.DrawArc(Pens.Blue,25,25,50,50,45,90); } if (open) { }
Geheime tekening class Geheim : Form { bool open; Geheim ( ) { open = false; this.Paint += this.teken; } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; } const string sleutel = "geheim"; void controleer (object o, EA ea) { } if (pass.Text == sleutel) { } open = true; this.Invalidate(); pass.Visible=false;
Thermometer partial class Thermo : Form { TrackBar min, temp, max; Button reset; Thermo() { this.InitializeComponent(); temp.Scroll += temp_Scroll; reset.Click += reset_Click; } void temp_Scroll(object o, EA ea) { int x = this.temp.Value; if (x < this.min.Value) this.min.Value = x; } void reset_Click(object o, EA ea) { this.min.Value = this.temp.Value; } }
Exceptions Exception: Uitzonderlijke toestand die door een methode wordt opgeworpen De situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception kan een Exception opwerpen try { } s = invoer . Text; n = int . Parse (s); uitvoer . Text = ( "kwadraat is " + n*n ); catch ( Exception e ) { uitvoer . Text = ( s + " is geen getal" ); } opvangen van het probleem
Meerdere catch-delen try { // open een file } // en lees de inhoud als er een Exception optreedt, wordt de eerste catch gekozen met een passend type try { } // open een file // en lees de inhoud catch ( FileNotFoundException f ) { uitvoer . Text = ( s + " bestaat niet" ); } catch ( IOException i ) { uitvoer . Text = ( s + " is onleesbaar" ); }
Grafiek-tekenprogramma TextBox : ingevoerde waarden abc Label : nulpunten volgens abc-formule Panel : grafiek van een parabool y = a∙x2 + b∙x + c
Parabool: tekst ingevoerd TextBox aBox, bBox, cBox; double a, b, c; void invoer_TextChanged(object box, EventArgs ea) { try { a = double.Parse(aBox.Text); b = double.Parse(bBox.Text); c = double.Parse(cBox.Text); uitvoer.Text = this.oplossingen(); grafiek.Invalidate(); } catch (Exception e) { ((TextBox) ) box . BackColor = Color.Red; uitvoer.Text = e.Message; } }
Parabool: oplossingen string oplossingen ( ) { } -b ± b2-4ac 2a double discriminant, noemer, wortel; discriminant = b*b – 4*a*c; noemer = 2*a; if (discriminant<0) return "geen nulpunten"; else { } wortel = Math.sqrt(discriminant); return ( (–b –wortel)/noemer + " en " +(–b+wortel)/noemer );
Parabool: functie uitrekenen double functie ( double x) { return a * x * x + b * x + c; }
Parabool: grafiek tekenen void grafiek_Paint (object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; int x, y,oldy; double xw, yw, schaal; schaal = 0.03; oldy = 0; for ( x=0 ; x<500 ; x++ ) { } xw = schaal * x ; w w y = yw / schaal ; ( -250) y = this.functie ( x ); (int) (250-( )) if (x>0) gr.DrawLine(Pens.Blue, , , x, y ); x-1 oldy oldy = y; }
Overzicht programma-constructies kun je doen kun je uitrekenen Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for-opdracht { ... } - bundeling if-opdracht try/catch-opdracht Expressies Constante Variabele Aanroep methode Expressie met operatoren Expressie met haakjes new-expressie this (cast)-conversie
Opdrachten voorwaardelijk uitvoeren opdracht wordt steeds opnieuw uitgevoerd zolang voorwaarde geldt if while (temperatuur<0) temperatuur += 5; if (temperatuur<0) uitvoer.Text = "Het vriest!"; opdracht wordt alleen uitgevoerd als voorwaarde geldt
CirkelGroei class Cirkel : Form { Button kleiner, groter; int straal = 100; void teken(object o, PEA pea) { pea.Graphics.FillEllipse( , Brushes.Green , 150–this.straal, 150–this.straal , 2*this.straal, 2*this.straal ); } void klik(object obj, EA ea) { if (obj==kleiner) && straal>10) this.straal –= 10; if (obj==groter) && straal<150) this.straal += 10; this.Invalidate(); } }
Geheime tekening class Geheim : Form { bool open; Geheim ( ) { open = false; this.Paint += this.teken; } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; } void teken (object o, PEA pea) { pea.Graphics.FillEllipse(Brushes,Yellow,10,10,100,100); pea.Graphics.DrawArc(Pens.Blue,25,25,50,50,45,90); } if (open) { }
Geheime tekening class Geheim : Form { bool open; Geheim ( ) { open = false; this.Paint += this.teken; } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; } const string sleutel = "geheim"; void controleer (object o, EA ea) { } if (pass.Text == sleutel) { } open = true; this.Invalidate(); pass.Visible=false;
Thermometer partial class Thermo : Form { TrackBar min, temp, max; Button reset; Thermo() { this.InitializeComponent(); temp.Scroll += temp_Scroll; reset.Click += reset_Click; } void temp_Scroll(object o, EA ea) { int x = this.temp.Value; if (x < this.min.Value) this.min.Value = x; } void reset_Click(object o, EA ea) { this.min.Value = this.temp.Value; } }
Exceptions Exception: Uitzonderlijke toestand die door een methode wordt opgeworpen De situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception kan een Exception opwerpen try { } s = invoer . Text; n = int . Parse (s); uitvoer . Text = ( "kwadraat is " + n*n ); catch ( Exception e ) { uitvoer . Text = ( s + " is geen getal" ); } opvangen van het probleem
Meerdere catch-delen try { // open een file } // en lees de inhoud als er een Exception optreedt, wordt de eerste catch gekozen met een passend type try { } // open een file // en lees de inhoud catch ( FileNotFoundException f ) { uitvoer . Text = ( s + " bestaat niet" ); } catch ( IOException i ) { uitvoer . Text = ( s + " is onleesbaar" ); }
Grafiek-tekenprogramma TextBox : ingevoerde waarden abc Label : nulpunten volgens abc-formule Panel : grafiek van een parabool y = a∙x2 + b∙x + c
Parabool: tekst ingevoerd TextBox aBox, bBox, cBox; double a, b, c; void invoer_TextChanged(object box, EventArgs ea) { try { a = double.Parse(aBox.Text); b = double.Parse(bBox.Text); c = double.Parse(cBox.Text); uitvoer.Text = this.oplossingen(); grafiek.Invalidate(); } catch (Exception e) { ((TextBox) ) box . BackColor = Color.Red; uitvoer.Text = e.Message; } }
Parabool: oplossingen string oplossingen ( ) { } -b ± b2-4ac 2a double discriminant, noemer, wortel; discriminant = b*b – 4*a*c; noemer = 2*a; if (discriminant<0) return "geen nulpunten"; else { } wortel = Math.sqrt(discriminant); return ( (–b –wortel)/noemer + " en " +(–b+wortel)/noemer );
Parabool: functie uitrekenen double functie ( double x) { return a * x * x + b * x + c; }
Parabool: grafiek tekenen void grafiek_Paint (object o, PaintEventArgs pea ) { Graphics gr = pea.Graphics; int x, y,oldy; double xw, yw, schaal; schaal = 0.03; oldy = 0; for ( x=0 ; x<500 ; x++ ) { } xw = schaal * x ; w w y = yw / schaal ; ( -250) y = this.functie ( x ); (int) (250-( )) if (x>0) gr.DrawLine(Pens.Blue, , , x, y ); x-1 oldy oldy = y; }
Overzicht programma-constructies kun je doen kun je uitrekenen Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for-opdracht { ... } - bundeling if-opdracht try/catch-opdracht Expressies Constante Variabele Aanroep methode Expressie met operatoren Expressie met haakjes new-expressie this (cast)-conversie