Declaratie en toekenningen nEén keer declarareren nMogelijk meerdere toekenningen int x; x = 100; x = 250; x = x + 1; x = 2 * x; int x = 100; x = 100; Declaratie en eerste toekenning
Standaardtypes sbyte short int long float double decimal byte ushort uint ulong ± 2 miljard ± ± ± miljard 7 cijfers, afgerond, ≤ cijfers, afgerond, ≤ cijfers, exact, ≤10 28 ngehele getallen nmet een decimale punt 1 byte 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes 16 bytes
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken
Values versus References Rectangle r; r = new Rectangle(1,2,3,4); y x h w r 104 h w b Bitmap b; b = new Bitmap("t.jpg"); class Bitmap struct Rectangle
Type-controle nCompiler controleert type van toe te kennen waardes int x, y ; double d; Color c; x = 3; x = y; d = 3.14; c = Color.Red; x = 3.14; x = “hoi”; d = c; c = 3;
Type-conversie getallen int x, y ; double c, d; x = 5; d = 3.14; d = 7; c = x; x = (int) d; y = (int) (c/2); ntype klopt nint-waarde past ook in een double-variabele ndouble past afgekapt in int, mits programmeur accoord
Type-controle parameters nCompiler controleert of parameters van methoden het goede type hebben g.DrawString ( ”hallo”, br, ft, 10, 20 ); x = 100; y = 10; waarde = 37; g.DrawString ( waarde, br, ft, 0.3 * x, y ); ”” + (int)( ) String int Brush Font
Controls Form Label Button Label TextBox
CirkelCalc class Scherm : Form { } private double oppervlakte(...) { } }...Parse(invoer.Text); uitvoer.Text = this.oppervlakte(...)... return... public void bereken(...) { TextBox invoer; Label uitvoer; public Scherm( ) { Button knop; Label tekst; invoer = new TextBox(); knop.Click = this.bereken; } mag je gebruiken in alle methodes heeft de variabelen niet nodig static Scherm
Communicatie met methoden nParameters : aanroeper geeft waarde door aan de methode nMethode-resultaat : methode geeft waarde terug aan de aanroeper net zoals een wiskundige functie
Methoden met een resultaat private double kwadraat (double x) { return x*x ; } type van het resultaat waarde van het resultaat in speciale return-opdracht
Methodes die elkaar aanroepen private double kwadraat (double x) { return x*x ; } private double oppervlak (double r) { return Math.PI * this.kwadraat(r); } public void bereken (...) { uitvoer.Text = this.oppervlak(25).ToString(); } class CirkelCalc : Form { }
Publieksvraag nSchrijf een methode driewerf met een String-parameter, die 3 herhalingen ervan oplevert this.driewerf("Hoera!")"Hoera!Hoera!Hoera!" private string driewerf (string x) { } return x+x+x;
-syntax expressie getal expressie operator expressie() variabele ”” symbool object expressie (), new klasse naam property naam this klasse naam methode naam.
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie;
Hoofdstuk 6 Herhaling Nieuw!
while ( x<1000 ) x = 2*x; public void tekenScherm (object o, PEA pea) { int x; x = 1; pea.Graphics. DrawString ( x.ToString(), ft, br, 10, 10); } Opdrachten herhalen body wordt steeds opnieuw uitgevoerd zolang de voorwaarde geldig is X
Meer opdrachten herhalen int x, t; x=1; t=0; while ( x<1000 ) { x = 2*x; t = t+1; } return t; } n private static int Naam ( ) { accolades smeden twee opdrachten tot één body teller telt hoe vaak er wordt verdubbeld (int n)TweeLog
Herhalen met een teller public void tekenScherm (object o, PaintEventArgs pea) { int t; t=0; while ( t<10 ) { pea.Graphics.DrawString( ":-)", br, ft, 0, 20*t ); t = t+1; } teller bepaalt het aantal herhalingen en komt goed van pas in de body
Publieksvraag nSchrijf een methode driewerf met een String-parameter, die 3 herhalingen ervan oplevert nSchrijf een methode veelwerf met een String-parameter, en een getal n die n herhalingen van de String oplevert this.driewerf("Hoera!")"Hoera!Hoera!Hoera!"
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; }
Publieksvraag nMaak een methode macht met twee parameters ugrondtal (reëel getal) uexponent(natuurlijk getal) die de waarde oplevert van grondtal exponent
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; }
Vergelijk-operatoren n<kleiner dan n<=kleiner dan of gelijk aan n>groter dan n>=groter dan of gelijk aan n==gelijk aan n!=ongelijk aan x=5 x wordt 5 ! x==5 is x gelijk aan 5 ?
Expressies nExpressie met een getal als waarde nExpressie met een tekst als waarde nExpressie met een waarheid als waarde 2 * (lengte + breedte) "Hallo " + persoon teller < exponent type int type bool type string value object- value
Bool expressies nVergelijken van waarden nCombineren van andere bool-expressies met logische operatoren u&&and u||or u !not x <= y x 0 ! (x==0 && y==0)x!=0 || y!=0 George Boole ( )
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; while)(expressieopdrachtblok
Constanten nConstanten met een getal als waarde nConstanten met een tekst als waarde nConstanten met een waarheid als waarde 2 "Hallo" true false "true"
Gebruik van bool expressies nAls voorwaarde van een while-opdracht nRechts van een toekenningsopdracht nAls resultaat van een methode while (x<10)... bool b; b = x<10 ; return x<10 ;
Publieksvraag nSchrijf een methode deelbaar, die antwoordt of x deelbaar is door d private static bool deelbaar (int x, int d) { } x%d == 0return ; waarheidswaarde als resultaat
Publieksvraag nSchrijf een methode kleinsteDeler, die antwoordt wat de kleinste deler is van x private static int kleinsteDeler (int x) { } int d; d = 2; while ( x%d != 0) d = d+1; return d ; probeer ze één voor één
Variabelen aanpassen nAfgekorte notaties: x = x * 2 ; oude waarde wordt nieuwe waarde x = x * 2 ; x *= 2 ; x = x + 5 ; x += 5 ; x = x + 1 ; x += 1 ; x ++ ; wordt vermenigvuldigd met wordt vermeerderd met wordt opgehoogd
Herhaling met een teller int t ; t = 0; while ( t<x ) t ++ ; } { // doe iets nuttigs // met t for ( t=0 ; t<x ; t++ ) for t ++ ; t = 0;
for-opdracht eenmalige initialisatie int t ; for ( t=0 ; t<x ; t++ ) voorwaarde om door te gaan stap naar de volgende gr.DrawString( "#", br, ft, 0, t*10 ); for ( t=1 ; t<=x ; t++ )for ( t=x ; t>=0 ; t -- )for ( t=2 ; !deelbaar(x,t) ; t++ )
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; while)(expressieopdrachtblok for)(expropdrachtexpr ;;
Syntax van opdrachten opdracht returnexpressie; while)(expressieopdrachtblok for)(expropdrachtexpr ;;
Herhaalde herhaling nBody van een for-opdracht is een opdracht dat kan zelf ook een for-opdracht zijn! int x, y; for (y=0; y<10; y++) for (x=0; x<10; x++) gr.DrawString( "+", br, ft, 10*x, 10*(y+1) ); y
Extreme gevallen nNul keer herhalen for (y=0; y<0; y++) gr.DrawString("hoi", br, ft, 10, 10); nOneindig vaak herhalen while (true) audio.Play( ); gr.DrawString("hoi", br, ft, 10, 10); deze opdracht komt nooit aan de beurt!
Onbedoelde oneindigheid x=1; aantal = 0; while (aantal<10) x = x*2; aantal = aantal+1; {}{} accolades vergeten...
Onbedoelde oneindigheid for (x=0; x<10; x++) ; totaal = totaal + x ; Puntkomma teveel… ;
Compiler-meldingen nFoutmeldingen uvariabele niet gedeclareerd upuntkomma vergeten u... nWaarschuwingen uvariabele ongebruikt uunreachable code ustatement has no effect uwhile-statement doesn’t terminate deze waarschuwing is theoretisch onmogelijk!
Het Halting-problem is onoplosbaar bool stopt (string filenaam) {.... } void gemeen (string filenaam) { while ( stopt(filenaam) ) x++; } Ha! En dit dan? Nietes! Deze methode lost het op: stopt( "Gemeen.cs" ) wat komt er dan uit: ?
Het Halting-problem is onoplosbaar void gemeen (string filenaam) { while ( stopt(filenaam) ) x++; } stopt( "Gemeen.cs" ) Twee mogelijkheden: n“Gemeen” stopt wel n“Gemeen” stopt niet...dus stopt levert true op...dus gemeen bijft hangen!...dus stopt levert false op...dus gemeen stopt direct! tegenspraak! dus stopt kan helemaal niet bestaan
Andere Halting -achtige problemen nWordt een opdracht ooit uitgevoerd? nIs een programma een virus? en hoe werkt een virus-checker dan? nòf te streng: keurt teveel af nòf te coulant: laat sommige door lastig gevaarlijk
Het Halting-problem is onoplosbaar nEr bestaan dus onoplosbare problemen! nAlan Turing (1936): On computable numbers, with an application to the Entscheidungsproblem door Hilbert in 1900 bedachte uitdaging voor de nieuwe eeuw
On computable numbers... nIntroduceert als gedachtenexperiment een Logical Computing Machine ugegevens §op een papierstrook uprogramma §in een geheugen, of zelfs: §ook op de papierstrook "Turing machine" 10 jaar voor de eerste computer!
Voorbeeldprogramma: Renteberekening door de gebruiker in te vullen TextBox -objecten Label met het resultaat Button met een Click handler
Rente-programma private void knop_Click(object o, EventArgs ea) { } bedragBox.Textdouble.Parse( ) ;double bedrag = double rente = double.Parse( renteBox.Text ); for (jaar=0; jaar<=10; jaar++) bedrag *= (1+0.01*rente); resultaat.Text += "na" + jaar + "jaar" + bedrag; { } int jaar; resultaat.Text = "";
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:
Opbouw herhaling nInitialisatie nHerhaalde aanpassing nGebruik van het resultaat kap=start;y=1;tot=0; kap*=(1+0.01*rente); y=(y+x/y)/2;tot+=x; gr. DrawString (""+kap,...); return y; lab. Text = tot ; res=""; res+="|"; return res;
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
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 109 – 017 – 106 – 175 – 112 – 103 nWoensdag: werkcoll, hoorcoll, prakt S/T/UV/W