Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing
|
|
|
- Robert Molenaar
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving, en zal daarmee een beeld geven wat we voor het tweede practicum verwachten. We proberen in dit document niet alleen de oplossing te beschrijven, maar we proberen ook te schetsen hoe we tot die oplossing gekomen zijn. De code van deze oplossing vind je in de folder oplossing (in de zip model.zip ). Datavoorstelling Het eerste wat we doen is ons afvragen welke data we moeten voorstellen, en hoe we die gaan voorstellen. Het is duidelijk dat we op een of andere manier een 'wereld'(doolhof) moeten voorstellen. Een wereld bestaat uit allemaal tegels of 'vakken'. Elk vak zit op een bepaalde 'positie' in de wereld. Elk vak is ofwel een 'muur'ofwel een vrije tegel (een 'vloer'). Een vloer kan een 'schat'bevatten, en kan een 'persoon'bevatten. Als we even vooruit kijken, dan weten we dat in subdeel B, een tegel ook een 'kruimel'kan bevatten. We kunnen dus zeggen dat een tegel een 'Voorwerp'kan bevatten dat ofwel een schat, ofwel een kruimel is. Een 'Positie'object zal een x- en een y-coördinaat hebben als instantie variabelen. We maken deze private en voorzien een methode geefx en geefy om de coördinaten uit te lezen. Op deze manier is een positie onveranderbaar. public class Positie { private int x; private int y; public Positie (int x, int y) { this. x=x; this. y=y; public int geefx() { return x; public int geefy() { return y; 1
2 Een Wereld object zal als instantie variabele een tabel hebben van type Vak. Het is ook interessant om het mannetje (type Persoon ) bij te houden in een aparte variabele. Als we dit niet doen moeten we alle vakjes afgaan tot we het vakje vinden met het mannetje, wanneer we het mannetje nodig hebben. Interessante methodes voor Wereld zijn: public Persoon geefmannetje() public Vak geefvak (Positie positie) We hebben geen methode om een vakje te veranderen nodig omdat de wereld zelf niet meer verandert. Elk Vloer object heeft een variabele voorwerp en een variabele persoon om bij te houden welke persoon of welk voorwerp op dat vakje staat. We maken dus methodes: public boolean bevatvoorwerp() { return voorwerp!=null; public boolean bevatpersoon() public Voorwerp geefvoorwerp() public Persoon geefpersoon() public void verwijdervoorwerp() public void verwijderpersoon() public void plaatsvoorwerp(voorwerp voorwerp) public void plaatspersoon (Persoon persoon) Een Persoon object zal later acties moeten kunnen ondernemen in de wereld. Het is dus best als dat object bijhoud in welke wereld die persoon zit en welk zijn positie in die wereld is. We komen dus tot onderstaand (voorlopige) klassendiagramma. We zullen later extra methodes toevoegen wanneer we weten welke extra bewerkingen op de data moeten kunnen gebeuren. 2
3 We maken een constructor voor de klasse Wereld die als parameter een Scanner object meekrijgt. Deze constructor zal de data uit het Scanner object inlezen, en de tabel creëren en opvullen. Ons probleem kan op hoog niveau beschreven worden als: Zolang het einde van de invoer niet bereikt is blijven we een regel verwerken. public Wereld(Scanner scanner) { while (scanner.hasnextline()) { verwerkregel (scanner); We hoeven ons nu dus enkel nog te concentreren op het verwerken van een regel. We kunnen alle regels negeren, behalve die met DIM en WERELD. Voor de DIM-regel lezen we de dimensies in en creëren de tabel die de vakken bijhoud. Als we de WERELD regel tegenkomen moeten we wereld inlezen die daarachter komt. protected void verwerkregel (Scanner scanner) { String regel=scanner.nextline (); Scanner regelscanner=new Scanner (regel); //Als regel leeg is of alleen spaties bevat, //geeft de methode next() een fout. //Vandaar onderstaande test. Zo negeren we die //regels. if (regelscanner.hasnext()) { 3
4 String begin=regelscanner.next (); if (begin.equals("dim")) { int breedte=regelscanner.next Int (); int hoogte=regelscanner.nextint (); vakken=new Vak[hoogte] [breedte]; else if (begin.equals("wereld")) { leeswereld(scanner, vakken); //alle andere regels worden genegeerd. Het probleem is weer vereenvoudigd. We weten dat als de onderstaande methode opgeroepen wordt, de tabel gecreëerd is met de juiste dimensies (anders is er iets mis met de data, aangezien DIM altijd voor WERELD moet komen), en dat de er 'hoogte'regels in het Scanner object zitten die de wereld voorstellen. Normaal mogen we veronderstellen dat de invoer correct is. Aangezien dat de invoer soms met de hand gemaakt wordt kan het geen kwaad te zorgen dat we een paar fouten aankunnen. We gebruiken hasnextline om te testen of er inderdaad voldoende regels in de invoer zitten (indien niet gebruiken we een lege regel). Het kan ook zijn dat sommige regels kleiner zijn dan de breedte (een paar spaties te weinig gezet). In dat geval geven we de variabele 'soort'de waarde ''voor alle karakters na het einde van de regel. Elke positie in de tabel wordt opgevuld met het juiste subtype van Vak. We ontcijferen de karakter code in de methode decodeersoort. protected void leeswereld(scanner scanner, Vak[] [] vakken) { for (int y=0; y<vakken.length; y++) { String regel=""; if (scanner.hasnextline ()) regel=scanner.nextline (); for (int x=0; x<vakken[0].length; x++) { char soort= ; if (x<regel.length ()) soort=regel.charat (x); Vak vak=decodeersoort(soort, x, y); vakken [y] [x] =vak; Als we het mannetje tegenkomen, zetten we dat niet alleen op het vloer vakje, maar steken we dat ook in de instantievariabele 'mannetje'. protected Vak decodeersoort(char soort, int x, int y) { Vak resultaat; switch (soort) { case # : resultaat=new Muur (); 4
5 break; : resultaat=new Vloer (); mannetje=new Persoon(new Positie(x, y), this); ((Vloer)resultaat).plaatsPersoon (mannetje); break; case $ : resultaat=new Vloer (); ((Vloer) resultaat).plaatsvoorwerp(new Schat()); break; default: resultaat=new Vloer (); return resultaat; Tekenen van de wereld Het valt te verwachten dat er wel vaker objecten zijn die getekend moeten worden en waarvoor we niet gewoon een bestaande figuur kunnen gebruiken. Het is dus interessant om een algemene interface te maken om alle soorten objecten die tekenbaar zijn te behandelen. Hierin steken we een methode om op een bepaalde plaats op een canvas, dat object te tekenen. We geven de verzameling van figuren mee die door dat object gebruikt kunnen worden. Ook de breedte en de hoogte van een object kunnen afhangen van de gebruikte figuren. import bvp.*; public interface Tekenbaar { public void tekenop(figuur canvas, int x, int y, Figuren figuren); public int geefbreedte(figuren figuren); public int geefhoogte (Figuren figuren); We laten de abstracte klasse Vak, de interface Tekenbaar implementeren. public abstract class Vak implements Tekenbaar { public void tekenop (Figuur canvas, int x, int y, Figuren figuren) { tekenvak(canvas, x, y, figuren); protected abstract String geeffiguurnaam(); public void tekenvak(figuur canvas, int x, int y, Figuren figuren) { canvas.plaatsfiguur(figuren.getfiguur(geeffiguurnaam()), x, y); public int geefbreedte (Figuren figuren) { return figuren.getfiguur(geeffiguurnaam()).getbreedte (); public int geefhoogte (Figuren figuren) { return figuren.getfiguur(geeffiguurnaam()).gethoogte(); 5
6 De klasse Muur wordt dan eenvoudig: public class Muur extends Vak { protected String geeffiguurnaam() { return muur ; De klasse Vloer wordt dan: public class Vloer extends Vak { protected String geeffiguurnaam() { return "vloer"; public void tekenvak(figuur canvas, int x, int y, Figuren figuren) { super.tekenvak(canvas, x, y, figuren); if (bevatpersoon()) { geefpersoon().tekenop(canvas, x, y, figuren); else if (bevatvoorwerp()) { geefvoorwerp().tekenop(canvas, x, y, figuren);... We gaan dus ook Persoon en Voorwerp, de interface Tekenbaar laten implementeren. Als we de wereld willen tekenen, moeten we een tabel van tekenbare objecten tekenen. Ofwel tekenen we de hele tabel, ofwel slechts een klein venster (zie subopgave A). In dat laatste geval moeten natuurlijk ook de positie van dat venster in de tabel opgeven. Het lijkt interessant om een aparte klasse te maken, die al deze parameters bijhoudt. Op die manier kunnen we ook meerdere vensters op dezelfde wereld (met verschillende parameters maken). Bij voorbeeld een klein venster (met grote tegels) rond het mannetje, en daarnaast de hele wereld met kleine tegels. De klasse TabelVenster is een Tekenbaar object. We implementeren dus de methodes van deze interface. Daarnaast maken we nog een paar methodes om de instantievariabelen aan te passen. De variabele buitenfiguur bevat de naam van de figuur die gebruikt wordt als onze klasse cellen moet tekenen die buiten de tabel liggen. Als we de hele tabel willen tonen, moeten we bij oproep van de constructor, de rijen en kolommen van het venster even groot nemen als die van de tabel. De constructor verwacht een tabel van type Tekenbaar[][]. Aangezien Vak de interface Tekenbaar implementeert, kunnen we dus ook een tabel van type Vak[] [] meegeven. We kunnen deze klasse dus hergebruiken voor andere tabellen, zolang de elementen van die tabel maar de interface Tekenbaar implementeren. import bvp.*; public class TabelVenster implements Tekenbaar { 6
7 protected int rijen; protected int kolommen; protected Positie positie; protected Tekenbaar[] [] cellen; protected String buitenfiguur; public TabelVenster(int kolommen, int rijen, Tekenbaar[][] cellen) { this.kolommen=kolommen; this.rijen=rijen; this.cellen=cellen; positie=new Positie (0,0); public void tekenop (Figuur canvas, int x, int y, Figuren figuren) { int celbreedte=cellen[0][0].geefbreedte(figuren); int celhoogte=cellen[0][0].geefhoogte(figuren); int canvasx=x; int canvasy; for (int i=positie.geefx(); i<kolommen+positie.geefx(); i++) { canvasy=y; for (int j=positie.geefy(); j<rijen+positie.geefy(); j++) { if (i>=0 && j>=0 && i<cellen[0].length && j<cellen.length) { cellen[j][i].tekenop(canvas, canvasx, canvasy, figuren); else { canvas.plaatsfiguur(figuren.getfiguur(buitenfiguur), canvasx, canvasy); canvasy+=celhoogte; canvasx+=celbreedte; public int geefbreedte(figuren figuren) { int celbreedte=cellen[0][0].geefbreedte(figuren); return celbreedte*kolommen; public int geefhoogte(figuren figuren) { int celhoogte=cellen[0][0].geefhoogte(figuren); return celhoogte*rijen; public int geefaantalkolommen() { return kolommen; public int geefaantalrijen() { return rijen; public void zetvensterpositie(positie positie) { this.positie=positie; 7
8 public void zetbuitenfiguur(string figuur) { buitenfiguur=figuur; Het mannetje besturen en kruimels leggen Het is duidelijk dat we een lus zullen maken die de toetsen die de gebruiker intikt verwerkt, en het mannetje laat bewegen. We moeten echter nog beslissen waar die code gedefinieerd moet worden. In de klasse Wereld lijkt niet zo n goed idee, aangezien gebruikersinvoer inlezen niet zo veel met het voorstellen van een wereld te zien heeft. We kunnen het zoeken van de schat ook voorstellen met de klasse Zoektocht. Klassen zijn zeker niet altijd concrete objecten. Het kunnen ook begrippen zijn. We houden in deze klasse enerzijds de wereld bij waarin we aan het zoeken zijn, en anderzijds het bord en de figuren die we gebruiken om die zoektocht te visualiseren. We kunnen in deze klasse dan de methode zoek() definiëren, die de lus zal bevatten, op hoog niveau kunnen we zeggen dat we zolang de schat niet gevonden is, wachten op invoer van het toetsenbord, en dit commando dan verwerken. public class Zoektocht { Wereld doolhof; TabelVenster venster; Figuren figuren; Bord bord; Figuur basis; public static void main(string[] args) { Zoektocht tocht=new Zoektocht(); tocht.zoek(); public Zoektocht() { bord=new Bord("Doolhof"); figuren=new Figuren(); maakdoolhof(); venster=maakvenster(doolhof); basis=new Figuur(venster.getBreedte(figuren), venster.gethoogte(figuren)); public void zoek() { venster.tekenop(basis, 0, 0, figuren); bord.toon(basis); while (!schatgevonden()) { String line= bord.getscanner().nextline(); if (line.startswith("toetsenbord")) { Scanner linescan=new Scanner (line); linescan.next(); //"toetsenbord" overslaan String toets=linescan.next (); verwerkcommando (toets); 8
9 Het probleem is dus weer vereenvoudigd tot een methode die aangeeft of de schat gevonden is, en een methode om een commando te verwerken. We kunnen het mannetje 4 commando s geven. Ga naar links, naar rechts, naar boven en naar onder. Maar in de 4 gevallen gebeurt eigenlijk hetzelfde. We testen of het vakje in de opgegeven richting begaanbaar is. Als dat zo is dan laten we het mannetje in die richting stappen. De methode wordt dus: public void verwerkcommando(string toets) { Richting richting=vindrichting(toets); if (richting!=null) { Positie huidig=doolhof.geefmannetje().geefpositie(); Positie volgende=doolhof.volgrichting(huidig, richting); doolhof.geefmannetje().ganaar(volgende); //teken het veranderde bord rooster.tekenop(basis, 0,0, figuren); bord.toon(basis); Nu moeten we dus nog een methode vindrichting maken en een klasse Richting. In doolhof kunnen we dan een methode definiëren die de positie teruggeeft, waar je terechtkomt als je vanuit een gegeven positie een bepaalde richting uitstapt. En uiteindelijk moeten we in de klasse Persoon nog een methode ganaar maken. Deze methode moet eerst testen of het mogelijk is om naar die positie te gaan. We doen dit door aan het vakje te vragen of het de doorgang blokkeert of niet. Deze methode is gedefinieerd op Vak. De subklasse Muur zal hier natuurlijk 'true'op antwoorden, terwijl een Vloer hier 'false'op antwoord. public void ganaar(positie volgende) { Vak volgendvak=doolhof.getvak (volgende); if (!volgendvak.blokkeertdoorgang()) { ((Vloer)doolhof.getVak(positie)).verwijderPersoon(); positie=volgende; ((Vloer)volgendVak).plaatsPersoon (this); Kruimels strooien Een Kruimel is net zoals Schat een subklasse van Voorwerp. Een kruimel op een vakje zetten gebeurt dus op dezelfde manier als een schat op een vakje zetten. Het enige wat we moeten aanpassen is de methode verwerkcommando zodat die wanneer 'enter'gedrukt wordt, een kruimel legt op de positie waar het mannetje staat. public void verwerkcommando(string toets) { Richting richting=vindrichting(toets); if (richting!=null) { 9
10 ... else { if (toets.equals("!-enter")) { Positie huidig=doolhof.geefmannetje().geefpositie(); Vak vak=doolhof.geefvak(huidig); if (vak.geefvoorwerp()==null) { vak.plaatsvoorwerp(new Kruimel()); else { vak.verwijdervoorwerp (); Beperkt zicht In sectie 3 hebben we de mogelijkheid al opengelaten om het aantal rijen en kolommen in een Tabel Venster kleiner te maken dan de tabel zelf. De enige uitbreiding om steeds de omgeving rond het mannetje in het venster te zien, is dat we de positie van het venster steeds moeten zetten nadat het mannetje bewogen heeft. Dus in de methode verwerkcommando roepen we een methode centreervenster op voordat we het venster op de wereld tekenen. public void centreervenster(tabelvenster venster) { Positie center=doolhof.geefmannetje().geefpositie(); center=new Positie(center.geefX()-venster.geefAantalKolommen()/2, center.geefy()-venster.geefaantalrijen()/2); venster.zetvensterpositie(center); Onbereikbare posities opvullen We definiëren een methode 'vulop'voor de klasse Doolhof. In deze methode maken we een hulpmatrix. Zoals in de hint in de opgave aangegeven, vullen we die eerst met -1 (voor de muren) en 0 voor de rest. Op de positie van het mannetje (zeker bereikbaar) zetten we een 2. En dan roepen we de methode markeerbereikbaar op. Alle posities die hierna nog steeds 0 zijn in de hulpmatrix, worden in de wereld veranderd naar een muur. public void vulop() { int[][] hulp=new int[vakken.length][vakken[0].length]; for (int i=0; i<hulp[0].length; i++) { for (int j=0; j<hulp.length; j++) { if (vakken[j][i].blokkeertdoorgang()) { hulp[j][i]=-1; else { hulp[j][i]=0; 10
11 Positie bereikbaar=mannetje.geefpositie (); hulp[bereikbaar.geefy()][bereikbaar.geefx()]=2; markeerbereikbaar(hulp); for (int i=0; i<hulp[0].length; i++) { for (int j=0; j<hulp.length; j++) { if (hulp[j][i]==0) { vakken[j] [i]=new Muur(); Om de bereikbare vakjes te vinden blijven we over de wereld lopen om steeds de vakjes die een bereikbaar vakje als buur hebben ook als bereikbaar te markeren. Als je dit eens met de hand op een stukje papier probeert merk je dat het veel sneller gaat als je niet steeds in dezelfde richting de matrix doorloopt. Wij gaan een keer van links naar rechts en van boven naar onder, en een keer van rechts naar links en van onder naar boven. Het is dan ook voldoende om steeds maar twee buren te testen. Vandaar dat we 2 gebruiken i.p.v. 4. public void markeerbereikbaar(int[][] hulp) { int changed; do { changed=0; for (int i=1; i<hulp[0].length; i++) { for (int j=1; j<hulp.length; j++) { if (hulp[j][i]==0 && hulp[j][i-1]+hulp[j-1][i]>0) { hulp[j][i]=2; changed++; for (int i=hulp[0].length-2; i>=0; i--) { for (int j=hulp.length-2; j>=0; j--) { if (hulp[j] [i]==0 && hulp[j] [i+1]+hulp[j+1] [i]>0) { hulp[j] [i]=2; changed++; while (changed!=0); Muren uit één stuk We gaan zoals in de opgave staat aangegeven, elke muur tekenen als 4 aparte stukken. We maken hiervoor een methode tekenvak in de klasse Muur, die de methode in de superklasse Vak vervangt. We houden in de klasse Muur ook 4 instantievariabelen bij, die aangeven welke soort muurdeel moet getekend worden. Deze variabelen van type String heten muurbl, muurbr, muurol en muuror. 11
12 public void tekenvak (Figuur canvas, int x, int y, Figuren figuren) { Figuur bl=figuren.getfiguur(muurbl); if (bl==null) { //Als er geen muurdelen gedefinieerd zijn in het set van //tegelfiguren dat we gebruiken, gebruiken we de originele //muur figuur canvas.plaatsfiguur(figuren.getfiguur("muur"), x, y); else { int h=bl.gethoogte(); int b=bl.getbreedte(); canvas.plaatsfiguur(bl, x, y); canvas.plaatsfiguur(figuren.getfiguur(muurbr), x+b, y); canvas.plaatsfiguur(figuren.getfiguur(muurol), x, y+h); canvas.plaatsfiguur(figuren.getfiguur(muuror), x+b, y+h); Op de moment dat het doolhof gemaakt wordt, kennen we nog niet alle buren van een gegeven muur (de volgende rij is nog niet ingelezen). En als we muren opvullen kan dat ook nog veranderen. Daarom wachten we tot het doolhof af is, en lopen dan nog eens over alle muren. Elke muur moet dan zijn buren checken, en de juiste waarden in de variabelen voor de muurdelen invullen. We roepen daarvoor de methode pasmurenaan op, op het doolhof. In deze methode kijken we of de buren muren zijn. Als een buur buiten de wereld valt, is die buur een muur als we het doolhof opgevuld hebben, en anders is het geen muur. We houden een instantievariabele opgevuld bij in doolhof, die aangeeft of de onbereikbare plaatsen opgevuld zijn of niet. public void pasmurenaan() { int maxx=vakken[0].length; int maxy=vakken.length; for (int i=0; i<=maxx; i++) { for (int j=0; j<=maxy; j++) { if (vakken[j][i].ismuur()) { boolean boven=opgevuld; if (j>0) boven=vakken[j-1][i].ismuur(); boolean bovenrechts=opgevuld; if (j>0 && i<maxx) bovenrechts=vakken[j-1][i+1].ismuur(); boolean rechts=opgevuld; if (i<maxx) rechts=vakken[j][i+1].ismuur(); boolean onderrechts=opgevuld; if (i<maxx && j<maxy) onderrechts=vakken[j+1][i+1].ismuur(); boolean onder=opgevuld; if (j<maxy) onder=vakken[j+1][i].ismuur(); if (i>0 && j<maxy) onderlinks=vakken[j+1][i-1].ismuur(); boolean links=opgevuld; if (i>0) links=vakken[j][i-1].ismuur(); boolean bovenlinks=opgevuld; 12
13 if (i>0 && j>0) bovenlinks=vakken[j-1][i-1].ismuur(); ((Muur)vakken[j][i]).zetBuren(boven, bovenrechts, rechts, onderrechts, onder, onderlinks, links, bovenlinks); De methode zetburen ziet er dan als volgt uit. public void zetburen(boolean boven, boolean bovenrechts, boolean rechts, boolean onderrechts, boolean onder, boolean onderlinks, boolean links, boolean bovenlinks) { int br=(boven?4:0)+(rechts?2:0)+(bovenrechts?1:0); int or=(onder?4:0)+(rechts?2:0)+(onderrechts?1:0); int bl=(boven?4:0)+(links?2:0)+(bovenlinks?1:0); int ol=(onder?4:0)+(links?2:0)+(onderlinks?1:0); muurbl="muurbl"+gettype(bl); muurbr="muurbr"+gettype(br); muurol="muurol"+gettype(ol); muuror="muuror"+gettype(or); private String gettype(int t) { String res=null; switch (t) { case 0: case 1: res="punt"; break; case 2: case 3: res="hor"; break; case 4: case 5: res="ver"; break; case 6: res="hoek"; break; case 7: res="vol"; break; return res; 13
14 Extra uitbreidingen In dit laatste stukje bespreken we nog een paar uitbreidingen, die niet in de opgave stonden. Je kan de code voor het programma met deze uitbreidingen terugvinden in de folder uitbreiding (in de zip model.zip ). Realistischer zicht In de huidige implementatie kunnen we wat we zien beperken tot een klein venster, maar dan kunnen we nog over muren kijken naar stukken waar we nog nooit geweest zijn. We proberen als eerste uitbreiding eens enkel te tonen wat het mannetje kan zien. In een eerste stap maken we een soort bibliotheek om in een tabel te kijken. Stel dat we een kijker hebben die vanuit een bepaalde positie in een tabel de elementen van die tabel kan zien, terwijl sommige elementen het zicht belemmeren. We maken hiervoor een interface 'ZichtElement'en 'Kijker'. public interface ZichtElement { public boolean blokkeertzicht(kijker kijker); public interface Kijker { public void ziet(zichtelement element, int x, int y); public int geefx(); public int geefy(); We maken verder een algoritme 'kijk', dat voor een tabel en een kijker in die tabel, alle elementen bepaalt die zichtbaar zijn voor de kijker (360 graden). Voor elk van de zichtbare elementen zal de methode 'ziet'worden opgeroepen op de kijker. We steken deze methode in de klasse KijkAlgoritme. Deze methode gebruikt ook een hulpklasse ScanElement. Dit algoritme is sterk geoptimaliseerd, trek het je dus niet aan als het niet te volgen is. public class KijkAlgoritme { public static void kijk(kijker kijker, ZichtElement[][] wereld) {... In een tweede stap gaan we dit algoritme gebruiken in ons doolhof programma. Elk vak kan zichtbaar zijn of niet. Na elke stap van ons mannetje hebben we echter een andere versie van ons doolhof, waarin vakken zichtbaar of onzichtbaar worden. We kiezen voor de volgende manier om de zichtbaarheid bij te houden: In elk vakje houden we een variabele 'laatstgezien'bij die aangeeft wanneer het vakje het laatst gezien is (we hogen bij elke versie het versienummer op). We kunnen dan in Vak de volgende methodes definiëren. public boolean isnooitgezien() { return laatstgezien==-1; 14
15 public boolean iszichtbaar() { return laatstgezien==doolhof.geefversie().geefnummer(); public void gezien() { laatstgezien=doolhof.geefversie().geefnummer(); Om te zorgen dat voor elk vakje de variabele laatstgezien de juiste waarde heeft gaan we als volgt tewerk: We passen de klasse Vak aan zodat die de interface ZichtElement implementeert. En we passen de klasse persoon aan zodat die de interface kijker implementeert. Na elke stap van het mannetje roepen we de methode kijk op. De methode ziet in de klasse Persoon roept de methode gezien op voor elk vakje dat hij ziet. We kunnen nu de vakjes anders tekenen afhankelijk of ze zichtbaar zijn of niet. Een eerste mogelijkheid is om alle zichtbare vakjes gewoon te tekenen, en alle onzichtbare vakjes te tekenen door een zwart vakje. Dan wordt er enkel getekend wat het mannetje ziet. Zoals in de figuur hieronder. Een andere mogelijkheid is om de vakjes die nooit gezien zijn zwart te kleuren, de vakjes die zichtbaar zijn gewoon te tekenen, en de vakjes die niet zichtbaar zijn, maar wel ooit gezien, donkerder te tekenen. Dan krijgen we een soort beeld van het geheugen van het mannetje. Een voorbeeld hiervan zie je in de figuur hieronder. 15
16 Voor de tweede mogelijkheid passen we de methode tekenop in de klasse Vak aan als volgt. public void tekenop(figuur canvas, int x, int y, Figuren figuren) { if (iszichtbaar() wereld.alleszichtbaar()) { tekenvak(canvas, x, y, figuren); else { if (isnooitgezien()) { canvas.vulrechthoek(x, y, geefbreedte(figuren), geefhoogte(figuren), new Color (0f, 0f, 0f)); else { tekenvak(canvas, x, y, figuren); canvas.vulrechthoek(x, y, geefbreedte(figuren), geefhoogte(figuren), new Color(0f,0f,0f,.5f)); Als we onze wereld echter met aaneengesloten muren tekenen, dan kunnen we nog altijd een beetje over de muren kijken. We kunnen zien of er een gang of een muur achter ligt. 16
17 Als we dit willen vermijden moeten we onze code aanpassen, zodat de een Muur kan bepalen welke van zijn 4 subdelen zichtbaar is en welke niet. De methode gezien heeft dan wel extra parameters nodig om de richting aan te geven van waaruit we kijken. We roepen gezien daarom als volgt op in de methode ziet van Persoon. ((Vak)element).gezien(x-positie.geefX(), y-positie.geefy()); In de klasse Muur herschrijven we de methodes gezien, tekenop en isveranderd, zodat die elk muurdeel apart behandelen. 17
18 Snellere visualisatie In de huidige implementatie tekenen we alles steeds opnieuw. Het is echter voldoende om alleen de vakjes die effectief veranderd zijn te hertekenen. In de oorspronkelijke versie was dit alleen de oude positie van het mannetje en de nieuwe positie. In de uitgebreide versie zijn dit echter ook de vakjes die zichtbaar of onzichtbaar worden. We vullen de interface Tekenbaar aan met een methode isveranderd(). Voor de klasse Vak geeft deze methode aan of het vak aangepast is ten opzichte van de voorgaande versie van de wereld. public boolean isveranderd() { boolean res=laatstveranderd==wereld.geefversie().geefnummer(); // we controleren of het vak onzichtbaar geworden is in deze versie res = res laatstgezien==wereld.geefversie().geefnummer()-1; return res; public void zetveranderd() { laatstveranderd=wereld.geefversie().geefnummer(); De methode zetveranderd wordt opgeroepen in de methodes verwijdervoorwerp, plaatsvoorwerp, verwijderpersoon, plaatspersoon, en in de methode gezien wanneer het vak in de vorige versie nog onzichtbaar was. Nu kan de methode tekenop in de klasse TabelVenster aangepast worden zodat alleen de veranderde objecten opnieuw getekend worden. Merk op dat wanneer we een klein gecentreerd venster van de wereld tekenen, we ook de vakken moeten hertekenen die niet veranderd zijn, omdat het venster van positie veranderd. We laten dus een optie toe in de klasse TabelVenster om toch alles te hertekenen wanneer nodig. Zo kunnen we een venster op de wereld maken dat steeds volledig hertekend word, en daarnaast de volledige wereld tekenen, waarbij enkel de veranderingen getekend worden. 18
IMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
NAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
Practicum 1 : Doolhof
Beginselen van programmeren 2006-2007 Practicum 1 : Doolhof Opgave Voor dit practicum vragen we je om een programma te schrijven, dat een doolhof kan inlezen van een bestand, dat deze doolhof kan tekenen
Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Overerving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Programmeren (1) Examen NAAM:
Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
Abstracte klassen & Interfaces
Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.
NAAM: Programmeren 1 Examen 21/01/2011
Programmeren 1 21 januari 2011 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Programmeren 1 23 januari 2013 Prof. T. Schrijvers
Programmeren 1 23 januari 2013 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is
PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.
Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze
public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);
Vaknaam: Programmeren I (Java) - Tentamen Module: 2 Datum/Tijd: 17 mrt 2015 / 18.30 20:30 Richting: ICT Code: IC011 Docent: E. Lieuw Boeken en aantekeningen NIET toegestaan. Kladpapier is wel toegestaan.
Zelftest Programmeren in Java
Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test
Game of Life in Java
Game of Life in Java Auteur: drs. M.S.L.F. Manssen http://www.manssen.eu Game of Life is een spel van een rooster van cellen, waarbij telkens een ronde gebeurt waarbij de nieuwe waardes van cellen gebeurt.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten
Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen [email protected] en [email protected]
INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN
INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing
Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft
I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();
Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static
Kleine cursus PHP5. Auteur: Raymond Moesker
Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven
Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur
Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan
Tentamen in2705 Software Engineering
Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen
Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1
Algemene Richtlijnen Programmeren I 26 augustus 2015 Schrijf je naam bovenaan elk antwoordblad en kladblad. Schrijf niet met potlood of in het rood op je antwoordbladen. Gebruik voor elke vraag een afzonderlijk
Ingebouwde klassen & methodes
Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,
TENTAMEN Programmeren 1 VOORBEELDUITWERKING
TENTAMEN Programmeren 1 vakcode: 213500 datum: 10 juli 2004 tijd: 9:00-12:30 uur VOORBEELDUITWERKING Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Niño/Hosch, en van de handleiding
Ontwerp van Informatiesystemen
1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents
Objectgericht programmeren 1.
Objectgericht programmeren 1 [email protected] http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
http://www.liacs.nl/home/kosters/java/
sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/
Design patterns Startbijeenkomst
Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) [email protected] Harrie Passier (2 e examinator) [email protected] Aarzel niet vragen te stellen! Rooster
eerste voorbeelden in Java
Beginselen van programmeren 2 eerste voorbeelden in Java vereisten: een editor: om programma in te tikken en te bewaren een Java compiler: zet ingetikte (bron-) programma om naar byte-code een Java Virtuele
Programmeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
SPOJ oplossingen Gilles Callebaut 7 augustus 2015
SPOJ oplossingen 2012-2013 Gilles Callebaut 7 augustus 2015 DISCLAIMER Oefeningen zijn niet altijd correct of optimaal. Gelieve de oefeningen enkel te gebruiken ter ondersteuning. Van kopiëren leer je
sheets Programmeren 2 Java Recursie, de muis en graphics Walter Kosters http://www.liacs.nl/home/kosters/java/
sheets Programmeren 2 Java Recursie, de muis en graphics Walter Kosters http://www.liacs.nl/home/kosters/java/ 1 Java intro Voorkennis: dat wat bij het college Programmeren 1 over Java behandeld is; zie
TENTAMEN Programmeren 1 VOORBEELDUITWERKING
TENTAMEN Programmeren 1 vakcode: 213500 datum: 28 november 2002 tijd: 13:30 17:00 uur VOORBEELDUITWERKING Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Niño/Hosch, en van de handleiding
VI. Klassen en objecten
VI. Klassen en objecten Klassen en objecten vormen het fundament van OOP. We zullen dus uitgebreid aandacht besteden aan klassen en objecten. U kunt Java niet begrijpen zonder goed met klassen en objecten
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)
Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:
Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de
Programmeren in Java 3
2 september 2007 voor deeltijdstudenten Kop van Zuid Rotterdam, 3 juni 2007 Even voorstellen Naam: Wessel Oele(31) Docent bij opleiding technische informatica Kamer: I210 (tweede verdieping, links de gang
Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur
Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een
Tentamen Imperatief Programmeren
Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven
Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele
Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.
irkel (met Jpanel) ij de onderstaande opdracht behoort het bestand Panels: JPanels_1.java (map Panel) in de map irkel. pplicaties in Java hebben altijd een publieke klasse waarin een methode main voorkomt.
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld
Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor
Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur
Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, 11.00-13.00 uur 1. Een klasse is niet: (a) het type van een object (b) een groepje methoden (c) een groepje variabelen
Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld
Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor
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
Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 1 februari 2019, 11.00 13.00 uur Voor de meerkeuzevragen hebben we verschillende versies. Dit zijn de juiste antwoorden per versie.
Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers
1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen
Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
Robocode. Inleiding tot programmeren
Robocode Inleiding tot programmeren Inhoud Doel cursus Java-controlestructuren Robotje programmeren Doel cursus Inleiding Java Robocode Java Object-gerichte programmeertaal Sun 1991 http://java.sun.com
Hoofdstuk 0. Van Python tot Java.
Hoofdstuk 0. Van Python tot Java. In dit eerste hoofdstuk maken we de overstap van Python naar Java. We bespreken de verschillen en geven wat achtergrondinformatie. In het volgende hoofdstuk gaan we dieper
Java Les 3 Theorie Herhaal structuren
Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een
Lineaire data structuren. Doorlopen van een lijst
Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn
1 Ontwerppatronen. 1.1 Het Command patroon
1 Ontwerppatronen Software-ontwikkelaars worden geconfronteerd met ontwerpproblemen: de manier waarop ze hun programma gestructureerd hebben geeft aanleiding tot slechte eigenschappen zoals rigiteit, fragiliteit,....
Programmeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is
Lessen Java: Reeks 3. David Blinder Jan G. Cornelis
Lessen Java: Reeks 3 David Blinder Jan G. Cornelis Vraag 0: Gebruik van de Debugger Syntax errors: fouten door verkeerd gebruik van Javacommandos code zal niet compileren. Locatie van de fout is bijna
Oefeningen Jaarproject I
Oefeningen Jaarproject I Deze oefeningenreeks behandelt de grafische Scheme bibliotheek die jullie mogen gebruiken voor de implementatie van het Pacman spel. De bibliotheek i is een evaluator voor Scheme
Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers
Verslag SE Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers In dit verslag zullen wij een beschrijving geven, over welke
Opdracht 6: Dodo wordt blijvend slimmer
Opdracht 6: Dodo wordt blijvend slimmer Algoritmisch Denken en Gestructureerd Programmeren in Greenfoot c 2015 Renske Smetsers-Weeda & Sjaak Smetsers Op dit werk is een creative commons licentie van toepassing.
Programmeren in Java 3
7 maart 2010 Deze les Zelf componenten maken Concurrency (multithreading): werken met threads levenscyclus van een thread starten tijdelijk onderbreken wachten stoppen Zelf componenten maken Je eigen component:
Javascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst
s Informatica Hoofdstuk 1 Object Klasse Methode Parameters Type Velden Toestand Compiler Resultaten (returnwaarde) In java fungeren objecten als een model voor de elementen waarin een probleem kan worden
Bijlage Inlezen nieuwe tarieven per verzekeraar
! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer
Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur
Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
Objectgeoriënteerd Programmeren: WPO 4B
Objectgeoriënteerd Programmeren: WPO 4B 1. Inhoud Polymorfie 2. Oefeningen A: Polygon A: Rekenmachine A: Infection A: Waves E: Snake X: Pacman X: Planetendans 2.1 A: Polygon Herneem de opgave Polygon van
Tentamen Programmeren in C (EE1400)
TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd
Hoofdstuk 7: Werken met arrays
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel
Stacks and queues. Hoofdstuk 6
Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked
Dynamiek met VO-Script
Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software [email protected] Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries
PO: Informatica Olympiade 2013-2014
PO: Informatica Olympiade 2013-2014 Wat is de Informatica Olympiade? De Nederlandse Informatica Olympiade (NIO) is een programmeerwedstrijd voor de bovenbouw van het Voortgezet onderwijs. Het is een onderdeel
Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.
1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat
X. Grafische elementen
X. Grafische elementen Om u te helpen bij grafische voorstellingen heeft java een aantal grafische afbeeldingen die u kunt gebruiken. Meestal worden zij in de methode paint(graphics g) geplaatst. Zij moeten
