Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken
Overzicht programma- constructies Opdrachten nToekenning nAanroep void-methode nreturn-opdracht nwhile-opdracht nfor-opdracht n{... } - bundeling Expressies n Constante n Variabele n Aanroep methode n Expressie met operatoren n Expressie met haakjes n new-expressie kun je doenkun je uitrekenen
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; while)(expressieopdrachtblok for)(expropdrachtexpr ;;
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
Button Button b; b.Text ="ok"; new Button b; (bool)true const bool true; bool while (true) t=1; int t( ) int t=1; t==t+1 t=t+1; class A : Size this.Size= this.ClientSize; Size s (Size t) new Size(x,y) Type / Expr / Opdr / Decl / Head / X Methode
while ( t<n ) { t = t+1 ; } t = 0; private static string veelwerf (string x, int n) { Veelwerf-methode return result; result = result + x ; result = ""; int t; string result; }
while ( t<n ) { t = t+1 ; } t = 0; private static double macht (double x, int n) { Machtsverhef-methode return result; result = result * x ; result = 1; int t; double result; }
for (int t=0; t<n; t++) private static double macht (double x, int n) { Machtsverhef-methode return result; result = result * x ; double result = 1; }
Publieksvraag nSchrijf een methode wortel, die de wortel trekt van een niet-negatieve double nZonder Math.Sqrt te gebruiken! nGebruik de Newton-benadering: als y een benadering is van Sqrt(x), dan is het gemiddelde van y en x/y een betere benadering
private static double wortel (double x) { } Worteltrek-methode double y; y = 1; return y; y = (y + x/y) / 2 ; while ( y*y != x ) stopt dit? wiskundige: nee, gelijkheid geldt pas in limiet programmeur: ja, want reken- precisie is beperkt informaticus: nee, want afrond- fouten verhinderen bereiken limiet while ( Math.Abs (y*y - x) < ) veiliger:
Stralen class Programma { } public static void Main( ) { Stralen s = new Stralen(); s.Text = "Stralen"; Application.Run(s); }
Stralen Stralen( ) { class Stralen { } int x, y; void beweeg (obj o, MEA mea) { void klik (obj o, EA ea) { void teken (obj o, PEA pea) { } } } int n=1; } this.Paint += teken; this.MouseMove += beweeg; this.MouseClick += klik; this.x = mea.X; this.y = mea.Y; this.Invalidate(); this.n ++; this.Invalidate(); Graphics g = pea.Graphics; g.FillEllipse( Brushes.Black, this.x-20, this.y-20, 40, 40); for (int t=0; t<=this.n; t++) g.DrawLine( Pens.Black, this.x, this.y, this.Width * t / this.n, this.Height ); : Form
Tekenen of opleveren? ngr.DrawString (x,...) nres.Text += x; resultaat komt meteen op het scherm nreturn x; resultaat wordt teruggegeven aan de aanroeper, die zelf kan beslissen wat hij ermee doet
Overzicht programma- constructies Opdrachten nToekenning nAanroep void-methode nreturn-opdracht nwhile-opdracht nfor-opdracht n{... } - bundeling Expressies n Constante n Variabele n Aanroep methode n Expressie met operatoren n Expressie met haakjes n new-expressie kun je doenkun je uitrekenen
Grafische User Interface (GUI) n8 declaraties n8 keer new... n8 keer this.Controls.Add(...) n42 property-toekenningen TrackBar Button Label Panel n8 declaraties n8 keer new... n8 keer this.Controls.Add(...) n42 property-toekenningen
Visual Studio Design Mode
Code gegenereerd door Visual Studio Designer namespace Mixer { static class Program { static void Main() { Application.Run (new Mixer()); } namespace Mixer { partial class Mixer : Form { // constructor Mixer() { this.InitializeComponent(); } // event-handlers void klik(object o, EventArgs ea) { } namespace Mixer { partial class Mixer { #region generated code void InitializeComponent() { this.b = new Button(); b.Text = " zwart " ; b.Click += this.klik; this.Controls.Add(this.b); } #endregion private Button b; } Program.csMixer.csMixer.Designer.cs
Hoofdstuk 7 Keuze verplicht…
Opdrachten voorwaardelijk uitvoeren opdracht wordt alleen uitgevoerd als voorwaarde geldt if (temperatuur<0) uitvoer.Text = "Het vriest!"; opdracht wordt steeds opnieuw uitgevoerd zolang voorwaarde geldt if while (temperatuur<0) temperatuur += 5;
Twee alternatieven opdracht wordt alleen uitgevoerd als voorwaarde niet geldt if (temperatuur<0) uitvoer.Text = "Het vriest!”; else uitvoer.Text = "Het dooit.";
Keuze is ook een opdracht if (n%3==0) uitvoer.Text += (n + " drievoud"); else uitvoer.Text += (n + " geen drievoud"); for (n=1; n<20; n++) if-opdracht dient in z’n geheel als body van for-opdracht één opdracht dus geen accolades nodig!
Meer opdrachten als body accolades maken twee opdrachten tot één body if (temperatuur<0) lab1.Text = "Het vriest"; lab2.Text = "Koud he!"; {}{}
Meerdere alternatieven if (leeftijd<65) uitvoer.Text = "Vol tarief"; else uitvoer.Text = "Senioren"; if (leeftijd<12) uitvoer.Text = "Railrunner"; else if (leeftijd<4) uitvoer.Text = "Gratis"; else 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 = "Vol tarief"; else uitvoer.Text = "Senioren"; uitzondering op gewoonte om body in te springen uitvoer.Text = "Railrunner"; else if (leeftijd<65) uitvoer.Text = "Vol tarief"; else uitvoer.Text = "Senioren";
private string tarief(int leeftijd) { } Meerdere alternatieven 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"; bij return-opdracht is methode beëindigd
CirkelGroei class Cirkel : Form { } 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; Button kleiner, groter; int straal = 100;
CirkelGroei class Cirkel : Form { } void teken(object o, PEA pea) { } Button kleiner, groter; int straal = 100; void klik(object obj, EA ea) { } pea.Graphics.FillEllipse(, Brushes.Green, 150–this.straal, 150–this.straal, 2*this.straal, 2*this.straal ); this.straal –= 10; this.Invalidate(); if (obj==kleiner) this.straal += 10; if (obj==groter) && straal>10) && straal<150)
Geheime tekening class Geheim : Form { 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); } bool open; Geheim ( ) { open = false; this.Paint += this.teken; } if (open) { } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; }
Geheime tekening class Geheim : Form { void controleer (object o, EA ea) { } bool open; Geheim ( ) { open = false; this.Paint += this.teken; } TextBox pass; pass = new TextBox(); this.Controls.Add(pass); pass.TextChanged += this.controleer; } open = true; this.Invalidate(); if (pass.Text == sleutel) { } const string sleutel = "geheim"; pass.Visible=false;
Thermometer class Thermo : Form { } Thermo() { } TrackBar min, temp, max; Button reset; void temp_Scroll(object o, EA ea) { this.InitializeComponent(); temp.Scroll += temp_Scroll; reset.Click += reset_Click; } 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; partial
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen throw catch
Voorbeeld van Exception s = invoer. Text; n = int. Parse (s); uitvoer. Text = ( "kwadraat is " + n*n ); try { } catch ( Exception e ) { uitvoer. Text = ( s + " is geen getal" ); } kan een Exception opwerpen opvangen van het probleem
Meerdere catch-delen // open een file // en lees de inhoud try { } catch ( FileNotFoundException f ) { uitvoer. Text = ( s + " bestaat niet" ); } catch ( IOException i ) { uitvoer. Text = ( s + " is onleesbaar" ); } als er een Exception optreedt, wordt de eerste catch gekozen met een passend type
Grafiek-tekenprogramma Panel : grafiek van een parabool y = a∙x 2 + b∙x + c Label : nulpunten volgens abc-formule TextBox : ingevoerde waarden abc
Parabool: tekst ingevoerd void invoer_TextChanged(object box, EventArgs ea) { } a = double.Parse(aBox.Text); b = double.Parse(bBox.Text); c = double.Parse(cBox.Text); TextBox aBox, bBox, cBox; double a, b, c; uitvoer.Text = this.oplossingen(); grafiek.Invalidate(); try { } catch (Exception e) { } box. BackColor = Color.Red; uitvoer.Text = e.Message; ((TextBox) )
Parabool: oplossingen string oplossingen ( ) { } return ( (–b –wortel)/noemer + " en " +(–b+wortel)/noemer ); wortel = Math.sqrt(discriminant); discriminant = b*b – 4*a*c; noemer = 2*a; if (discriminant<0) return "geen nulpunten"; else { } -b ± b 2 -4ac 2a double discriminant, noemer, wortel;
Parabool: functie uitrekenen double functie ( ) { return a * x * x + b * x + c; }
Parabool: grafiek tekenen void grafiek_Paint (object o, PaintEventArgs pea ) { for ( x=0 ; x<500 ; x++ ) { } y = this.functie ( x ); gr.DrawLine(Pens.Blue,,, x, y );x-1 oldy oldy = y; oldy = 0; if (x>0) schaal = 0.03; xw = schaal * x ; w w y = yw / schaal ; ( -250) (int) (250-( )) int x, y,oldy; double xw, yw, schaal; } Graphics gr = pea.Graphics;
Overzicht programma- constructies Opdrachten nToekenning nAanroep void-methode nreturn-opdracht nwhile-opdracht nfor-opdracht n{... } - bundeling nif-opdracht ntry/catch-opdracht Expressies n Constante n Variabele n Aanroep methode n Expressie met operatoren n Expressie met haakjes n new-expressie n this n (cast)-conversie kun je doenkun je uitrekenen
Overzicht programma- constructies Declaratie nLokale variabele voor tijdelijk gebruik nMember permanent deel van het object nParameter om waarden door te spelen aan methode Type n Primitief type uint udouble ubool n Object-type uColor, String enz. uTextBox, Button enz. uForm, HalloForm, enz. geeft het type van variabelen waarde-verzameling van een expressie
Wat gaan we doen? college Tent. 1 Tent. 2 Tent. 3 college prakt. 1 prakt. 2 prakt. 3 prakt. 1 prakt. prakt. 1 prakt. prakt. 2 prakt wo 15-17vr 13-15< werkcoll nNu: Prakticum BBG 106 – 103 – 115 – 175 – 112 – 109 nVrijdag: deeltentamen S/T/UV/W