[Prog] Practicum Examen 2007: Eerste zit

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Tom
Posts: 602

[Prog] Practicum Examen 2007: Eerste zit

Post#1 » Mon Jan 21, 2008 3:12 pm

Voorbehouden op fouten, bevat ook de oplossing, lees de Disclaimer aub.

----------------
1. Inhoudsopgave
----------------
1. Inhoudsopgave
2. De opdracht
3. Oplossing
4. Disclaimer

----------------
2. De opdracht
----------------
Afspraken
- Zet al de module bestanden die je gebruikt hebt in een archief met als naam "srolnummer.Arc". Zoals bijvoorbeeld "s045480.Arc".
- Gebruik enkel en alleen het Oberon lettertype voor je code (geen kleurtjes).
- Hou je strikt aan de Oberon Code Conventions.
- Je mag al de code die je ZELF hebt geschreven gebruiken.
- Je mag je cursus gebruiken.
- Elke vorm van communicatie is verboden.

Opdracht
Je maakt een elektronische versie van het gezelschap spel Zeeslag. Bij Zeeslag is het de bedoeling te ontdekken waar de vloot van je tegenspeler ligt. Dit doe je simpelweg door bommen af te vuren op de vloot van jouw tegenspeler. Om met dit spel te kunnen beginnen moet je eerst je vloot in de zee plaatsen. Dit mag horizontaal en verticaal zolang de boten elkaar maar niet direct horizontaal of verticaal raken.
Concreet maak je een systeem dat 2 spelers bevat en per speler een aantal boten op zijn deel van het speelveld. Elke speler voegt om de beurt een boot toe. Het is toegestaan met ee nvast aantal boten te werken, een dynamische oplossing is natuurlijk beter en verdient meer punten, Het spel start als Speler 1 zijn eerste schot afvuurt, hierna is elke speler om de beurt aan zet.

Alle vereiste functionaliteit in volgorde van belangrijkheid. Het spreekt voor zich dat je punten afhankelijk zijn van de hoeveelheid functionaliteit die geïmplementeerd en getest is. Zorg ervoor dat er een scenario is (opeenvolging van stappen in de Tool file) die dit duidelijk toont. Vergeet ook niet om duidelijk te specificeren welke functionaliteit geïmplementeerd is.

1. In het basisprogramma mag je er vanuit gaan dat het speelveld een vaste grootte (10x10 heeft. Het systeem moet de volgende functionaliteit bevatten:

- Je moet speler 1 en speler 2 een naam kunnen geven.
- Je moet per speler een lijst van boten kunnen toevoegen met de volgende eigenschappen:
- Naam
- Coördinaten (controleer of ze binnen het veld liggen en niet overlappen met andere boten)
- Elke speler moet om de beurt een schot kunnen afvuren (via de Tool file), er wordt weergegeven of een schot raak was of niet. Bij het zinken van een boot verschijnt er ee nboodschap. Bij het zinken van de laatste boot verschijnt er een overwinningsboodschap.
- Je moet per speler een lijst kunnen geven van de reeds geprobeerde schoten en of het raak was.
- Je moet per speler een overzicht kunnen geven van zijn naam en alle boten met hun naam en hun toestand. Dus clear, sunk met coördinaten of een lijst van (eventueel) geraakte compartimenten en een lijst van (eventueel) niet geraakte compartimenten.

Speler1: Sam
SS Wiekvorst:
- Clear: (2,2),(2,3)
SS Antwerpen:
- Clear: (1,1),(1,2),(1,3)
- Hit: (1,4)
SS Retie:
- Sunk: (3,3),(3,4)

- Je moet per speler een lijst bijhouden van schepen die hij heeft doen zinken en deze kunnen weergeven.

Sunck:
- SS Eindhoven (0,1),(0,2),(0,3)
- SS Rotterdam (1,1),(1,2)

2. Om het basis programma uit te breiden gaan we extra functionaliteit toevoegen:

- Je moet voor we beginnen met het spel de lengte en de breedte van het speelveld kunnen aanpassen.
- Voeg een lijst van commandanten toe. Een commandant heeft de volgende eigenschappen:
- Naam
- Lijst met 1 of meerdere boten.
Deze lijst van commandanten moet je kunnen afdrukken samen met de huidige van hun schepen.
- Je moet per speler het schotenveld en het botenveld grafisch kunnen weergeven in twee aparte delen. Een compartiment van een boot is een B, een geraakt compartiment is een H en de zee een G. Voor het schotenveld gelijkaardig met B mis en H raak.

3. Om de overige punten te implementeren:

- Schrijf het geheel door gebruik te maken van OO.
- Geef de keuze om speler 1 en speler 2 te vervangen door een computer speler nadat de boten geplaatst zijn. Het volstaat deze speler ad random schoten te laten afvuren.
- Mogelijkheid om het spel naar een bestand weg te schrijven en weer terug uit te lezen.

BELANGRIJK: Een schip is één entiteit en komt slecht één keer voor in de database. Dit wil dus zeggen dat als een schip moet voorkomen in verschillende lijsten, er niet voor elke lijst (speler, commandant) een nieuw schip wordt aangemaakt.

Veel succes

----------------
3. Oplossing
----------------

Mijn implementatie kan je downloaden door te klikken op deze link.

In deze implementatie heb ik de basis, "aanpasbare grootte" en "OO" van de extras af. (We kregen hier 4 uur de tijd voor)
Ze zijn niet helemaal efficient, maar ik heb geprobeerd het uiteraard zo efficient mogelijk te houden. (Er is geen tijd om inefficiente dingen nog helemaal te gaan veranderen, ook heb ik niet vooraf met zoiets groot geoefend)
Bij elke procedure staat er duidelijk commentaar bij waarvoor de procedure dient, ook heb ik hier en daar nog wel een blok commentaar tussen geworpen.

Ook heb ik ernaar gestreeft zoveel mogelijk OO en Nodes te gebruiken, en het gebruik van het geheugen minimaal te houden.
(Wou eerst zelfs shortints gebruiken, maar INC blijkt hier niet te werken, werkt waarschijnlijk wel met :=)

----------------
4. Disclaimer
----------------

Deze topic heeft als bedoeling toekomstige studenten te helpen en hun te laten zien wat er hun verwacht wordt.

"De opdracht" is afkomstig van de uitgedeelde papieren van het Praktijkexamen, ik ben hier dus niet de auteur van. De auteur heeft het recht om de opdracht weg te laten halen. (Contacteer me hiervoor via mijn UA Student e-mailadres (20072150) of Blackboard)

"Oplossing" is de code die door mij is geschreven (Basislijst.Mod is gebaseerd (vertaald enz...) op die van Arickx) en dient enkel ter inzage om te begrijpen hoe je zo'n opdracht oplost, ga hier dus niet klakkeloos code uit kopiëren, maar gebruik het enkel educatief als een voorbeeld. Het is niet toegestaan om zonder voorafgaande toestemming van mij Zeeslag.Arc of grote gedeelten daarvan over te nemen.



Edit 1: Link gefixt. (15:19)
Edit 2: Disclaimer gefixt. (15:22)
Last edited by Tom on Thu Jan 31, 2008 7:43 am, edited 1 time in total.

User avatar
cG`
Posts: 75

Post#2 » Mon Jan 21, 2008 3:32 pm

Duidelijk teveel vrije tijd :)
Is er duidelijk uitgelegd geweest hoe ge een gelinkte lijst kunt maken waar ge eender welke data in kunt steken? Kdenk dat bij ons bijna niemand OO gewerkt heeft op het examen van programmeren (is zeker voor mij pas echt duidelijk geworden bij software engineering) en dit jaar is iedereen maar bezig met het uitbreiden van den arickx zen lijstmodule.. andere assistent ofzo? :)
[i]"Everything should be made as simple as possible, but not simpler."[/i] - Albert Einstein

Pieter Belmans
Posts: 593
Contact:

Post#3 » Mon Jan 21, 2008 3:39 pm

Andere (en zo te merken slechtere :P) assistenten. Maar, klaarblijkelijk heeft iedereen iedereen zo'n beetje aangestoken met OO gelinkte lijsten. En, de meesten hebben iets van den Arickx vervormd, de from scratch zelfgeschreven modules zijn dun gezaaid :).

User avatar
Tom
Posts: 602

Post#4 » Mon Jan 21, 2008 3:53 pm

Je mag al de code die je ZELF hebt geschreven gebruiken.
en
Schrijf het geheel door gebruik te maken van OO.
Er zit niets anders op dan de lijst van Arickx te gebruiken (zelf bekeken, begrepen, vertaalt en beetje veranderd), hoe wil zonder dit Zeeslag in 4 uren schrijven?
cG` wrote:Kdenk dat bij ons bijna niemand OO gewerkt heeft op het examen van programmeren
Maarja, de tuyeaux opdrachten zijn gemakkelijker dan deze opdracht. Mischien hebben jullie met de reeksen OO niet nader bekeken, of het is mischien duidelijk geworden (aan Arickx) via examens/portfolio dat we OO goed begrijpen?
cG` wrote:Is er duidelijk uitgelegd geweest hoe ge een gelinkte lijst kunt maken waar ge eender welke data in kunt steken?
Hier raak je zelf na het studeren van de theorie en het bekijken van de OOLists voorbeelden van Arickx wel uit. Trial and error.
Last edited by Tom on Mon Jan 21, 2008 6:25 pm, edited 1 time in total.

User avatar
racekakje
WOZ
Posts: 740

Post#5 » Mon Jan 21, 2008 3:58 pm

Ik vonnet veel moeilijker dan de opdrachten vande tuyeaux...
pff.. mochtek nu nog wa meer tijd hebben gekregen wast mss wel gelukt, maar die tijdsdruk is zo enorm vervelend.

Ik hoop op een milde verbetering

User avatar
Shinta
WOZ
Posts: 1122

Post#6 » Mon Jan 21, 2008 4:14 pm

cG` wrote:Duidelijk teveel vrije tijd :)
Is er duidelijk uitgelegd geweest hoe ge een gelinkte lijst kunt maken waar ge eender welke data in kunt steken? Kdenk dat bij ons bijna niemand OO gewerkt heeft op het examen van programmeren (is zeker voor mij pas echt duidelijk geworden bij software engineering) en dit jaar is iedereen maar bezig met het uitbreiden van den arickx zen lijstmodule.. andere assistent ofzo? :)
Het staat in de tuyeaux dat ze het zo best konden doen. Hiermee hoop ik dat ik toch minstens iemand heb kunnen overtuige dit zo te doen (die dat oorspronkelijk niet van plan was).

Mag ik (even de disclaimer volgen ;)) de opdracht in de tuyeaux opnemen ? Zo ook eventueel de oplossing (met bijhorende disclaimer opgenomen).
Remember remember the fifth of November
Gunpowder, treason and plot.
I see no reason why gunpowder, treason
Should ever be forgot...

User avatar
Sebastiaan
Posts: 1184

Post#7 » Mon Jan 21, 2008 4:15 pm

racekakje wrote:Ik vonnet veel moeilijker dan de opdrachten vande tuyeaux...
pff.. mochtek nu nog wa meer tijd hebben gekregen wast mss wel gelukt, maar die tijdsdruk is zo enorm vervelend.

Ik hoop op een milde verbetering
ik hoop op een heel milde verbetering, want zelfs me nen OO lijst volledig zelf gemaakt, was 4u voor zoiets echt wel te kort.

Pieter Belmans
Posts: 593
Contact:

Post#8 » Mon Jan 21, 2008 4:18 pm

Als ze dit strikt gaan verbeteren is zo goed als iedereen gebuisd denk ik. Zou er bijvoorbeeld iemand _alle_ mogelijke fouten bij het plaatsen van een schip controleren bijvoorbeeld? Dat gaat van out-of-bounds, over bestaande schepen, tot onmogelijke schepen.

Ik denk dat de verbetering dus wel zal meevallen, dit was echt 'n examen waarop enkel de besten en best voorbereiden veel konden halen. Zo zouden alle examens eigenlijk moeten zijn in een perfect en eerlijk systeem, maar dan zou het veel harder zijn om te studeren, dus ik pas graag ;). Als de basis er more or less werkbaar stond zult ge 'r wel doorzijn I presume :).


Ja, zonder gelinkte lijst waart ge dood denk ik :P. En ik ben vandaag tegen een paar dingen gelopen die ik niet had voorzien met m'n gelinkte lijst, dus die gaat voor software engineering volgend semester nog wat uitgebreid moeten worden :). En er waren zovele dingen die mijn gelinkte lijst wél kon, maar die niet nodig waren :(.

User avatar
racekakje
WOZ
Posts: 740

Post#9 » Mon Jan 21, 2008 5:38 pm

Zoals sorteren.. nooit gebruikt grr

User avatar
Tom
Posts: 602

Post#10 » Mon Jan 21, 2008 6:21 pm

Shinta wrote:Het staat in de tuyeaux dat ze het zo best konden doen. Hiermee hoop ik dat ik toch minstens iemand heb kunnen overtuige dit zo te doen (die dat oorspronkelijk niet van plan was).

Mag ik (even de disclaimer volgen ;)) de opdracht in de tuyeaux opnemen ? Zo ook eventueel de oplossing (met bijhorende disclaimer opgenomen).
Het staat in de tuyeaux dat je het best kan doen, maar ik dacht er al aan toen Arickx zijn OOLists liet zien. Maar toch leuk dat je het er vermeld.

Ja, je mag het overnemen in de Tuyeaux, was daarvoor ook bedoelt. Liefst wel een vermelding van naam (bij de oplossing) en het duidelijken maken dat het als voorbeeld dient (en dus niet om verder Zeeslag op te schrijven en te verkopen, maarja, wie gaat dat nu met Oberon code doen? :-P). Disclaimer was eigenlijk soort oefening naar later toe (toekomst, werk, ...).

Nota: Bij stukken waar er over eigenschappen gepraat wordt, worden de "volgende twee regels" bedoelt. phpBB (het forum) laat blijkbaar geen beginspaties/tabs toe.

De code die ik heb geschreven is waarschijnlijk niet het beste voorbeeld, als er iemand zich vrij voelt om verbeteringen (meer efficient, herhaalde code in een procedure, ...) toe te voegen... Voel je vrij!

(Ik heb ook bijna overal een lijst voor gebruikt, zelfs voor de spelers, mijn hoofd stond op dat moment echt naar de nodes dat ik geen zin had om een record in een array te steken. En er is hier en daar ook nog wel een slechte work-around...)
racekakje wrote:Zoals sorteren.. nooit gebruikt grr
Ben ook blij dat ze woorden zoals "Alfabetisch" niet hebben gebruikt... Alhoewel ik daar al een functie voor heb geschreven heb ik niet echt zin om nog eens een bijbehorende while te gaan schrijven.

(Vind het al erg dat er stukken zijn met 2-3 geneste WHILE's, met daarin nog eens 1-2 geneste IFs)

User avatar
Tom
Posts: 602

Post#11 » Mon Jan 21, 2008 6:32 pm

OMG! Ben de tool file vergeten in mijn Arc te steken. :shock:

Michael Cochez
Posts: 54

Post#12 » Mon Jan 21, 2008 6:49 pm

even twee tips naar software engeneering toe:
1) efficientie is "NIET" van belang. Probeer in oberon nog niet op efficientie te letten, oberon heeft daar niet alle mogelijkheden voor + de implementaties die onder een ander OS draaien vertragen toch al enorm. Het is beter overzichtelijke en eenvoudige code te schrijven. (Natuurlijk moet je ook geen domme dingen gaan doen zoals recursie waar iteratie veel sneller is enzo..)

2) Ik heb iets tegen de lijstmodule van den Arickx en afgeleiden. Dit aangezien een element dat afgeleid is van LijstNode NIET in 2 verschillende lijsten mag zitten. (bedenk maar eens wat het gevolg is).
Ik wil hier niet zeggen dat deze methode slecht is maar het toepassingsgebied is mij wat te beperkt.
Misschien een punt om over na te denken bij SE.

User avatar
Sebastiaan
Posts: 1184

Post#13 » Mon Jan 21, 2008 6:49 pm

Tom wrote:OMG! Ben de tool file vergeten in mijn Arc te steken. :shock:
Ja idd da was kik eerst ook vergeten, ik dacht er nog net optijd aan, das wel zuur. :S

User avatar
Tom
Posts: 602

Post#14 » Mon Jan 21, 2008 6:54 pm

Michael Cochez wrote:1) efficientie is "NIET" van belang.
Optimaliseren is enkel van belang als de software snel moet zijn, begin niet te vroeg met optimaliseren aangezien dit ten nadelen is van het programmeren. Beter een programma dat werkt dan een snel programma dat crasht. (Op internet gelezen)

User avatar
Tom
Posts: 602

Post#15 » Mon Jan 21, 2008 6:55 pm

Sebastiaan wrote:
Tom wrote:OMG! Ben de tool file vergeten in mijn Arc te steken. :shock:
Ja idd da was kik eerst ook vergeten, ik dacht er nog net optijd aan, das wel zuur. :S
Heb die net ge-e-maild, en ook even toegevoegd aan zip.

Dubbelpost, ze zouden die automatisch moeten laten mergen... :D

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 62 guests