[Prog]Problemen bij het vak `Inleiding programmeren`

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

Sem
Posts: 92

[Prog]Problemen bij het vak `Inleiding programmeren`

Post#1 » Sat Jan 06, 2007 8:59 pm

De laatste lessen `Inleiding programmeren` zijn niet bij iedereen even goed doorgedrongen, althans niet bij mij. ( Waarschijnlijk omdat ik geen informaticus ben. ) Vandaar de volgende vragen aan jullie:

1) Kan iemand type-test en type-guard even met handen en voeten uitleggen ( lees als : zo duidelijk mogelijk ).
2) Zou iemand tenslotte op een eenvoudige manier kunnen uitleggen wat er op p.164 van de cursus wordt gezegd over "het addertje onder het gras" ( quote ) bij de toekenning w1:=w2.

Alvast bedankt voor de hulp
en tot maandag
veel succes trouwens !!!

Jerre
Posts: 22

Post#2 » Sat Jan 06, 2007 11:04 pm

Hoi,

Wel ik heb vaag idee ;)

typetests kijken (zoals de naam doet vermoeden) of een variabele van een bepaald type is.

Typeguards houden in het oog of de types we voldaan zijn ;)

Nu uw addertje, volgens mij wordt er bedoeld dat uw w1 een record veld moet hebben om die w2.c te ontvangen :)

Hoe dan ook ik kan me vergissen aangezien het al wat laat is en ik al te lang op ben ;)

Phil
Posts: 100

Post#3 » Sat Jan 06, 2007 11:20 pm

van typetest en typeguard klopt wat jerre zegt, als je het in OO wil toepassen krijg je zoiets
1: met polymorfisme
PROCEDURE (punt: Point) VoerUit;
PROCEDURE (punt: Point3D) VoerUit;
PROCEDURE (punt: Point4D) VoerUit;

Bij polymorfisme wordt dit dynamisch type dan telkens nagekeken en hierna wordt de code uitgevoerd (het is dus een interne typetest/typeguard). Als je dit manueel wil toepassen krijg je dit:

PROCEDURE (punt: Point) VoerUit;
BEGIN
IF (punt IS Point3D) THEN (instructies..)
IF (punt IS Point4D) THEN (instructies..)
ELSE ....
END;
END VoerUit;

Dat addertje onder het gras weet ik ook niet meer :? maar ik dacht dat het iets met pointers te maken had? Dat de een een de-referentie is (wijst dus naar het juiste adres) en bij het andere vul je gewoon het record veld in.

Jerre
Posts: 22

Post#4 » Sat Jan 06, 2007 11:27 pm

Phil ben je iets vergeten in je uitleg? Die 1 bij polymorfisme intrigeert me ;)

User avatar
j0lle
WOZ
Posts: 396

Post#5 » Sun Jan 07, 2007 12:29 am

het addertje heeft de maken met type-extensie van dynamische records.

Code: Select all

TYPE
 BasisRecWijzer = POINTER TO BasisRecord;
  BasisRecord =
  RECORD
   a: Type1;
  END;

 EersteUitbrWijzer = POINTER TO EersteUitbreiding;
  EersteUitbreiding =
  RECORD (BasisRecord)
   b: Type2;
  END;

 TweedeUitbrWijzer = POINTER TO TweedeUitbreiding;
  TweedeUitbreiding =
  RECORD (EersteUitbreiding)
   c: Type3;
END; 

VAR
 w0: BasisRecWijzer;
 w1: EersteUitbrWijzer;
 w2: TweedeUitbrWijzer;
het basisidee van wat hierboven staat zal je wel snappen.

stel nu dat je in je code
NEW(w1);
NEW(w2);
doet, dan beschik je over de velden:
w1.a
w1.b
en
w2.a
w2.b
w2.c

w1^ := w2^; is mogelijk
w2^ := w1^; is "verboden" (syntactisch)
(wat he hier doet is de WAARDEN die in je geheugen zitten doorgeven)

maar stel nu dat je doet:
w1 := w2; ?
dan wijst w1 naar hetzelfde adres in je geheugen als w2. je geeft hier dus een ADRES door, en GEEN WAARDE.
en na deze toekenning beschik je niet alleen over w1.a en w1.b, maar ook over w1.c, omdat je w1 dus "gelijksteld" aan w2

nu komen we bij het addertje:
w1 := w2; moet uitgevoerd worden alvorens we gebruik kunnen maken van w1.c, and that's it :)

edit: tgeen hier sta is ni volledig just, maar tis toch al te laat om te gaan aanpasse :)
Last edited by j0lle on Sun Jan 07, 2007 10:22 pm, edited 2 times in total.
qwertyuiop

User avatar
cG`
Posts: 75

Post#6 » Sun Jan 07, 2007 12:31 am

zo dacht ik het ook dus tis maar een heel klein addertje dan ;)

User avatar
j0lle
WOZ
Posts: 396

Post#7 » Sun Jan 07, 2007 12:33 am

cG` wrote:zo dacht ik het ook dus tis maar een heel klein addertje dan ;)
ja idd :) het is wel onnodig da hij da erbij zet, zorgt alleen maar voor verwarring.
qwertyuiop

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#8 » Sun Jan 07, 2007 12:46 am

j0lle wrote:nu komen we bij het addertje:
w1 := w2; moet uitgevoerd worden alvorens we gebruik kunnen maken van w1.c, and that's it :)
Jammergenoeg gaat w1.c nooit lukken het type van w1 geen c heeft. Hiervoor zijn de typeguards nodig en moet je dus w1(TweedeUitbrWijzer)^.c gebruiken.
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Phil
Posts: 100

Post#9 » Sun Jan 07, 2007 8:31 am

Jerre wrote:Phil ben je iets vergeten in je uitleg? Die 1 bij polymorfisme intrigeert me ;)
dnno, niet dat'k weet.. maar je kan dat voorbeeld nog verder uitwerken. Stel punt: Point is je basis en de rest zijn uitbreidingen

TYPE
Point = POINTER TO Punter;
Punter = RECORD
nul: INTEGER;
naam: ARRAY 20 OF CHAR;
END;

LuxePoint = POINTER TO Luxe;
Luxe = RECORD
code: INTEGER;
END;


PROCEDURE (punt1: Point) Doe*;
BEGIN
In.Int(punt1.nul);
In.String(punt1.naam);
END;

PROCEDURE (punt2: LuxePoint) Doe*;
BEGIN
punt2.Doe^;
In.Int(punt2.code);
END;

Voila, die "^" voert dan gewoon In.Int(punt2.nul) enzo uit..

Jerre
Posts: 22

Post#10 » Sun Jan 07, 2007 9:59 am

Robbe wrote:
j0lle wrote:nu komen we bij het addertje:
w1 := w2; moet uitgevoerd worden alvorens we gebruik kunnen maken van w1.c, and that's it :)
Jammergenoeg gaat w1.c nooit lukken het type van w1 geen c heeft. Hiervoor zijn de typeguards nodig en moet je dus w1(TweedeUitbrWijzer)^.c gebruiken.
Zie dit is wat ik bedoel, je moet zorgen dat w1 een veld beschikbaar heeft om die w.c(woops 2 vergeten), w2.c op te vangen

Sem
Posts: 92

Post#11 » Sun Jan 07, 2007 10:58 am

Allemaal heel erg bedankt, ik begrijp het...

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#12 » Sun Jan 07, 2007 4:24 pm

Jerre wrote:... om die w.c(woops 2 vergeten), w2.c ...
Daar is een knop voor znn, heet die niet backspace? :P
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Sem
Posts: 92

Post#13 » Sun Jan 07, 2007 4:26 pm

Ik heb nog eens even dat boek Into the realm of Oberon bezien en daar staat dat wel goed in uitgelegd, khad daar beter wat vaker in gekeken en wat minder in de cursus. :?

Jerre
Posts: 22

Post#14 » Sun Jan 07, 2007 6:19 pm

Robbe wrote:
Jerre wrote:... om die w.c(woops 2 vergeten), w2.c ...
Daar is een knop voor znn, heet die niet backspace? :P
Welke informaticus gebruikt nu ooit backspace? ;) Wat je typt is altijd goed, enkel de computer vat dat niet goed op :D

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#15 » Sun Jan 07, 2007 6:35 pm

Jerre wrote:
Robbe wrote:
Jerre wrote:... om die w.c(woops 2 vergeten), w2.c ...
Daar is een knop voor znn, heet die niet backspace? :P
Welke informaticus gebruikt nu ooit backspace? ;) Wat je typt is altijd goed, enkel de computer vat dat niet goed op :D
Gij hebt precies nog ni veel errors meegemaakt door typo's ;)
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 3 guests