[delphi] negeert "end";

Pagina: 1
Acties:

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Topicstarter
Men nemen Delphi 5 en
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;

var
 i,j: Integer;

begin
     for i := 0 to 2 do begin
      for j := 0 to 2 do begin
         writeln(i,j)
      end
    end {Hier worden de kolommen ingelezen}

end.

Men drukken herhaaldelijk op de knop F7 en TADA!

Delphi slaat de eerste "end" over in het programma (althans zo lijkt het). Ik ben een pascal n00b, maar dit snap ik toch echt niet. Er is al iemand anders die hetzelfde merkt, maar ook hij weet de verklaring niet.

Kan iemand dat ff uitleggen?

|_____vakje______|


Verwijderd

Maak er een gewoonte van om achter iedere 'end' een ';' te zetten (op de allerlaatste 'end.' na, natuurlijk). Het is niet altijd noodzakelijk, maar het kan geen kwaad, en het is common practise bij Delphi. Bekijk de VCL source maar 's, daar kom je geen 'end' zonder ';' tegen.

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var
 i,j: Integer;

begin
     for i := 0 to 2 do begin
      for j := 0 to 2 do begin
         writeln(i,j);
      end;
     end; {Hier worden de kolommen ingelezen}
end.

...beter bekend als AMFan


Verwijderd

Dat wil alleen zeggen dat na het compileren er geen stukje machinecode is die betrekking heeft op die end.

Niks om je zorgen om te maken :)

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op maandag 29 oktober 2001 22:18 schreef CyberSnooP het volgende:
Men nemen Delphi 5 en
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;

var
 i,j: Integer;

begin
     for i := 0 to 2 do begin
      for j := 0 to 2 do begin
         writeln(i,j)
      end;{tweede for}
    end; {eerste for}
end;{de begin}

end. {de unit ofzo <-- waar deze voor is weet ik niet precies, maar hij is wel nodig :)}
duidelijk? ik ben ook nogal noob :)

edit: eerste en tweede verwisseld |:(

Verwijderd

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var
i,j: Integer;

begin
for i := 0 to 2 do begin
for j := 0 to 2 do begin
writeln(i,j)
end;{tweede for}
end; {eerste for}
end;{de begin}

end.
code:
1
2
3
4
5
6
7
8
9
10
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var
 i,j: Integer;
begin
  for i := 0 to 2 do 
    for j := 0 to 2 do 
    writeln(i,j)
end.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Topicstarter
Ik snap hoe de for-lussen in elkaar zitten, maar ik snap de markeringen van de 'huidige' regel van delphi niet

Zodra je namelijk bij de writeln hebt gehad, wijst delphi de 2e end als volgende regel aan, en niet de eerste.

Als end geen compiler-instructie representeert, waarom wijst hij dan wel de 2e aan?

(Het programma draait, uiteraard, wel gewoon goed, en je ziet hem ook naar de juiste for-lus toespringen. Maar het is wel erg ondoorzichtig zo)

|_____vakje______|


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Omdat WriteLn 3 keer wordt aangeroepen vanaf de tweede for-lus. Als die 3 keer zijn geweest gaat 'ie even naar de eerste for-lus om vervolgens weer 3 keer de 2e lus aan te roepen. En dat drie keer vanuit de eerste for-lus gezien. Volg je het nog? Het zijn lussen binnen lussen he..

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Topicstarter
Op maandag 29 oktober 2001 23:58 schreef GerbenW het volgende:
Omdat WriteLn 3 keer wordt aangeroepen vanaf de tweede for-lus. Als die 3 keer zijn geweest gaat 'ie even naar de eerste for-lus om vervolgens weer 3 keer de 2e lus aan te roepen. En dat drie keer vanuit de eerste for-lus gezien. Volg je het nog? Het zijn lussen binnen lussen he..
Dat volg ik wel :) Zo n00b ben ik nou ook weer niet ;)

Maar het gaat me er meer om wat de reden is voor delphi (pascal) om de eerste end die die tegenkomt niet aan te merken als een 'huidige' statement en de 2e wel!

Probeer het anders zelf eens in Delphi met F7 dan zie je wat ik bedoel.

|_____vakje______|


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Op dinsdag 30 oktober 2001 00:13 schreef CyberSnooP het volgende:

[..]

Dat volg ik wel :) Zo n00b ben ik nou ook weer niet ;)

Maar het gaat me er meer om wat de reden is voor delphi (pascal) om de eerste end die die tegenkomt niet aan te merken als een 'huidige' statement en de 2e wel!

Probeer het anders zelf eens in Delphi met F7 dan zie je wat ik bedoel.
Ow op die brommer. Misschien was je uitleg niet helemaal helder (no flame intended :)) Ik ga het ff testen...

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Topicstarter
Op dinsdag 30 oktober 2001 00:24 schreef GerbenW het volgende:
Misschien was je uitleg niet helemaal helder (no flame intended :)) Ik ga het ff testen...
Het is ook helemaal geen tijd om over dit soort dingen na te denken.. Maar zolang het nu maar duidelijk is.

Ik hoor het morgen wel hoe het in elkaar zit.

Oja, ik ben Visual Basic gewend, en die highlight wel altijd het Next statement als hij als volgende stap overgaat naar het begin van de For-loop, vandaar misschien de verwarring.

|_____vakje______|


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Uhm nou kheb het ff getest en hier gaat ie wel naar die tweede end. Hij loopt eerst drie keer door de binnenste loop inclusief end en daarna even naar de laaste end en dan begint ie opnieuw met de binnenste loop.

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var
 i,j,k: Integer;
begin
  for i := 0 to 2 do 
  begin         
    for j := 0 to 2 do 
    begin
    for k := 0 to 2 do 
    begin
      writeln(i,j,k);
    end;
    writeln(j);
    end;
    writeln(i);  
  end;
end.

Probeer dit eens :)

Verwijderd

Onder runtime worden 'end' en 'begin' niet gebruikt. 'End' en 'Begin' zijn alleen voor de compiler belangerijk ze geven aan welke statements bijvoorbeeld bij een for lus horen. Bij c++ heb je bijvoorbeeld '{' en '}' in plaats van 'begin' en 'end'.

Bedoel je dit??

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:46

Creepy

Tactical Espionage Splatterer

Boeit naar mijn idee ook helemaal niet.. END doet ook helemaal niks.. end hoort bij de taal definitie, maar is zeker geen instructie...

next in VB is WEL een instructie... die heb je in pascal (delphi) niet nodig.
code:
1
2
For 1:=0 to 100 do
     showmessage('blaat');

Zow.... for zonder begin en end..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1