[CG] Images.Put

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Yannick
Posts: 97

[CG] Images.Put

Post#1 » Sat Mar 29, 2008 2:10 pm

Een paar onder de WINAK-ers hebben die trap opgelost die je soms krijgt bij Images.Put. Hoe los ik die op? Heb zelf al wat geprobeerd te klooien, maar gefaald
(ter info: mijn methode was die van de nils om te debuggen .. 'zet overal wat output bij' .. zomfg, where'z teh l33ts? :| ..)
What did you learn in school today?
-Revenge.

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#2 » Sat Mar 29, 2008 2:47 pm

Output bijzetten is in vele gevallen een handige manier hoor. Als je een error boodschap krijgt die duidelijk is dan heb je er wat aan. Maar soms zal je programma vastlopen en blijven draaien zonder een error te geven. en begin dan maar te zoeken. Of nu zoals je Images.Put... Het is blijkbaar niet zo'n duidelijke error als je niet vind waar deze optreedt.
Output zetten is dus altijd een goede optie. In Oberon was er volgens mij nog een manier met F1 of iets dergelijk om te vinden waar de error gebeurde, maar ik weet niet meer hoe je dat moest doen.

User avatar
Yannick
Posts: 97

Post#3 » Sat Mar 29, 2008 3:22 pm

Bij het compileren met optie \f (of \2f voor OO designs) dan voert hij uit tot hij de fout tegen komt op een gegeven program counter.

Weet ik. Maar nu is het een ASSERT fout, namelijk een preconditie. De preconditie bij Image.Put is dat de gegeven coordinaten (van een lijn, figuur, .. ?) tussen de nul en de image.height en image.width moeten liggen. Voordat Put wordt opgeroepen heb ik Out.Int's gezet die die width en height afprinten, maar tevergeefs, geen output at all. Vond ik wel raar maarjah.
What did you learn in school today?
-Revenge.

User avatar
PieterK
Posts: 118

Post#4 » Sat Mar 29, 2008 3:40 pm

Stap 1: Open Images.Mod
Stap 2: Zoek de procedure Put
Stap 3: Ge zult daar nen assert zien staan als preconditie. Zet voor die preconditie nen IF met dezelfde voorwaarde als die assert. (Zorg wel dat die IF de gehele procedure omvat)
Stap 4: Compileer
Stap 5: Sluit Oberon af en start Oberon opniew op (da moet want anders gebruikt ie nooit uw nieuwe versie)

Normaal zou da uw probleem moeten oplossen.

User avatar
Yannick
Posts: 97

Post#5 » Sat Mar 29, 2008 5:36 pm

Haha, das idd de oplossing. Stom maar efficient die IF's.

Soms snap ik het gebruik van ASSERT's nie .. soms zijn IF's gewoon zoveel beter :/

Maar soit. Don't argue with Oberon code, right?

Super bedankt!

Grtzz
What did you learn in school today?
-Revenge.

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#6 » Sat Mar 29, 2008 5:50 pm

Die assert staat er omdat de preconditie gevolgd moet worden... Blijkbaar doe je dus een fout tegen dat contract. Waarschijnlijk teken je buiten je image ofzo ;)

Teun
Posts: 216

Post#7 » Sat Mar 29, 2008 6:49 pm

Ge kunt die asserts ook gewoon niet meecompileren. Ik geloof /a maar ben niet helemaal zeker.

User avatar
NecRock
WOZ
Posts: 2481

Post#8 » Sat Mar 29, 2008 7:58 pm

Yannick wrote:Soms snap ik het gebruik van ASSERT's nie .. soms zijn IF's gewoon zoveel beter :/
Zoals hierbove gezegd kunde asserts gewoon niet meecompilere. Zo kunde, terwijl da ge een programma aan het ontwikkele bent, die asserts wel meecompileren zoda uw programma gewoon stopt als er ni aan de precondities voldaan wordt, maar als ge een finale versie hebt, waarin normaal altijd aan die precondities voldaan wordt, da checken achterwege laten. Da is handig als da controlleren een tamelijk dure operatie is, want dan is da altijd interessant als ge tijd kunt uitsparen door da gewoon ni te moeten doen.

joeri
Posts: 41

Post#9 » Sat Mar 29, 2008 10:59 pm

Al is het uiteraard niet de bedoeling om asserts te disablen, gewoon omdat aan die precondities niet voldaan is.

Teun
Posts: 216

Post#10 » Sat Mar 29, 2008 11:10 pm

Maar als die precondities fout erinstaan, dan mag da wel he. Ach ja, fouten opvangen in oberon is ni echt goed uitgedacht.

User avatar
NecRock
WOZ
Posts: 2481

Post#11 » Sat Mar 29, 2008 11:47 pm

Nee, dan moet ge dervoor zorge da de precondities der juist in staan :p

Teun
Posts: 216

Post#12 » Sun Mar 30, 2008 12:13 am

Wel, maar dat is dus nen bug he in een module die ge krijgt en niet zelf moet schrijven.

User avatar
VFlicka
WOZ
Posts: 488

Post#13 » Wed Apr 02, 2008 4:57 pm

Het aanpassen van Images is eigenlijk enkel een workaround voor een bug die in Gfx zit. Die ASSERT is zeker nodig omdat anders buiten de image gekleurt wordt (in de vorige 2 woorden zit minstens 1 dt fout :s).
Als je de trap gaat bekijken zie je dus dat Gfx.Dot de procedure Images.Put oproept met verkeerde waarden. Volgens mij komt dit omdat Gfx eerst gaat kijken of de REAL in de image ligt, en dat pas afrond naar een integer.

Gfx.Dot is echter niet te vinden in Watson of in de code, dus je kan niet zelf je Drawline schrijven :(

User avatar
racekakje
WOZ
Posts: 740

Post#14 » Wed Apr 02, 2008 9:32 pm

PieterK wrote:Stap 1: Open Images.Mod
Stap 2: Zoek de procedure Put
Stap 3: Ge zult daar nen assert zien staan als preconditie. Zet voor die preconditie nen IF met dezelfde voorwaarde als die assert. (Zorg wel dat die IF de gehele procedure omvat)
Stap 4: Compileer
Stap 5: Sluit Oberon af en start Oberon opniew op (da moet want anders gebruikt ie nooit uw nieuwe versie)

Normaal zou da uw probleem moeten oplossen.
Ge kunt ook gewoon dien ASSERT verwijderen dan é, da komt op hetzelfde neer.

Maar, die ASSERT staat er wss met een reden, dus het is redelijk dom om die gewoon weg te doen.

User avatar
Sebastiaan
Posts: 1184

Post#15 » Wed Apr 02, 2008 10:06 pm

racekakje wrote:
PieterK wrote:Stap 1: Open Images.Mod
Stap 2: Zoek de procedure Put
Stap 3: Ge zult daar nen assert zien staan als preconditie. Zet voor die preconditie nen IF met dezelfde voorwaarde als die assert. (Zorg wel dat die IF de gehele procedure omvat)
Stap 4: Compileer
Stap 5: Sluit Oberon af en start Oberon opniew op (da moet want anders gebruikt ie nooit uw nieuwe versie)

Normaal zou da uw probleem moeten oplossen.
Ge kunt ook gewoon dien ASSERT verwijderen dan é, da komt op hetzelfde neer.

Maar, die ASSERT staat er wss met een reden, dus het is redelijk dom om die gewoon weg te doen.
Maja normaal hoort die ASSERT niet te trappen bij het tekenen van eender wat. en het maakt toch niets uit of die ASSERT nu trapt of als je die ASSERT weghaalt en het programma trapt even verder op. (In oberon toch).

Als je de ASSERT weghaalt heb je nog de kans dat hij dan helemaal niet trapt.

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 13 guests