Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Integer + 1 (https://www.delphipraxis.net/112753-integer-1-a.html)

XPLOSIV 26. Apr 2008 11:09


Integer + 1
 
Also ich will eine Variable immer um 1 erhöhen und dann anzeigen lassen.

Wie geht das ?

Wal 26. Apr 2008 11:12

Re: Integer + 1
 
Inc(i);
Label1.Caption := IntToStr(i);

Wal

lbccaleb 26. Apr 2008 11:32

Re: Integer + 1
 
Zitat:

Zitat von Wal
Inc(i);
Label1.Caption := IntToStr(i);

Wal

oder

Delphi-Quellcode:
i := i + 1; //das aber nicht ganz so schön die methode

fLaSh11 26. Apr 2008 12:36

Re: Integer + 1
 
Aber höchstwahrscheinlich viel schneller!

BUG 26. Apr 2008 12:38

Re: Integer + 1
 
Zitat:

Zitat von fLaSh11
Aber höchstwahrscheinlich viel schneller!

Echt?
Zitat:

Zitat von Delphi3-Hilfedatei
Inc generiert hochoptimierten Maschinencode und ist besonders für Schleifen geeignet.

MfG,
Bug

Mao 26. Apr 2008 12:44

Re: Integer + 1
 
Ein guter Compiler sollte beides zum nahezu selben Maschinencode umwandeln.

grenzgaenger 26. Apr 2008 12:55

Re: Integer + 1
 
Ein Blick in das Debuggfenster hilft da meist weiter.

Demoprojekt:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
 i: integer;
begin
 i := 0;
 inc(i);
 i := i + 1;
 writeln(i);
 readln;
end.
relevante zeilen assemblercode
Code:
Project1.dpr.10: i := 0;
0040914D 33DB            xor ebx,ebx
Project1.dpr.11: inc(i);
0040914F 43               inc ebx
Project1.dpr.12: i := i + 1;
00409150 43               inc ebx
Project1.dpr.13: writeln(i);
00409151 A1F0A94000       mov eax,[$0040a9f0]
unter D2006 compiliert.

Denke der assemblercode sagt alles.

grüsse GG

PS: sah grad, dass du mit D3 arbeitest. da sollte es noch einen unterschied machen. übernimm doch mal das beispiel und quote das ASM resultat..

1234588 26. Apr 2008 14:26

Re: Integer + 1
 
ich hab in irgendeinem buch mal gelesen, das
Code:
  ADD EAX,1
auch schneller als
Code:
  INC EAX
sein soll

sakura 26. Apr 2008 14:58

Re: Integer + 1
 
Zitat:

Zitat von 1234588
ich hab in irgendeinem buch mal gelesen, das
Code:
  ADD EAX,1
auch schneller als
Code:
  INC EAX
sein soll

Ist es aber nie. ;-) Auf modernen Prozessoren benötigt INC immer nur einen Taktzyklus bei direktem Zugriff auf Register, max. 3 bei Variablen.

Bei ADD verhält es sich inzwischen übrigens identisch ;)

...:cat:...

3_of_8 26. Apr 2008 15:56

Re: Integer + 1
 
Zitat:

max. 3 bei Variablen.
Sicher? Was ist wenn die Variable im Speicher liegt? Das müsste dann doch zumindest beim ersten mal einen Cache-Fehlzugriff verursachen und die Variable müsste aus dem Speicher angefordert werden, was schon mal gerne an die 100 Zyklen dauern kann.

XPLOSIV 27. Apr 2008 07:10

Re: Integer + 1
 
Naja geht nich is auch egal :?

Nuclear-Ping 27. Apr 2008 07:12

Re: Integer + 1
 
Was geht nich? Und warum?

Laufi 27. Apr 2008 08:39

Re: Integer + 1
 
hallo!

sorry aber wenn du nicht mal hinbringst eine Variable hochzuzählen solltest du dich vielleicht besser landschaftsgärtner sein als zu programmieren! :pale: Du musst es ja nicht in Asm machen! :)

liebe Grüsse
Laufi

Matze 27. Apr 2008 08:50

Re: Integer + 1
 
Hallo

Zitat:

Zitat von XPLOSIV
Naja geht nich is auch egal :?

Jetzt gib doch nicht gleich auf!

Zitat:

Zitat von XPLOSIV
Also ich will eine Variable immer um 1 erhöhen und dann anzeigen lassen.

Da du "immer" schreibst, vermute ich, meinst du das fortlaufend.

Das geht beispielsweise mit einem TTimer (aufs Formular ziehen und einen Doppelklick darauf machen). Die Geschwindigkeit lässt sich mit der Interval-Eigenschaft festlegen. Hier mal ein Beispiel mit globaler Variable:

Delphi-Quellcode:
var
  Form1: TForm1;
  i: Integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := IntToStr(i);
  Inc(i);
end;
Klappt das immer noch nicht, dann schreibe bitte genau, was nicht geht und auch wie dein bisheriger Code dazu aussieht.

Grüße

Edit: Huch, ich habe mich zitiert, anstelle den Beitrag zu editieren.

DeddyH 27. Apr 2008 09:19

Re: Integer + 1
 
Timer nicht Enabled?

Matze 27. Apr 2008 09:42

Re: Integer + 1
 
Zitat:

Zitat von DeddyH
Timer nicht Enabled?

Ich vermute, er hat bisher gar keinen Timer genutzt, daher mein Beitrag.

DeddyH 27. Apr 2008 09:47

Re: Integer + 1
 
Sry, ich dachte, ich hätte schon eher im Thread etwas von Timer gelesen :oops: . Ich werd eben auch nicht jünger :mrgreen:

XPLOSIV 27. Apr 2008 09:56

Re: Integer + 1
 
Nein, ich will sie an einer bestimmten Stelle +1 machen.

DeddyH 27. Apr 2008 09:57

Re: Integer + 1
 
Und was klappt da nicht? Zeig doch mal Deinen bisherigen Code.

[edit] @Matze: Äätsch, schneller :tongue: :duck: [/edit]

Matze 27. Apr 2008 09:57

Re: Integer + 1
 
Zitat:

Zitat von Matze
Klappt das immer noch nicht, dann schreibe bitte genau, was nicht geht und auch wie dein bisheriger Code dazu aussieht.

Mach das bitte mal, sonst kann man hier nur raten.

Edit: Der alte Kerl ist schneller als ich dachte. :mrgreen:

grenzgaenger 27. Apr 2008 10:09

Re: Integer + 1
 
tja, dann hier mal ein projekt, das einen integer hochzählt und immer an der selben stelle ausgibt.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
var
  i: integer;
begin
  for i := 0 to 100000 do
    write(i:6,#13);
end.

DeddyH 27. Apr 2008 10:10

Re: Integer + 1
 
Ich glaube allerdings nicht, dass es hier um eine Schleife geht.

grenzgaenger 27. Apr 2008 10:17

Re: Integer + 1
 
Zitat:

Zitat von DeddyH
Ich glaube allerdings nicht, dass es hier um eine Schleife geht.

hallo deddy, weiss man dass? hier ist die anforderung:
Zitat:

Zitat von XPLOSIV
Also ich will eine Variable immer um 1 erhöhen und dann anzeigen lassen.

Wie geht das ?

und nachdem die lösung gepostet wurde, kam dies:
Zitat:

Zitat von XPLOSIV
Naja geht nich is auch egal :?


denke XPLOSIV sollte erst mal klären, was er denn möcht und wo sein problem liegt. hab meine kristallkugel leider in der firma gelassen.

grüsse
GG

DeddyH 27. Apr 2008 10:22

Re: Integer + 1
 
Zitat:

Zitat von grenzgaenger
denke XPLOSIV sollte erst mal klären, was er denn möcht und wo sein problem liegt.

Das ist ja unsere Rede :cheers:

Nuclear-Ping 27. Apr 2008 13:26

Re: Integer + 1
 
Cool, Problemraten, ich mach mit. :mrgreen:

Zitat:

Zitat von XPLOSIV
Also ich will eine Variable immer um 1 erhöhen und dann anzeigen lassen.

Wie geht das ?

Zitat:

Zitat von Wal
Inc(i);
Label1.Caption := IntToStr(i);

Zitat:

Zitat von XPLOSIV
Naja geht nich is auch egal :?

Zitat:

Zitat von Delphi Compiler
[Fataler Fehler] Undefinierter Bezeichner: i
[Fataler Fehler] Undefinierter Bezeichner: Label1

... Meine Vermutung.

XPLOSIV 27. Apr 2008 19:18

Re: Integer + 1
 
Lol ne, das nich der Fehler ^^
Will einen Integer einfach + 1 machen.
D.h einen code der die var i +1 macht.
Wenns immernoch zu ungenau is dann lassen wirs einfach ;)

Nuclear-Ping 27. Apr 2008 19:21

Re: Integer + 1
 
Ja und? Auf Seite 1 hast du mindestens drei Möglichkeiten gezeigt bekommen, sowas zu realisieren.

Wenn du gerade so mit Informationen um dich wirfst, was willst du da für Antworten erwarten? "Geht nicht" ist keine Problembeschreibung. *kopfschüttel*

Matze 27. Apr 2008 19:22

Re: Integer + 1
 
Zeige endlich deinen Code und schreibe, was nicht geht bzw. welche Fehler kommen. Wie oft soll man das denn noch sagen?

Wir wissen, dass du eine Variable inkrementieren möchtest und haben auch gezeigt, wie es geht. Nun ist es deine Aufgabe genau zu beschreiben was du möchtest und was nicht funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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