AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

gleiche Zahlenfolgen im Array untersuchen

Offene Frage von "Sendrix"
Ein Thema von Sendrix · begonnen am 5. Okt 2011 · letzter Beitrag vom 16. Okt 2011
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Sendrix

Registriert seit: 5. Okt 2011
9 Beiträge
 
#1

gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 13:42
Guten Tag,

ich bin zwar kein Delphi Neuling mehr, allerdings treffe ich immer wieder auf Problemstellungen die ich alleine leider nicht lösen kann.

Aktuell habe ich das Problem das ich Arrayelemente miteinander vergleichen muß. Grundsätzlich natürlich keine große Aktion das eine mit dem anderen Element zu vergleichen.

In diesem Fall handelt es sich jedoch um Zahlenfolgen die in einem unsortierten Array of Byte verglichen werden sollen. Unsortiert weil die Position bzw. die Zahlenreihenfolge der Zahlen in dem Array wichtig sind bei der Weiterverarbeitung.

Beispiel: Als erstes soll untersucht werden ob das erste Element des Arrays ein weiteres mal im Array vorhanden ist. Wenn nein dann soll mit dem zweiten Element neu begonnen werden. Wenn ja soll untersucht werden ob das Element das auf das erste Element im Array folgt auch bei dem gefundenen Element als Nachfolger vorhanden ist. Wenn ja geht es dann weiter mit dem dritten Element. Ist das dritte Element das gleiche wie bei dem gefundenen Element wo bereits das erste und zweite Element übereinstimmen. Das soll dann immer so weitergehen bis zu definierbaren Tiefe.

Man erhält dann letztlich eine Übersicht ob Zahlenfolgen/ketten mehrfach in einem Array vorhanden sind und mit welcher Tiefe die Folgen identisch miteinander sind.

Ich habe es bereits mit verschachtelten For Schleifen versucht aber bei der Untersuchung ab der dritten Zahl komme ich nicht mehr weiter. ich verirre mich irgendwie in den Schleifen. Als nächstes habe ich versucht erst eine Kopie des Arrays anzulegen und mir dadurch mehr Übersicht erhofft. Allerdings komme ich auch hier nicht weiter. Immer wenn eine Zahlenfolgen doppelt vorhanden ist muß ja der nächste Wert verglichen werden und dadurch lande ich immer wieder bei einer unübersichtlichen und nicht funktionierenden For Schleifen Variante. Es gelingt mir auch nicht das ganze bis zu einer beliebigen Tiefe durchzuführen da ich für jede weitere Zahl eine neue For Schleife benötige.

Hoffe ich konnte das Problem einigermaßen verständlich beschreiben.

Ich glaube das ich mich ein wenig verirrt habe vor lauter Schleifen und würde mich über Hilfe sehr freuen.

Viele Grüße,
Sendrix
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 14:12
Wenn ja soll untersucht werden ob das Element das auf das erste Element im Array folgt auch bei dem gefundenen Element als Nachfolger vorhanden
Tut mir leid, ich verstehe es auch nach dem fünften mal lesen nicht
Philip
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 14:27
Gott sei Dank, ich dachte schon, ich sei zu blöd und nur ich würde das nicht verstehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 14:55
Hallo hier mal als Denkansatz, so wie ich das Problem verstanden habe:
Array heißt bei mir das Hauptarray, das irgendwie übergeben wird oder global ist.
Tiefe, hier :=5 ist die maximale Ketten-Tiefe.

Edit: Statt der InListe-Funktion kann man auch eine Find-Funktion o.ä. der TStringList nehemn. Hab gerade kein Delphi, drum weiß ich nit, obs da was gab und wie das dann ggf. heißt.

Edit: Achja, hab vergessen die Ergebnisse auszugeben, die ja dann in den beiden Stringlisten stehen.

Delphi-Quellcode:
var:
  i, j, k, l :Integer;
  Tiefe : Integer;
  Kette : String
  Kettenliste:TStringlist;
  Anzahlliste:TStringlist;
function InListe(const KT : String):Boolean;
begin
  Result:=false;
  For l = 0 To Kettenliste.Count-1 do
    if Kettenliste[l]=Kette then Result:=true;
end
function Vorkommenszahl(const KT : String):Integer;
begin
  //Die Funktion ist mir aus dem Kopf zu kompliziert:
  //Kette in Elemente zerlegen, Anz. Elemente bestimmen
  //Elemente in DynArray speichern
  //Das "Hauptarray" Array durchgehen und in Schleifen mit den Elementen von DynArray vergleichen
  //Wenn passende Kette gefunden wird einen Counter hochgezählt
end
begin
Tiefe:=5;
Kettenliste:=TStringlist.Create(nil);
Anzahlliste:=TStringlist.Create(nil);
For i:=0 To Array.Count-1 do
  begin
  For j:=0 To Tiefe-1 do
    begin
    Kette:='';
    For k = 0 to j do
      Kette:=Kette+IntToStr(Array[i+k])+';';
    if not InListe(Kette) then
      begin
      Kettenliste.Add(Kette);
      Anzahlliste.Add(IntToStr(Vorkommenzahl(Kette)))
      end;
    end;
  end;
end;
Ralph

Geändert von Jumpy ( 5. Okt 2011 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Sendrix

Registriert seit: 5. Okt 2011
9 Beiträge
 
#5

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 14:56
Sorry wenn es doch zu unverständlich war. Ich versuche es einfach mal mit einem kleinen Beispiel.

Ein Array mit 10 Elementen.

1, 2, 3, 4, 5, 9, 2, 3, 5, 9

Das erste Element, die Zahl 1 existiert nur einmal im Array.
Das zweite Element, die Zahl 2 existiert noch ein weiteres mal im Array. Auf das zweite Element, also auf die 2 folgt die Zahl 3. Jetzt muß überprüft werden ob bei der gefundenen Zahl 2 auch die 3 als nächstes Element folgt.
Wenn das so ist muß überprüft werden ob die nächste Zahl vom Anfang des Arrays, in diesem Fall die Zahl 4 auch bei der "bisher gefundenen Zahlenfolge 2, 3, " folgt.

Das Ergebnis wäre also das die Zahlenfolge 2,3, in dem Array mehrfach vorhanden ist.

Es entstehen also Zahlenfolgen die eventuell mehrfach im Array vorkommen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 15:08
Achso. Dann muss meine obige Lösung dahingehend angepasst werden, das z.B. alle Ketten, die nur aus einem Element bestehen nachher gelöscht werden, sowie auch alle Ketten mit mehr als einem Element, die aber nur einmal vorkommen.

Alternativ kann man natürlich direkt j erst bei 1 anfangen lassen und erst wenn Vorkommenzahl(Kette)>1 ist die Kette in die Liste aufnehmen. Mach das mal:

Delphi-Quellcode:
var:
  i, j, k, l, temp :Integer;
  Tiefe : Integer;
  Kette : String
  Kettenliste:TStringlist;
  Anzahlliste:TStringlist;
function InListe(const KT : String):Boolean;
begin
  Result:=false;
  For l = 0 To Kettenliste.Count-1 do
    if Kettenliste[l]=Kette then Result:=true;
end
function Vorkommenszahl(const KT : String):Integer;
begin
  //Die Funktion ist mir aus dem Kopf zu kompliziert:
  //Kette in Elemente zerlegen, Anz. Elemente bestimmen
  //Elemente in DynArray speichern
  //Das "Hauptarray" Array durchgehen und in Schleifen mit den Elementen von DynArray vergleichen
  //Wenn passende Kette gefunden wird einen Counter hochgezählt
end
begin
Tiefe:=5;
Kettenliste:=TStringlist.Create(nil);
Anzahlliste:=TStringlist.Create(nil);
For i:=0 To Array.Count-1 do
  begin
  For j:=1 To Tiefe-1 do
    begin
    Kette:='';
    For k = 0 to j do
      Kette:=Kette+IntToStr(Array[i+k])+';';
    if not InListe(Kette) then
      begin
      temp:=Vorkommenzahl(Kette);
      if temp>1 then
        begin
        Kettenliste.Add(Kette);
        Anzahlliste.Add(IntToStr(temp))
        end;
      end;
    end;
  end;
end;
Ralph

Geändert von Jumpy ( 5. Okt 2011 um 15:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 17:14
so mal in unreine gedacht,
nimm zwei pointer und laß beide über Deine datenmenge laufen ungefähr so etwas:
Delphi-Quellcode:

p1,p2:^array[0..4] of char;

p1:=@Array[0];
p2:=@array[sucheindexgleich];
if p1^=p2^ then showmessage"Gleiche werte gefunden"
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#8

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 17:43
Was ist mit der Sequence
1 2 3 4 1 2 3 4

Welches Ergebnis willst Du?
1234 kommt 2x vor (also nur die längste Subsequenz),
oder
12 kommt 2x vor,
23 kommt 2x vor
34 kommt 2x vor
123 kommt 2x vor
234 kommt 2x vor
1234 kommt 2x vor (also alle Subsequenzen)?
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Sendrix

Registriert seit: 5. Okt 2011
9 Beiträge
 
#9

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 17:46
Hallo Ralph,

vielen Dank für Deine Hilfe. Leider komme ich nicht ganz klar mit Deiner Lösung.
Ich verstehe das so.

Du legst eine Stringliste an und gehst für jedes Element des Arrays der Tiefe entsprechend durch das Array und hängst die Elemente in der Kettenliste aneinander.
Dann überprüfst Du in InListe ob die Kette in der Kettenliste schon vorhanden ist. Wenn nein dann schreibst Du Kette in die Kettenliste.

Ich versteh das so nicht ganz, könntest Du mir das bitte ein wenig erklären?

Sendrix(Sebastian)
  Mit Zitat antworten Zitat
Sendrix

Registriert seit: 5. Okt 2011
9 Beiträge
 
#10

AW: gleiche Zahlenfolgen im Array untersuchen

  Alt 5. Okt 2011, 18:04
Hallo FredlFesl,

Danke für Deine Frage, hab ich nicht genau formuliert, sorry. Mir geht es schon darum die längste zusammenhängende, identische Folge herauszufinden.
Das wäre dann also 2 x 1234.

Die, ich nenne Sie mal Zwischenfolgen oder Tiefe (2 x 12 oder 2 x 23 ...) sollen nur dann "erkannt" werden wenn die "Tiefe" bei z.B. 2 oder 3 gleichen aufeinanderfolgenden Elementen beendet werden soll.
Grundsätzlich gilt (1234), also soviele Elemente wie identisch sind, alles andre ist erstmal optional. Mit der Option der variablen Tiefe hab ich es überhaupt noch nicht hinbekommen. Bisher hab ich lediglich geschafft 2 in Folge vorkommende Elemente nochmal im Array zu finden. Bei mehr wie 2 endet es für mich im Schleifenwirrwarr.

Gruß
Sendrix
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:11 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