Practicum imperatief en object-georiënteerd programmeren voor CKI 2011-12

Practica vinden plaats in de practicumruimtes in de binnenstad (KNG 80, zie het rooster). Als u zich tijdig heeft aangemeld dan is er voor u een account aangemaakt. Bij inlogproblemen hiermee kunt zich wenden tot de helpdesk aldaar. Definitieve groep indeling (gewijzigd! tov oorspronkelijke nav aangegeven verhindering).
  1. groep een (di 13-15, do 11-13)
  2. groep twee (di 15-17, do 13-15)

herkansingsopdracht (ter vervanging van 1 van de vier kleine projecten)

Schrijf een programma Sociaal.java dat gegeven een 2-dimensionaal grid van spelers voorzien van ballen, als doel heeft de ballen rijkelijk gelijkelijk (zie onder voor een technische uitleg van deze vooralsnog vage notie) over de spelers te verdelen. Daartoe kunnen spelers herhaaldelijk een bal aan een van hun buren (volgens het grid) aanbieden. Een mogelijke beginsituatie van een grid van 2 rijen bij 3 kolommen waarin 2*3*2 (d.w.z. 12) ballen in het spel zijn, is:

waar de rode pijlen de buurrelatie weergeven. Iets preciezer dient uw programma aan de volgende eisen te voldoen:

Schrijf uw programma (de run methode van Speler) zo dat een willeurige beginsituatie altijd resulteert in een situatie waarin de ballen bijna gelijkelijk over de spelers verdeeld zijn. B.v. een mogelijke uitkomst voor het bovenstaande voorbeeld is:

U mag naar believen methoden (ook de boven gespecificeerde) synchronized maken (maar voorkom deadlocks!). Bonuspunten kunnen verdiend worden door ofwel een eindtoestand te detecteren, ofwel het algoritme uit te breiden zodat altijd totale gelijkheid (waarin alle spelers precies evenveel ballen hebben) bereikt wordt.

Dit programma dient zelfstandig (dus niet in tweetallen) gemaakt te worden. Lever uw codes voor vrijdag 24 februari 17:00 in bij de docent.

Opmerking voor het inleveren (27-01-2012)

Test voor het inleveren uw programma! Controleer in ieder geval dat het doet wat het zou moeten doen voor enige eenvoudige formules zoals b.v. new En(new Atoom(1),new Niet(new Atoom(1))) (onvervulbaar dus Herbrand normaalvorm 0), new Of(new Atoom(1),new Niet(new Atoom(1))) (tautologie dus Herbrand normaalvorm 1), new Of(new Atoom(1),new Niet(new Atoom(2))) (contingent), new Exof(new Exof(new Waar(),new Atoom(1)),new Atoom(1)) (tautologie dus Herbrand normaalvorm 1). Probeer zelf 5 andere interessante formules om mee te testen uit.

Practica 14-16 (donderdag 19, dinsdag 24, donderdag 26 januari 2012)

Practicum 13 (donderdag 12 januari 2012)

Practicum 12 (dinsdag 10 januari 2012)

Practicum 11 (donderdag 5 januari 2012)

Practicum 10 (dinsdag 3 januari 2012)

Practicum 9 (dinsdag 13 december 2011)

Inleveropgave 3 voor het vak Imperatief en Objectgeorïenteerd Programmeren voor CKI

De inleveropgave is op 2 januari geupdatet! Lees de opgave nogmaals goed door!

Zorg dat je begrip hebt van objecten, inheritance, interfaces, abstract classes en javadoc voordat je aan deze opgave begint. Lees de hele opgave door voordat je code gaat schrijven!
Het doel van deze opgave is het simuleren van een ecosysteem waarin konijnen en vossen in een predator-prooi relatie leven. Het is de bedoeling dat je vier klassen schrijft. Vind een combinatie van waardes voor pks, pvs en pvek zodat de populatie meestal na 80 generaties nog leeft (minstens 2 konijnen en 2 vossen). Zet dit in commentaar bij deze variabelen in Ecosysteem. Commentaar voor deze klassen dient in de stijl van javadoc geschreven te worden, zoals al gedaan is voor de interfaces.
Lever deze vier klassen plus de javadoc in als een zipbestand met als naam studentnummer.zip.

Opmerkingen

Bonusopgaven:

  1. Vind een combinatie van pks, pvs en pvek en constructorargumenten die met grote kans in de 400ste generatie nog leven bevat (tenminste 2 konijnen en 2 vossen).
  2. Schrijf een alternatieve constructor voor Ecosysteem met een vijfde argument int konijnenholen. Zorg ervoor dat er in een ecosysteem gemaakt met deze constructor het gegeven aantal konijnenholenbojecten is, waarvoor geldt:
    • Als een konijn op een konijnenhol stapt, komt hij uit een willekeurig ander konijnenhol waar geen vossen in de directe omgeving van zitten (aangrenzende cellen).

Practicum 8 (donderdag 8 december 2011)

Practicum 7 (maandag 5 december 2011)

Practicum 6 (donderdag 1 december 2011)

Practicum 5 (dinsdag 28 november 2011)

Tweede Inleveropgave

Deze opdracht gaat over een simpel soort woordpuzzels, die uit twee elementen bestaan: Het doel van de puzzel is om de woorden uit W in G terug te vinden. Een woord kan in het grid gelezen worden van links naar rechts, van boven naar onder en diagonaal van boven naar onder, van links naar rechts. Andere richtingen (bijv. van onder naar boven) zijn niet mogelijk.

De puzzel moet voldoen aan een aantal correctheidscriteria:

Voor W moet gelden: Voor G moet gelden: Ter illustratie van de werking van het programma gebruiken we de volgende verzameling woorden W en het volgende grid G: Schrijf een programma Woordzoeker.java dat voldoet aan de volgende eisen: Bonus:

Practicum 4 (donderdag 24 november 2011)

Practicum 3 (dinsdag 22 november 2011)

Practicum 2 (donderdag 17 november 2011)

Oefenopgaven

Eerste Inleveropgave

Schrijf een programma Palindromen dat de volgende methoden bevat: Let op!

Voor gevorderden (optioneel)

Schrijf een programma Quine waarvan het enige dat het doet is dat het zichzelf afdrukt. Iets preciezer, uw programma dient aan de volgende eisen te voldoen:
  1. Het uitvoeren van de commandline instructies:
    $ javac Quine.java
    $ java Quine > Quine.txt
    $ diff -s Quine.java Quine.txt
    
    dient als uitvoer te leveren:
    Files Quine.java and Quine.txt are identical
    
    Ter verduidelijk, het Unix commando diff kan gebruikt worden om te testen of twee bestanden, hier de broncode Quine.java en de uitvoer Quine.txt van het programma, gelijk zijn of niet.
  2. U mag alleen gebruik maken van operaties op Strings, en escape codes. In het bijzonder mag u: - geen gebruikmaken van kennis van unicode-codepoints - geen gebruikmaken van input (b.v. een programma dat de broncode van het programma zelf inleest en afdrukt is niet toegestaan). - het bestand Quine.java niet veranderen door het runnen van het programma Quine.

Practicum 1 (dinsdag 15 november 2011)

Het doel van het practicum is te zorgen dat iedereen practicum kan doen (kan inloggen) en op basis niveau vertrouwd raakt met de edit-compile-test cyclus, en met basale Java syntax.
  1. Het compileren en executeren van Java programma's gebeurt in een zogeheten terminal, zoals gedemonstreerd op het hoorcollege. Op de practicumcomputers kunt u een terminal programma vinden in de map Utilities van de map Applications. Start een terminal. Java programma's dienen met een zogeheten editor aangemaakt te worden (dus geen tekstverwerkingsprogramma's, ihb geen Word). Er zijn vele editors op de practicumcomputers geinstalleerd, bv in Network Applications staan: SubEthaEdit, TextMate, TextWrangler, Aquamacs Emacs, en nog vele andere. Start een editor en open het bestand HelloWorld.java. Compileer het door in de terminal in te tikken
      javac HelloWorld.java
    
    Als dit geen foutmelding oplevert (dat zou zo behoren te zijn), levert dit een nieuw bestand HelloWorld.class op, dat u kunt uitvoeren door in de terminal in te tikken
      java HelloWorld
    
    Als nu in de terminal
      Hello World! 
    
    verschijnt heeft u zojuist uw eerste Java programma uitgevoerd. Verander vervolgens het uitroepteken in het programma (in de editor) in een vraagteken, en doorloop de bovenstaande cyclus (compileren, uitvoeren) nogmaals om te zien dat er dan
      Hello World? 
    
    in de terminal verschijnt.
  2. Doe opgave 1.9 uit het boek (blz. 34): The moon's gravity is about 17 percent that of earth's. Write a program that computes your effective weight on the moon.
    (Een gemakkelijke manier is om uit te gaan van een bestaand programma, zoals b.v. HelloWorld en dat aan te passen (in uw favoriete editor).)

beoordelingscriteria (inleveropdrachten)

De eerste drie inleveropdrachten dienen individueel gemaakt te worden, de laatste in tweetallen. Discussie met anderen wordt aangemoedigd, maar kopiëren van code van anderen (een andere groep in het geval van de 4de opdracht) is verboden.
Vincent van Oostrom Last modified: Mon 2 Januari 16:04:42 CET 2012 Valid HTML 4.01 Transitional