Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array


klabri - Do 22.04.10 19:23
Titel: Array
Hallo

ich möchte gerne ,dass in diesem
Array
[3,5,7,9,11,13,17........]

die 7 'gelöscht' wird und alle Zahlen nach der 7
eine Stelle vorrücken..


Moderiert von user profile iconNarses: Topic aus Algorithmen, Optimierung und Assembler verschoben am Fr 23.04.2010 um 01:18


FinnO - Do 22.04.10 19:29

TList verwenden.


Chemiker - Do 22.04.10 19:32

Hallo klabri,

dann wird Dir nichts anderes übrig bleiben und alle Nachfolgende Zahlen auszulesen und einen Platz nach vorne in den Array zu speichern. Wenn das öfters vorkommt, würde ich mit einer Liste arbeiten.

Bis bald Chemiker


klabri - Fr 23.04.10 00:42

Hallo,
danke für den Tipp mit TStringList,Anlegen und Ausgeben einer Liste funktioniert,
was nicht funktioniert ist ,bestimmte Zahlen ,z.Bsp alle durch 3 teilbaren Zahlen
zu entfernen. Es funktioniert mit 2, aber nicht mit 5 oder 7 ...
Leider finde ich den Fehler nicht .


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
 


var List:TStringList;
 i,p:integer;

begin
List:=TStringList.Create;
try

     for i:= 2 to 50 do begin
     List.Add(Inttostr(i));
     end;

          for i := List.Count-1 downto 0 do    /??????????????????????
              begin
              p:=StrtoInt(Edit1.Text);         / hier sollten alle Zahlen aus 
              if i mod p =0 then              / der Liste entfernt werden , 
                                              / die durch p ohne Rest teilbar sind; 
              begin                           / funktioniert nicht richtig .... 
              List.Delete(i);
              end;
              Memo1.Lines.Add(List.Text);
              end;
 finally;
 List.Free;
 end;
 end;


klabri - Fr 23.04.10 01:01

Hallo,
der Fehler ist gefunden ;so funktioniert es ; hier werden z.Bsp alle Zahlen,teilbar
durch 7 gelöscht; danke für die Hilfe;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 for i:= 0 to 50 do begin
     List.Add(Inttostr(i));
     end;

          for i := List.Count-1 downto 2 do
              begin

              if i mod 7=0 then
              begin
              List.Delete(i);
              end;
              end;
              Memo1.Lines.Add(List.Text);


jaenicke - Fr 23.04.10 07:30

Wie kommst du eigentlich plötzlich auf TStringList? Vorgeschlagen wurde schließlich TList. Denn so wandelst du die Zahlen in Strings um statt direkt mit den Zahlen zu arbeiten...


klabri - Sa 24.04.10 00:17

Hallo Jaenicke,
TStringList, weil ich zu dem Thema zuerst etwas gefunden habe,was verständlich geschrieben war,gut umzusetzen war.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Zur Ergänzung , das ganze sollte dazu dienen eine Liste mit Primzahlen zu erstellen.
2-3-4-5-6-7-8-9
2-3-5-7-9
2-3-5-7......usw.
,funktioniert aber so nicht, weil die Liste irgendwie immer überschrieben wird.
Hat jemand noch einen guten Tipp ?


klabri - Mo 26.04.10 17:36

Meine Frage war :"Wie lässt sich ein Array-Element ohne Lücke löschen ?"

eine Antwort findet sich unter http://www.delphi3000.com in dem Artikel von Marius_catalin Petrisor :" How to delete an element from a Dynamic Array"

eine weitere Antwort gibt es bei 'Delphi-Treff' http://www.delphi-treff.de/tipps/object-pascal/wiki/Array-Element%20l%C3%B6schen,%20ohne%20dass%20eine%20L%C3%BCcke%20entsteht/

Damit wäre meine Frage beantwortet. Beide Lösungen sieht recht ähnlich und gut verständlich beschrieben. :D :D

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.