Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahl um +1 erhöhen oder um -1 erniedrigen (https://www.delphipraxis.net/67917-zahl-um-1-erhoehen-oder-um-1-erniedrigen.html)

Ene 21. Apr 2006 19:27


Zahl um +1 erhöhen oder um -1 erniedrigen
 
Hi.

Ich habe gerade einen kleinen blackout :wall:
Habe schon hier im Forum gesucht aber nichts gefunden.

Habe folgendes Problem:
Ich habe 2 Buttons. Das eine mit -1 und das andere mit +1.
Ich möchte damit gerne eine Zahl, zum Beispiel 5, um +1 erhöhen oder um -1 erniedrigen.
Meine Frage wäre nun, wie diese Prozedur aussieht.
Ich habe dieses Problem damals mal gemacht, aber nun erinnere ich mich nicht mehr dran :cry:
Könntet ihr mir weiterhelfen?


Ene

mkinzler 21. Apr 2006 19:29

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Delphi-Quellcode:
Inc( zahl);
bzw
Delphi-Quellcode:
dec( zahl);

MagicAndre1981 21. Apr 2006 19:29

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Delphi-Referenz durchsuchenDec und Delphi-Referenz durchsuchenInc

DGL-luke 21. Apr 2006 19:37

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
performanter (weil ein callstack-aufruf wegfällt) ist

Delphi-Quellcode:
zahl := zahl + 1;
zahl := zahl - 1;

Batman666 21. Apr 2006 19:38

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
was bitte schön ist "callstack"?!

alcaeus 21. Apr 2006 19:39

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Zitat:

Zitat von DGL-luke
performanter (weil ein callstack-aufruf wegfällt) ist

Falsch. Die Optimierung kuemmert sich darum, dass beides dasselbe wird ;)

Greetz
alcaeus

mkinzler 21. Apr 2006 19:39

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Der Aufrufstack. bei jedem Funktionsaufruf wird die Rücksprungadresse auf dem Stack abgelegt.

Batman666 21. Apr 2006 19:41

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Zitat:

Zitat von mkinzler
Der Aufrufstack. bei jedem Funktionsaufruf wird die Rücksprungadresse auf dem Stack abgelegt.

Diese Erklärung mag vielleicht richtig sein ;) aber mich hat sie noch mehr mit einem dicken ? *wasistlos* versehen ;(

Aber ok ;) ich nehme das mal so hin ;)

Khabarakh 21. Apr 2006 19:53

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Zitat:

Zitat von Batman666
Aber ok ;) ich nehme das mal so hin ;)

Wobei es wie gesagt in diesem Fall gar nicht zutrifft ;) .

sakura 21. Apr 2006 20:06

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Zitat:

Zitat von Batman666
Diese Erklärung mag vielleicht richtig sein ;) aber mich hat sie noch mehr mit einem dicken ? *wasistlos* versehen ;(

Du musst Dir vorstellen, dass wenn immer eine Funktion/Prozedur/etc. aufgerufen wird, der Computer sich merken muss, wo er davor war und wie seine Register (kleiner Datenspeicher) waren. Das hinterlegt er auf dem Stack. Beim beenden einer Prozedur/Funktion/etc. holt er sich diese Informationen wieder zurück vom Stack und es geht an der Stelle weiter. (sehr vereinfacht dargestellt). Aber das dürfte Dich zu diesem Zeitpunkt nicht interessieren.

Zu Dec() und Inc() ist zu sagen, dass diese Funktionen sind, welche dank "Compiler-Magic" ohne solche Stackaufrufe implementiert werden, mit den korrespondieren Prozessorfunktionen ;)

Kurz gesagt: störe Dich nicht an dem Geschwafel dazu, kommt noch früh genug ;)

...:cat:...

DGL-luke 21. Apr 2006 20:16

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
eine funktion ist im Assembler-code (also der endgültigen binären form) nur eine reihe vno anweisungen mit einem RETN (return) am ende. damit dieses RETN aber weiss, wo es weitergeht, wird auf den callstack die adresse des nächsten befehls abgelegt.

Wenn du diesen code hast:

Code:
00x001 CALL 00x003 //funktionsaufruf
00x002 NOP        //nix ;)
00x003 NOP        //auch nix (genauer gesagt: "No OPeration")
00x004 RETN       //zurück zu 00x002
muss beim ausführen des calls auf den callstack "00x002" abgelegt werden, damit das programm weiss, wohin es zurückspringen soll, wenn die funktion beendet ist.

So ungefähr auf jeden Fall...

//roter kasten: ja, sakura, da komtm das geschwafel schon :mrgreen:

Corpsman 21. Apr 2006 20:24

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
Man merkt das ihr richtig vom Fach seid.

Kurz zusammengefasst interessiert dich die sache mit dem Callstack eigentlich nur wenn du Richtig schnelle Programme schreiben willst. Spätestens dann weist du so was aber eh.

Und unser Glück der Compiler macht das hier sowieso gleich. Es gibt aber durchaus sachen die der Compiler nicht mehr wegoptimieren kann und dann ist so ein wissen echt Gold wert.

Khabarakh 21. Apr 2006 20:42

Re: Zahl um +1 erhöhen oder um -1 erniedrigen
 
[OT]
Hab mir gerade noch einmal die Überschrift angeschaut. Irgendwie kommt doch bei "um +1 erhöhen" und "um -1 erniedrigen" so etwa das Gleiche raus :mrgreen: .
[/OT]

Zitat:

Kurz zusammengefasst interessiert dich die sache mit dem Callstack eigentlich nur wenn du Richtig schnelle Programme schreiben willst.
Wenn dein Compiler ganz lieb ist (älter als 1 Jahr sollte er nicht sein, dann werden sie immer so miesepetrig ;) ), sorgt er vielleicht sogar für das Inlining der Funktion, dann darfst du dir wieder weniger Gedanken um den Stack machen. Verlassen sollte man sich darauf allerdings nicht ;) .


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr.

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