Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Succ(TMyType) Scheint ein falsches ergebniss zu geben. (https://www.delphipraxis.net/56386-succ-tmytype-scheint-ein-falsches-ergebniss-zu-geben.html)

BenjaminH 4. Nov 2005 21:07


Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Hallo
Ich habe einen eigenen Typen deklariert:
Delphi-Quellcode:
type
TReiz=(RWeg=0, KaroMit1=18,HerzMit1=20,PikMit1=22,RNull=23,Kreuzmit1=24, KaroMit2=27,HerzMit2=30,PikMit2=33,NullHand=35,KreuzMit2=36, KaroMit3=36,HerzMit3=40,PikMit3=44,NullOuvert=46,KreuzMit3=48, KaroMit4=45,HerzMit4=50,PikMit4=55,NullOuvertHand=59,KreuzMit4=60);
Ich will jetzt einfach mit
Delphi-Quellcode:
Var Reiz:TReiz;
...
Reiz:=RWeg;
Reiz:=Succ(Reiz);
die Nächste Reizung erhalten
Imho müsste da KaroMit1 raus kommen, tut es aber nicht! Ich erhalte da jedes mal 1 und auch bei anderen werten erhalte ich Odd(Reiz)+1 was mir gar nicht passt..
Entdeckt jemand, was falsch ist, oder wie ich das ändern kann?
Vielen Dank!!
Schönes Wochenende!
Benjamin

MrKnogge 4. Nov 2005 21:16

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Hast du mal Inc probiert ?

gruss

BenjaminH 4. Nov 2005 21:23

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Ja, gerade eben auf deinen Anreiz hin..
Bringt leider nix hat genau dasselbe Ergebnis

jim_raynor 4. Nov 2005 21:27

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Succ erhöht auch nur den Wert um 1. Aber warum so kompliziert. Würde bei keiner Aufzählung feste Werte vergeben. Lass ihn doch ruhig in einer Schritten hochzählen. Falls du die festgelegten Werte als Konstanten brauchst, dann bastel dir ein Konstantes Array:

Delphi-Quellcode:
type
TReiz=(RWeg=0, KaroMit1=18,HerzMit1=20,PikMit1=22,RNull=23,Kreuzmit1=24, KaroMit2=27,HerzMit2=30,PikMit2=33,NullHand=35,KreuzMit2=36, KaroMit3=36,HerzMit3=40,PikMit3=44,NullOuvert=46,KreuzMit3=48, KaroMit4=45,HerzMit4=50,PikMit4=55,NullOuvertHand=59,KreuzMit4=60);
const
  Werte: Array[TReiz] of Integer = (0,18,20,22,23,24,27,30,33,35,36,36,40,44,46,48,45,50,55,59,60);
Dann kannst ganz einfach per Werte[RWeg] darauf zugreifen ;)

P.S: Warum gibt es 2 mal die 36?

himitsu 4. Nov 2005 21:30

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Inc erhöht erst Recht nur um 1 -.-''

Es kann sein, daß succ nicht mit solchen predefinierten Sets zurecht kommt?

Notfalls halt sowas versuchen
Delphi-Quellcode:
Repeat
  Reiz := Succ(Reiz);
Until not (Reiz in TReiz);

BenjaminH 4. Nov 2005 21:44

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
@jim_raynor ich glaube deine Lösung zu verstehen, ich glaub dafür müsste ich im Programm zuviel verändern..
Mal sehen[Edit]Ich nehme diese Lösung :-) Danke[/Edit][Edit=2]Mh, dadurch wird das sogar einfacher^^[/Edit]
Zitat:

Zitat von jim_raynor
P.S: Warum gibt es 2 mal die 36?

Da hat mich auch gewundert, scheint aber zu stimmen:
Beim SKat wird gereizt.. Das richtet sich danach wieviele Buben man hat und welche Farbe man spielen möchte, mit den Buben wird die Mitoder die Ohne Zahl berechnet, zur Mit/Oder Zahl wird 1 dazu gezählt, das nennt man dann Spiel.
Und Spiel wird dann mit der gewünschten Farbe multipliziert(Karo=9,Herz=10,Pik=11,Kreuz=12) und wenn man mit 2 Spiel 3 hat und Kreuz spielen will, dann ergibt sich eben 3*12.
Wenn man aber Mit 3 Spiel 4 und Karo Spielen will, dann ergibt sich 4*9 also auch 36...
Scheint zu stimmen...
@himitsu: Ja an sowas hab ich auch schon gedacht.. aber das wäre nur Notlösung...
Danke euch beiden

SMO 5. Nov 2005 00:42

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Statt die Werte direkt in den Aufzählungstyp zu quetschen könnte man es doch auch so machen:
Delphi-Quellcode:
type
  TReiz = (
    RWeg, KaroMit1, HerzMit1, PikMit1,
    RNull, Kreuzmit1, KaroMit2, HerzMit2,
    PikMit2, NullHand, KreuzMit2, KaroMit3,
    HerzMit3, PikMit3, NullOuvert, KreuzMit3,
    KaroMit4, HerzMit4, PikMit4, NullOuvertHand,
    KreuzMit4);

const
  ReizWerte: array [TReiz] of Byte = (
    0, 18, 20, 22,
    23, 24, 27, 30,
    33, 35, 36, 36,
    40, 44, 46, 48,
    45, 50, 55, 59,
    60);
So ist beides schön sauber getrennt, die Werte bekommt man dann ganz einfach mit "ReizWerte[KaroMit1]" usw.
Succ und Inc auf eine TReiz Variable sollten damit wie erwartet funktionieren.

Edit: Sorry, das hat jim_raynor ja schon geschrieben. :oops: Habe ich irgendwie überlesen, vielleicht weil in seinem TReiz auch noch die ganzen Werte drinstehen. Oder weil schon so spät ist.

himitsu 5. Nov 2005 00:54

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Manchmal ist es aber erwünscht, daß die Wert direkt definiert sind.

z.B. um später mal etwas reinzuquetschen und dennoch den Code zu früheren Versionen kompatiebel zu machen ^^

jim_raynor 8. Nov 2005 12:29

Re: Succ(TMyType) Scheint ein falsches ergebniss zu geben.
 
Zitat:

Zitat von SMO
Edit: Sorry, das hat jim_raynor ja schon geschrieben. :oops: Habe ich irgendwie überlesen, vielleicht weil in seinem TReiz auch noch die ganzen Werte drinstehen. Oder weil schon so spät ist.

oh. Das die werte dort noch drin stehen, war eigentlich garnicht geplant. Aber wenn es funktioniert ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz