Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
sunny-Sonnenschein Gast
|
Verfasst am: 01. Jun 2006 16:48 Titel: Programmierproblem |
|
|
Ich muss gerade ein Programm schreiben für die Schule. Mein Problem ist, dass sich der Computer nicht die Zahl merkt, die angegeben wird. Jedes mal wenn ich neu auf den Button klicke, merkt er sich eine neue Zahl. Ersoll sich aber alle zahlen merken, wenn ich auf den Button drücke und erst auf einem anderen Button die Zahlen wieder löschen. Welchen Befehl kann ich nutzen damit er sich alle Zahlen merkt? |
|
Nach oben |
|
 |
|
gune Gast
|
Verfasst am: 01. Jun 2006 17:30 Titel: |
|
|
könnteste dat etas erläutern ... ich weiß nich wie du dat genau meinst...
nimmt man mittels des button klicks eine zahl auf aus einem edit feld zb? wenn ja dann nehm einfach mehrere variablen und wenn eine variable voll ist nimmta die nächste. das mit ner numer ausm speicher löschen kommt dann vieleicht späta
also
...
var zahl1 ,zahl2, zahl3, zahl3 : integer
begin
if zahl1 = '' then
zahl2 := form1.edit1.text;
else if zahl2 := '' then
zahl2 := form1.edit1.text; // und so weiter
end; |
|
Nach oben |
|
 |
Crotaphytus

Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 01. Jun 2006 19:28 Titel: |
|
|
Super, und wenn alle Variablen voll sind?
Klassisch würde man dafür ne Liste nehmen. Sollts wohl auch in Delphi vorgefertigt geben, irgendwo... Alternativ n Array, das, wenn es voll werden sollte, vergrößert wird. _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
 |
Senior Sanchez Gast
|
Verfasst am: 02. Jun 2006 16:45 Titel: |
|
|
In Delphi kann man Arrays dynamisch wachsen lassen, wenn ich mich recht entsinne.
Dafür gibt es eine SetLength() Funktion, die diese Aufgabe übernehmen kann.
Afaik muss dafür aber das Array für den Compiler von Anfang an als dynamisch sichtbar sein, dass bedeutet, dass man bei der Deklaration des Arrays keine Größenangabe angeben darf, sondern lediglich Array of Integer; oder dergleichen schreibt.
SetLength() kann man dann das Array und die neue Länge übergeben und das Array wird vergrößert. Näheres dazu findet sich aber in der Doku.
Insgeheim ist diese Lösung natürlich Bullshit. Ich weiß nicht genau wie clever der Delphi-Compiler ist, aber ich denke es werden sämtliche Inhalte in ein neues Array auf dem Stack kopiert. Das ist aber halt inperformant und einfach pöse.
Daher sollte entweder eine passende Standardstruktur von Delphi (gibts Listen als ADT? ich glaube ja, ne?) benutzt werden oder wenn mans stylish haben will und vor Klassenkameraden mal nen bissl pressen will, implementiert man ne eigene verkettete Liste mithilfe von Zeigern, was für dich aber wohl zu schwer sein dürfte  |
|
Nach oben |
|
 |
Crotaphytus

Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 02. Jun 2006 17:00 Titel: |
|
|
@Senior: Na ja, kommt drauf an, wie das genau realisiert wird. Klingt für mich irgendwie wie der Vector in Java. Wenn diese Größenänderungen vernünftig durchgeführt werden, kann das insgesamt durchaus performant sein. Die Rechnungen sind schon ne Weile her, aber die gemittelte Laufzeit bei nem Array, das immer, wenns voll ist, verdoppelt wird, was gar nicht mal so schlecht... _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
 |
Senior Sanchez Gast
|
Verfasst am: 02. Jun 2006 17:53 Titel: |
|
|
Crotaphytus hat Folgendes geschrieben: | @Senior: Na ja, kommt drauf an, wie das genau realisiert wird. Klingt für mich irgendwie wie der Vector in Java. Wenn diese Größenänderungen vernünftig durchgeführt werden, kann das insgesamt durchaus performant sein. Die Rechnungen sind schon ne Weile her, aber die gemittelte Laufzeit bei nem Array, das immer, wenns voll ist, verdoppelt wird, was gar nicht mal so schlecht... |
Eben, genau darauf kommt es an und das weiß ich leider nicht mehr. Sicherlich machts die Anwendung nicht sooo viel langsamer, aber es ist halt irgendwie blöde.
Naja, es ähnelt im Grunde dem Vector in Java nur mit dem Unterschied, dass man SetLength selber aufrufen muss - der Vector in Java vergrößert und verkleinert sich dagegen selbständig. |
|
Nach oben |
|
 |
Crotaphytus

Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 02. Jun 2006 18:55 Titel: |
|
|
Kommt halt drauf an, wie mans verwenden will. Denn bei jedem Zugriff auf ein Element mit nem bestimmten Index ist diese Struktur schneller.
Und wer weiß, vielleicht gibts unter Delphi ja auch ne automatische Vergrößerung? Wobei, das trau ich der Sprache nicht zu... Aber das Analogon zu setLength gibts beim Vector auch.
Na ja, aber ich glaub, wird driften gerade ab...  _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
 |
Senior Sanchez Gast
|
Verfasst am: 02. Jun 2006 19:59 Titel: |
|
|
Crotaphytus hat Folgendes geschrieben: | Kommt halt drauf an, wie mans verwenden will. Denn bei jedem Zugriff auf ein Element mit nem bestimmten Index ist diese Struktur schneller.
Und wer weiß, vielleicht gibts unter Delphi ja auch ne automatische Vergrößerung? Wobei, das trau ich der Sprache nicht zu... Aber das Analogon zu setLength gibts beim Vector auch.
Na ja, aber ich glaub, wird driften gerade ab...  |
Die Verwendungssache gibt wirklich den Ausschlag. Will man eine sequentielle Struktur die schnell angesprochen und leicht auf Element k zugegriffen werden kann, sind Arrays ideal und unschlagbar. Sollen dagegen viele Editieroptionen, z.B. Einfügen, Anhängen oder löschen, so sind verkettete Listen eben schneller
Deshalb sollte man unter Java ja gegen List programmieren: So kann man schnell die Implementierung vonner ArrayList auf ne LinkedList oder vice versa geändert werden, ohne das sich die Schnittstelle ändert. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum nicht herunterladen
|
|