[Prog] OO programmeren Vraagje

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Nickman
Posts: 391
Contact:

OO programmeren Vraagje

Post#1 » Tue Dec 13, 2005 10:04 pm

Waarom wil dit niet werken :(

Code: Select all

TYPE
		Element* = POINTER TO ElementNode;
		ElementNode = RECORD
			END;
		RealElement* = POINTER TO RealElementNode;
		RealElementNode =
			RECORD (ElementNode)
				r: REAL;
			END;
		BooleanElement* = POINTER TO BooleanElementNode;
		BooleanElementNode =
			RECORD (ElementNode)
				b: BOOLEAN;
			END;
				
		MATRIX* = POINTER TO MATRIXDesc;
		MATRIXDesc =
			RECORD
				matrix*: ARRAY 4 OF ARRAY 4 OF Element;
			END;

PROCEDURE (M : MATRIX) InitRealElement*();
	VAR
		x, y : INTEGER;
BEGIN
	FOR y := 0 TO 3 DO
		FOR x := 0 TO 3 DO
			M^.matrix[x, y](RealElement)^.r := 0.0;
		END;
	END;
END InitRealElement;
De benamingen zijn allemaal juist want compiler geeft geef fouten, maar hij doet het gewoon niet.
Ik laat deze procedure alsvolgd oproepen:

Code: Select all

NEW(A);
A^.InitRealElement();
please help :)
Webmaster of http://www.bwf.be
Make it idiot proof and someone will make a better idiot!

[quote="zarry"][url=http://www.winak.be/forum/viewtopic.php?p=12475#12475]wickaaaah! thcikci tschiki paaaauuuuw wicked-original![/url][/quote]

User avatar
Shinta
WOZ
Posts: 1122

Re: OO programmeren Vraagje

Post#2 » Tue Dec 13, 2005 10:12 pm

Nickman wrote:Waarom wil dit niet werken :(

Code: Select all

TYPE
		Element* = POINTER TO ElementNode;
		ElementNode = RECORD
			END;
		RealElement* = POINTER TO RealElementNode;
		RealElementNode =
			RECORD (ElementNode)
				r: REAL;
			END;
		BooleanElement* = POINTER TO BooleanElementNode;
		BooleanElementNode =
			RECORD (ElementNode)
				b: BOOLEAN;
			END;
				
		MATRIX* = POINTER TO MATRIXDesc;
		MATRIXDesc =
			RECORD
				matrix*: ARRAY 4 OF ARRAY 4 OF Element;
			END;

PROCEDURE (M : MATRIX) InitRealElement*();
	VAR
		x, y : INTEGER;
BEGIN
	FOR y := 0 TO 3 DO
		FOR x := 0 TO 3 DO
			M^.matrix[x, y](RealElement)^.r := 0.0;
		END;
	END;
END InitRealElement;
De benamingen zijn allemaal juist want compiler geeft geef fouten, maar hij doet het gewoon niet.
Ik laat deze procedure alsvolgd oproepen:

Code: Select all

NEW(A);
A^.InitRealElement();
please help :)
ge moet r en b ook exporteerbaar maken, me een sterreke dus, en best je record ok
Remember remember the fifth of November
Gunpowder, treason and plot.
I see no reason why gunpowder, treason
Should ever be forgot...

User avatar
Nickman
Posts: 391
Contact:

Post#3 » Tue Dec 13, 2005 10:41 pm

Same prob en heb alles wa ik maar kon laten exporteren :)

User avatar
Yo_rik
Posts: 69

Post#4 » Wed Dec 14, 2005 10:18 am

De NEW die je doet voorziet alleen plaats voor de matrix, met de elementpointers. Voor de elementpointers moet je dus ook een NEW doen, en wel voor realelementpointers. Daarna kan je een element van de matrix naar dat realelement laten wijzen.

dus zoiets :):

Code: Select all

PROCEDURE (M : MATRIX) InitRealElement*(); 
   VAR 
      x, y : INTEGER;
      real: RealElement;

BEGIN 
   FOR y := 0 TO 3 DO 
      FOR x := 0 TO 3 DO 
         NEW(real);
         real^.r := 0.0;
         M^.matrix[x, y] := real; 
      END; 
   END; 
END InitRealElement;

User avatar
Nickman
Posts: 391
Contact:

Post#5 » Wed Dec 14, 2005 11:05 am

Thx, nu werkt het wel :D.
Gewoon vergeten dat die waarde eigenlijk ook een pointer was :)
Zal zo nog een paar dingen moeten aanpassen ;)

greetz

User avatar
Nickman
Posts: 391
Contact:

Post#6 » Wed Dec 14, 2005 1:50 pm

Hmm, mijn initializatie werkt nu al, maar de eenheidsmatrix doet heel vreemd...

Code: Select all

PROCEDURE (M : MATRIX) Unity*();
(* 
	Doel: De Eenheidsmatrix teruggeven.
	Return type: MATRIX
*)
	VAR
		x, y: INTEGER;
	
BEGIN
	FOR y := 0 TO 3 DO
		FOR x := 0 TO 3 DO
				M^.matrix[x, y]^.Unity(x, y);
		END;
	END;
END Unity;

PROCEDURE (i : Element) Unity(x, y: INTEGER);
BEGIN
	i := NIL;
END Unity;

PROCEDURE (i : RealElement) Unity(x, y: INTEGER);
BEGIN
	IF (x # y) THEN
		i^.r := 0.0;
	ELSE
		i^.r := 1.0;
	END;
END Unity;

PROCEDURE (i : BooleanElement) Unity(x, y: INTEGER);
BEGIN
	IF (x = y) THEN
		i^.b := TRUE;
	ELSE
		i^.b := FALSE;
	END;
END Unity;
ipv dus alleen op de As 1.0 toe te voegen, voegt hij op elke plaats een 1.0 toe :shock:.
Heb al gebrobeerd met de IF lus anders te schrijven (zoals in deze code), maar die blijft da doen :|
En bij mijn initializatie staan er wel degelijk overal nullen in.
Webmaster of http://www.bwf.be
Make it idiot proof and someone will make a better idiot!

[quote="zarry"][url=http://www.winak.be/forum/viewtopic.php?p=12475#12475]wickaaaah! thcikci tschiki paaaauuuuw wicked-original![/url][/quote]

User avatar
Arutha
Posts: 20

Post#7 » Wed Dec 14, 2005 5:14 pm

Ik werk met ne return en dan lukt da zonder veel probleme.
Dees is't voorbeeld voor de real.
Da heel programma sta hier:
http://home.scarlet.be/~vp034593/MatrixExt.Arc
't kan ni veel meer dan wa gegevens der in steke en unity ma 't werkt normaal wel.

Code: Select all

  PROCEDURE (e: realellement) Set (i,j : INTEGER): ellement;
	                VAR
		BEGIN
			IF j = i THEN
				e^.data := 1;
			ELSE
				e^.data := 0;			
			END;						
		RETURN e;
	END Set;

PJ

User avatar
Nickman
Posts: 391
Contact:

Post#8 » Wed Dec 14, 2005 5:33 pm

Mja, ik zal het is proberen met ne return, misschien dat het iets helpt...
Ik hou u op d ehoogte :)

Hebbet geprobeerd, maar blijft overal eentjes zetten :s
----------------

Heb ontdekt dat het niet aan mijn unity procedure lag, maar aan mijn Write procedure :shock:
Effe kijken...

----------------
Nu liegt het blijkbaar aan het eteruggeven van de matrix naar waar ik hem heb opgeroepen :s

Ik wordt er zot van!!!
Last edited by Nickman on Wed Dec 14, 2005 6:29 pm, edited 1 time in total.

User avatar
Shinta
WOZ
Posts: 1122

Post#9 » Wed Dec 14, 2005 6:16 pm

Yo_rik wrote:De NEW die je doet voorziet alleen plaats voor de matrix, met de elementpointers. Voor de elementpointers moet je dus ook een NEW doen, en wel voor realelementpointers. Daarna kan je een element van de matrix naar dat realelement laten wijzen.

dus zoiets :):

Code: Select all

PROCEDURE (M : MATRIX) InitRealElement*(); 
   VAR 
      x, y : INTEGER;
      real: RealElement;

BEGIN 
   FOR y := 0 TO 3 DO 
      FOR x := 0 TO 3 DO 
         NEW(real);
         real^.r := 0.0;
         M^.matrix[x, y] := real; 
      END; 
   END; 
END InitRealElement;
ij zegt ni veel ma tis tog nen toffe den yorik :D khad ook die fout, nu nimeer dus, merci !!! Nu werkt alles bij mij
Remember remember the fifth of November
Gunpowder, treason and plot.
I see no reason why gunpowder, treason
Should ever be forgot...

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 6 guests

cron