[kylix]Wat gaat hier in vredesnaam mis? Random functie

Pagina: 1
Acties:

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Ik ben bezig een soort van dobbelsteen applicatie te maken, heel simpel allemaal maar het gaat ergens mis waar ik niet van inzie waar het mis gaat?! Hij klapt er elke keer uit met een SIGSEGV (11) uit. Om dan met een trace into de fout te leggen bij de random procedure

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-----------unit dobbelsteen---------------


unit untDobbelsteen;

interface

type
  TDobbelsteen = class
  private
    iAantalOgen: Integer;
  public
    procedure Werp;
    function GetAantalOgen: Integer;
  end;

implementation


procedure TDobbelsteen.Werp;
begin
  iAantalOgen := Random (5) + 1  // <---- klapt er hier uit
end;

function TDobbelsteen.GetAantalOgen : Integer;
begin
  result := iAantalOgen // <-- en hier ook
end;


initialization

Randomize

end.


---------Unit Main-------

unit untMain;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls, untDobbelsteen;

type
  TForm1 = class(TForm)
    edtAantalWorpen: TEdit;
    btnWerp: TButton;
    edtGemiddelde: TEdit;
    procedure btnWerpClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Dobbelsteen : TDobbelsteen;

implementation

{$R *.xfm}

procedure TForm1.btnWerpClick(Sender: TObject);
var
  iB: Integer;
 begin
      Dobbelsteen.Werp;
    iB := Dobbelsteen.GetAantalOgen;

end;

end.


Als ik het helemaal goed begrepen heb zou ik Dobbelsteen.GetAantalOgen toch op de bovenstaande manier aan iB moeten kunnen toewijzen?

_____
Disclaimer: Is deze vraag te simpel voor GoT, bij deze mijn excuses

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:22

Creepy

Tactical Espionage Splatterer

Je vraag lijkt me redelijk simpel.

Je hebt wel een variabele dobbelsteen van de classe TDobbelsteen, alleen instantieer je nergens je klasse! Dus dobbelsteen is een variabele die naar niks wijst.

Je zult eerst een object van de klasse TDobbelsteen moeten aanmaken voordat je deze kan gebruiken. Hoe je dit moet doen kan je in nagenoeg elke Delphi tutorial vinden.

"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


Verwijderd

zwerver schreef op 21 November 2002 @ 02:30:
Ik ben bezig een soort van dobbelsteen applicatie te maken, heel simpel allemaal maar het gaat ergens mis waar ik niet van inzie waar het mis gaat?! Hij klapt er elke keer uit met een SIGSEGV (11) uit. Om dan met een trace into de fout te leggen bij de random procedure

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-----------unit dobbelsteen---------------


unit untDobbelsteen;

interface

type
  TDobbelsteen = class
  private
    iAantalOgen: Integer;
  public
    procedure Werp;
    function GetAantalOgen: Integer;
  end;

implementation


procedure TDobbelsteen.Werp;
begin
  iAantalOgen := Random (5) + 1  // <---- klapt er hier uit
end;

function TDobbelsteen.GetAantalOgen : Integer;
begin
  result := iAantalOgen // <-- en hier ook
end;


initialization

Randomize

end.


---------Unit Main-------

unit untMain;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls, untDobbelsteen;

type
  TForm1 = class(TForm)
    edtAantalWorpen: TEdit;
    btnWerp: TButton;
    edtGemiddelde: TEdit;
    procedure btnWerpClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Dobbelsteen : TDobbelsteen;

implementation

{$R *.xfm}

procedure TForm1.btnWerpClick(Sender: TObject);
var
  iB: Integer;
 begin
      Dobbelsteen.Werp;
    iB := Dobbelsteen.GetAantalOgen;

end;

end.


Als ik het helemaal goed begrepen heb zou ik Dobbelsteen.GetAantalOgen toch op de bovenstaande manier aan iB moeten kunnen toewijzen?

_____
Disclaimer: Is deze vraag te simpel voor GoT, bij deze mijn excuses
Als je bovenstaande advies van creepy hebt opgevolgd zul je er ook achter komen dat je met een 5 zijdige dobbelsteen gooit. Ik verwacht dat je eigenlijk gewoon een kubus met 6 zijden wil simuleren.

[Schoolmeestertoon]
Daarnaast zijn de werp procedure en GetAantalOgen in Delphi beter als propertties te implementeren

TDobbelsteen = class
private
FAantalOgen: Integer;
function GetNieuwWorp : Integer;
public
Property NieuweWorp:Integer read GetNieuweWorp;
Property AantalOgen : Integer read FAantalOgen;
end;

implementation

Function TDobbelSteen.GetNieuweWorp
FAantalOgen:=Random(6)+1;
Result:=FAantalOgen;
end;
[/Schoolmeestertoon]

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:22

Creepy

Tactical Espionage Splatterer

[irritante leerling toon]
En WAAROM zijn ze beter als properties te implementeren????
Wat is het nut van een public property i.p.v. een public functie die alleen te lezen is en alleen een result teruggeeft?

In het "echte" leven gooi je eerste de dobbelsteen (.nieuweworp) wat een actie is, dus zich beter laat vertalen als een procedure.
[purist mode]
En is de gedachte van OO niet dat je properties benaderd a.d.v. get en set methods?
[/purist mode]
[/irritante leerling toon]

"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


Verwijderd

[rustig uitleggende schoolmeestertoon]
1. Er is iets voor te zeggen om de werp property als functie uit te voeren. Omdat je een dobbelsteen niet voor niets gooit heeft het uitvoeren als procedure een wat omslachtig karakter, omdat je dan eerst de steen gooit, om daarna het aantal ogen te lezen.
2. Door het uitlezen van het aantal ogen een property te maken zorg je er voor dat deze waarde read-only wordt. Je wil niet dat de gebruiker van de dobbelsteen de waarde ervan achter je rug veranderd.
Als je deze zou uitvoeren als functie, geef je eigenlijk aan dat er wellicht nog een bewerking uitgevoerd moet worden voordat de waarde bekend is.
3. Binnen de OO gedachte is het niet nodig om properties te benaderen via Get en Set methods. Een property geeft je een gecontroleerde toegang tot waarden binnen een klasse. Voor het uitlezen van een waarde die in de private sectie is gedeclareerd is derhalve alleen een verwijzing nodig. Voor het setten van een property gebruik je wel vaak een Set method om de geldigheid van de gegeven waarde te controleren, of om handelingen binnen de klasse uit te voeren die afhankelijk zijn van de waarde.
[/rustig uitleggende schoolmeestertoon]

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
[NooB toontje]
na dit uitgevoerd te hebben ( zonder de spelvouten uiteraard, maar das peanuts )
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 TDobbelsteen = class
private
FAantalOgen: Integer;
function GetNieuweWorp : Integer;
public
Property NieuweWorp: Integer read GetNieuweWorp;
Property AantalOgen : Integer read FAantalOgen;
end;

implementation

Function TDobbelSteen.GetNieuweWorp
FAantalOgen := Random(6)+1; // <------------------ HIER DUS!!!
Result := FAantalOgen;
end;


Blijft Kylix mopperen over: Function need result type en dan doet die dan doodleuk bij FAantalOgen. Maar als ik er nog ietsje van begrijp is dat geen functie?

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Creepy schreef op 21 November 2002 @ 08:51:
Je vraag lijkt me redelijk simpel.

Je hebt wel een variabele dobbelsteen van de classe TDobbelsteen, alleen instantieer je nergens je klasse! Dus dobbelsteen is een variabele die naar niks wijst.

Je zult eerst een object van de klasse TDobbelsteen moeten aanmaken voordat je deze kan gebruiken. Hoe je dit moet doen kan je in nagenoeg elke Delphi tutorial vinden.
Uhmz, maar IMHO staat die klasse TDobbelsteen toch al in de unit untDobbelsteen? Dus die wordt toch in de uses al aangeroepen?

edit:
Zwerver gaat nog ff uit van de oude code, die implementatie met die Property's wijkt te veel af van de opdracht van school

[ Voor 11% gewijzigd door Zwerver op 22-11-2002 15:24 ]

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • Ruben314199
  • Registratie: Juli 2002
  • Laatst online: 06-04-2025
het lijkt me dat je het volgende vergeten bent:

Function TDobbelSteen.GetNieuweWorp : integer
begin

FAantalOgen := Random(6)+1; // <------------------ HIER DUS!!!
Result := FAantalOgen;
end;

maar ik heb Kylix nog nooit gezien dus pinme d'r niet op vast :-) Misschien dat er nog een ; achter integer hoort....

Begrijp ik het goed trouwens dat je voor school Kylix progt ? Klinkt cool , welke school is dat ? [op de TU Delft leren ze je nog altijd proggen in VB for Excel :'( ]

[ Voor 33% gewijzigd door Ruben314199 op 22-11-2002 15:34 . Reden: meuk en shit ]

De gaafste watergekoelde pc ter wereld


  • Zwerver
  • Registratie: Februari 2001
  • Niet online
prog voor school officieel in Delphi maar heb geen wintendo op mijn pc... dus kylix :) uhmz, dat beginnetje wat ik vergeten ben, idd zo, zal maandag wel weer kijken als ik weer op mijn kamer ben

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer

Pagina: 1