Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array verändern (https://www.delphipraxis.net/126401-array-veraendern.html)

AlexanderBrade 23. Dez 2008 18:27


array verändern
 
Wie kann ich aus meinem Array B[1..24] in Abhängigkeit verschiedener Bedingungen bestimmte Elemente z.B. B[2] und B[4] entfernen, sodass sie beim Nachfolgenden Sortieren in der sortierten Liste nicht mehr auftauchen?

DeddyH 23. Dez 2008 18:32

Re: array verändern
 
Bei statischen Arrays kannst Du keine Elemente entfernen.

AlexanderBrade 23. Dez 2008 18:33

Re: array verändern
 
Dann gibt es sicherlich so etwas wie dynamische...

mkinzler 23. Dez 2008 18:34

Re: array verändern
 
Ich würde sowieso einen dynamischen verwenden, denn die Größe könnte sich schnell ändern
[Edit:
Zitat:

Dann gibt es sicherlich so etwas wie dynamische...
Ja wenn du die Grenzen weglässt ( siehe auch Paramter anderer Thread)
}

DeddyH 23. Dez 2008 18:34

Re: array verändern
 
Jepp, die gibt es.
Delphi-Quellcode:
var
    arr1: array[1..8] of integer; //statisches Array
    arr2: array of integer; //dynamisches Array, Größe muss über SetLength festgelegt werden

AlexanderBrade 23. Dez 2008 18:46

Re: array verändern
 
Wie setze ich den SetLength fest?
Wie greife ich dann auf solche Feldvariablen zu: auch z.B. B[20], wenn das mit der festgelegten Länge korrespondiert?

DeddyH 23. Dez 2008 18:48

Re: array verändern
 
SetLength -> F1, Zugriff erfolgt wie bei einem statischen Array über Array[Index].

AlexanderBrade 23. Dez 2008 18:54

Re: array verändern
 
Die Hilfe spuckt doch nur "Müll" aus, fast unabhängig davon was ich suche bzw. eingebe(Natürlich sthet das im Zusammenhang mit meinem beschränkten Wissen zu Delphi)!
Vielleciht kann mir jemand mal aufzeigen wie diese Length festgesetzt wird und vor allem wo!
Im übrigen wie lösche ich nun eigentlich ein "Objekt" aus dem array of integer, z.B. B[12]?

mkinzler 23. Dez 2008 18:57

Re: array verändern
 
Z.B. mit dem letzen Element Tauschen und dann den Array um eins verkleinern

guidok 23. Dez 2008 19:02

Re: array verändern
 
Also ich finde die Hilfe extrem hilfreich (wie sinnig).

Suche einfach in der Hilfe nach der Routine "SetLength" und damit bekommst du eine genaue Beschreibung, wie diese funktioniert. Im Prinzip ist allerdings schon der Name selbstredend, oder kannst du kein Englisch?

Wo du die Länge festlegst und wie oft du diese änderst ist deine Sache, das musst du schon selbst entscheiden. Hier kennt ja schließlich niemand deinen Code.

Einfach Löschen ist nicht drin. Löschen besteht z.B. aus folgenden Schritten:

1. Die Elemente NACH dem zu löschenden Element um eine Position nach vorne verschieben (ja, damit überschreibst du das Element, das du löschen willst)
2. Das Array mit Hilfe von SetLength um ein Element verkürzen.

Nur zur Vollständigkeit: Objekte sind was anderes. Ein Array of Integer enthält einfach Elemente vom Typ Integer und keine Objekte.

Edit:

Wie es mkinzler geschrieben hat geht es natürlich auch. Wenn du sowieso danach sortierst, dann ist die Reihenfolge ja wurscht.

AlexanderBrade 23. Dez 2008 20:08

Re: array verändern
 
Kann ich dann so vorgehen?

Delphi-Quellcode:
if a=1 then begin swap(B[19], B[24]) and setlength(B, 23);
{etc}

mkinzler 23. Dez 2008 20:10

Re: array verändern
 
Nein
Delphi-Quellcode:
if a=1 then
begin
    swap(B[19], B[24]);
    setlength(B, 23);
end;

AlexanderBrade 23. Dez 2008 21:05

Re: array verändern
 
Ich habe es jetzt so geschrieben:
Delphi-Quellcode:
if edit55.Visible = true then
begin
    swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]);{hier liegt irgendein Problem}
    setlength(B, 20); end;
if edit56.Visible = true then
begin
{usw}
Es klappt noch nicht ganz!

mkinzler 23. Dez 2008 21:08

Re: array verändern
 
Delphi-Quellcode:
if edit55.Visible then ...
reicht.

Was meinst du mit Problem?

DeddyH 23. Dez 2008 21:09

Re: array verändern
 
Wieso tauschst Du die Elemente manuell und welches Problem? Ohne Infos kommen wir nicht weiter.

AlexanderBrade 23. Dez 2008 21:09

Re: array verändern
 
In Bezug auf die "problematische" Zeile sagt Delphi ")" erwartet aber "," gefunden!

DeddyH 23. Dez 2008 21:11

Re: array verändern
 
Zeig uns mal die ganze Methode.

AlexanderBrade 23. Dez 2008 21:40

Re: array verändern
 
Delphi-Quellcode:
if edit55.Visible then
begin
    swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]);
    setlength(B, 20); end;
if edit56.Visible then
begin
    swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]);
    setlength(B, 20);
Mehr ist es nicht! Warum ich das manuell mache, weil ich keine Ahnung habe, wie man es anders anstellen könnte!

mkinzler 23. Dez 2008 21:42

Re: array verändern
 
Ich vertehe auch nicht, was der Code machen soll.

TonyR 23. Dez 2008 21:52

Re: array verändern
 
Zitat:

Zitat von Delphi Hilfe
Syntax: function Swap(X: Integer): Integer;

Beschreibung
In Delphi vertauscht Swap das höherwertige mit dem niederwertigen Byte des mit X angegebenen Wertes. X ist ein Ausdruck des Typs SmallInt oder Word (16 Bit). Die Funktion ist nur aus Gründen der Abwärtskompatibilität vorhanden.

WAS willst du denn überhaupt machen???
Die Funktion macht 100 pro nicht das was du möchtest.

AlexanderBrade 23. Dez 2008 22:03

Re: array verändern
 
Ja das glaube ich inzwischen auch, aber wie schaffe ich es denn, dass mir das Programm z.B. B[24] mit B[15] austauscht?
Ich dachte immer diese Funktion heißt swap?!?

TonyR 23. Dez 2008 22:08

Re: array verändern
 
Delphi-Quellcode:
BlaArr[5]:=BlaArr[21];
SetLength(BlaArr,21)
Wenn du es wirklich AUSTAUSCHEN möchtest, dann speicherst du den Wert in [5] erst in eine Temporäre Variable!

AlexanderBrade 23. Dez 2008 22:11

Re: array verändern
 
was soll "blaarr" sein? Ich möchte das Element B[19] löschen, deshlab möchte ich diesen Wert mit dem letzten B[24] tauschen um dann die Länge des Feldes auf 23 zu reduzieren![Dann ist es ja verschwunden] Wie war das nochmal mit den temporären Varibalen?

mkinzler 23. Dez 2008 22:11

Re: array verändern
 
Zitat:

Wenn du es wirklich AUSTAUSCHEN möchtest, dann speicherst du den Wert in [5] erst in eine Temporäre Variable!
das wäre dann der erwähnte Dreieckstausch

AlexanderBrade 23. Dez 2008 22:12

Re: array verändern
 
Wie würde denn der für mein Beispiel aussehen? Hat doch diesmal nichts mit BubbleSort zu tun oder?

mkinzler 23. Dez 2008 22:15

Re: array verändern
 
Irgendwie schon, weil der BubbleSort Vertauschen als wichtigstes Mittel verwendet. Wenn der 1. Wert kelienr als der 2. ist wird getauscht. Und das vom Ende her, deshalb werden die größeren Werte wie Blasen im Wasser nach oben geschoben. daher der Name

AlexanderBrade 23. Dez 2008 22:16

Re: array verändern
 
Delphi-Quellcode:
swp:=xx;
    xx:=yy;
       yy:=swp;
Diese Prozedur habe ich vorhin verwendet! Was muss ich daran jetzt verändern?

mkinzler 23. Dez 2008 22:18

Re: array verändern
 
Nichts. Er vertauscht xx und yy.

AlexanderBrade 23. Dez 2008 22:23

Re: array verändern
 
Wenn ich nun B[19] und B[24] vertauschen will heißt dass:
Delphi-Quellcode:
B[19]:=xx;
        xx:=yy;
        yy:=B[19]{B[24]????];

mkinzler 23. Dez 2008 22:27

Re: array verändern
 
Nein,

Delphi-Quellcode:
h := B[19];
B[19] := B[24];
B[24] := h;
Aber zum Löschen ist das ja nicht notwendig, weil B{2 anschliessend ja entfernt wird, es reichet also bei nicht sortiertem Array
Delphi-Quellcode:
B[19] := B[24];

TonyR 23. Dez 2008 23:29

Re: array verändern
 
:shock: Was ich übrigens in #22 bereits (wahrscheinlich zu chiffriert im weiteren Sinne) "erwähnt" habe :roll:

mkinzler 23. Dez 2008 23:34

Re: array verändern
 
Fast alles wurde hier schon mehrmals erwähnt, z.T. im Parallelthread http://www.delphipraxis.net/internal...t.php?t=148917

TonyR 23. Dez 2008 23:35

Re: array verändern
 
Den hat ich auch grad erst entdeckt ... naja, manche brauchen sowas :roll:


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