AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 DynArrays zusammenfuegen

Ein Thema von Lucaito · begonnen am 25. Jan 2009 · letzter Beitrag vom 25. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Lucaito

Registriert seit: 10. Jan 2009
20 Beiträge
 
#1

2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 11:45
Hallo!

Wollt mal fragen wie man 2 dynamische Arrays mit dem Reißverschlussprinzip zusammenfuegt. :/
Hab mich selbst scho probiert, aber irgendwie komm ich noch nich ganz auf die Loesung. xD
Achja, die beiden Arrays haben sehr wahrsch. verschiedene Groessen! Deshalb find ich des recht schwierig...

Danke schonma fuer Antworten, Luca!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 11:47
Wie hast du es versucht? Such mal nach Mischen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 11:50
die Frage ist wie du außerhalb der Programmierung 2 mengen im Reisverschlussprinzip zusammenfügst.

Ich würde einmal aus der einen Kiste was nehmen, dann aus der anderen und das solange bis eine Kiste von beiden leer ist. Danach einfach die restlichen Sachen der noch befüllten Kiste hinten anfügen.

In der Programmierung ist es nicht viel anders. Erstmal schauen wieviel Platz man braucht (Anzahl des einen Arrays + Anzahl des zweiten Arrays.
Dann das kleinere Array von beiden durchgehen und die Elemente in jedes zweite Feld des neuen Arrays stopfen (Index * 2)
Danach das größere Array nehmen und bis zur Anzahl des kleinen Arrays die lücken stopfen. Dahinter dann den Rest des größeren Arrays kopieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Scooty78

Registriert seit: 3. Jul 2008
Ort: Düren
41 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 12:26
versuchs mal so:

Delphi-Quellcode:
 setlength(array3,(length(array1)+length(array2)));

  x := -1;
  for I := 0 to length(array1) - 1 do
    begin
      inc(x);
      array3[x] := array1[i];
      if i <= length(array2)-1 then
      begin
        inc(x);
        array3[x] := array2[i];
      end;
    end;

  if length(array2)> length(array1) then
    begin
      for I := length(array1)-1 to length(array2) - 1 do
        begin
          inc(x);
          array3[x] := array2[i];
        end;
    end;
Gruß
Scooty
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 13:39
auch will ... auch will ... *hibblig rumhüpf*
Delphi-Quellcode:
SetLength(array3, Length(array1) + Length(array2));
z := Min(Length(array1), Length(array2));
x := 0;
For i := 0 to z - 1 do Begin
  array3[x] := array1[i];
  Inc(x);
  array3[x] := array2[i];
  Inc(x);
End;
For i := z to High(array1) do Begin
  array3[x] := array1[i];
  Inc(x);
End;
For i := z to High(array2) do Begin
  array3[x] := array2[i];
  Inc(x);
End;
und in Kurz:
Delphi-Quellcode:
SetLength(array3, Length(array1) + Length(array2));
z := Min(Length(array1), Length(array2));
For i := 0 to z - 1 do Begin
  array3[i * 2] := array1[i];
  array3[i * 2 + 1] := array2[i];
End;
For i := z to High(array1) do array3[z + i] := array1[i];
For i := z to High(array2) do array3[z + i] := array2[i];
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 13:43
-Unsinn-
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 13:44
Er will die Arrays nach dem Reißverschlussprinzip zusammenfügen, General.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 13:48
@Neutral General:
auch wenn es hier nicht stimmt ... sobald bestimmte Struckturen in dem Array enthalten sind (er hat ja nicht gesagt von welchem Typ sein Array ist), dann kann es damit schöne Speicherprobleme geben

versuch deinen z.B. mal mit Array of String
also davor sollte man bei sowas schon warnen
$2B or not $2B
  Mit Zitat antworten Zitat
Lucaito

Registriert seit: 10. Jan 2009
20 Beiträge
 
#9

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 17:21
Korrekt, is n Array vom Typ t_inhalt, un t_inhalt wiederum is als type definiert mit string^^
type t_inhalt : string So, und da mir meine 'liebe' Mutter direkt nachdem ich die Frage geschrieben habe, den WLan-Stick abgenommen hat, musste ich selbst nachdenken. :/
Also 'n Blatt Papier genommen un des mal durchgegangen. ^^
Bin auf ne schicke Lösung ohne 3tes Array gekommen :D
Delphi-Quellcode:
  t := 1;
  for i := 0 to high(schlange2.inhalt) do
    begin
      array_size(inc);
      for j := high(schlange.inhalt) downto t do
        schlange.inhalt[j] := schlange.inhalt[j-1];
      schlange.inhalt[t] := schlange2.inhalt[i];
      t := t+2;
    end;
Trotzdem danke an alle. ^___^

Greetz, Luca
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: 2 DynArrays zusammenfuegen

  Alt 25. Jan 2009, 18:05
Also Strings sind Typen, welche initialisiert und finalisiert werden müssen, was bei Move/MoveMemory natürlich nicht der Fall ist.

Zitat:
musste ich selbst nachdenken. :/
Also 'n Blatt Papier genommen un des mal durchgegangen. ^^
Bin auf ne schicke Lösung ... gekommen
gut gemacht ^^
und soweit ich das seh, sollte diese auch funktionieren


Zitat:
Bin auf ne schicke Lösung ohne 3tes Array gekommen
OK, das hattest du nicht gesagt, also daß es auch direkt im Array eingefügt werden soll.

Delphi-Quellcode:
for j := high(schlange.inhalt) downto t do
  schlange.inhalt[j] := schlange.inhalt[j-1];
was man hier noch optimieren könnte, wäre das ständig weiterschieben alle nachfolgenden Einträge

hier werden z.B. erstmal alle Einträge im array1 an ihre neue Position verschoben
und anschließend nur noch die Einträge aus array2 in die entstandenen Freiräume eingefügt.
Delphi-Quellcode:
a := Length(array1);
n := a + Length(array2);
z := Min(a, Length(array2));
SetLength(array1, n);
For i := a - 1 downto z do array1[z + i] := array1[i];
For i := z - 1 downto 1 do array1[i * 2] := array1[i];
For i := 0 to z - 1 do array1[i * 2 + 1] := array2[i];
For i := z to High(array2) do array1[z + i] := array2[i];
für das Verständnis:
die 1. Schleife verschiebt alles, was zusammenhängend von array1 am Ende des gemeinsamen Arrays steht (falls vorhanden).
die 2. Schleife verschiebt die Elemente im gemeinsamen Anteil.
die 3. Schleife fügt die Elemente von array2 in den gemeinsamen Anteil.
die 4. Schleife hängt die übrigen Teile an, welche nach dem gemeinsamen Teil liegen (falls vorhanden).

im gemeinsamen Teil sind die Einträge dann nach dem Reisverschlußprinzip verteilt.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 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