AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit Listen/ verkettet Listen

Ein Thema von legionen · begonnen am 24. Okt 2007 · letzter Beitrag vom 27. Okt 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#11

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 15:18
Wie ist Nummer definiert?
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
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#12

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 15:21
die Nummer ist vom Typ Extended....... daran sollte es aber nicht liegen.... das problem liegt irgentwo im durchlaufen der liste, bzw. nicht richtiger definition der end-kriterien

nummer : extended;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#13

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 15:35
Dann versteh ich aber diese Abfrage nicht: Element.Nummer [1] . Was soll dabei herauskommen, wenn es sich nicht um ein Array handelt?
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#14

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 15:45
So, eine ungetestete Version, versuch halt mal:
Delphi-Quellcode:
While Durchlauf Do
   Begin
     Element := Dummy; // Bei jedem Start des Durchlaufs soll wieder auf von vorne gesucht werden
     Durchlauf := False; // wenn nichts gefunden wird, soll die Schleife abgebrochen werden
     gefunden := false; // da die schleife wieder von vorne anfängt, soll erstmal die zweite while do schleife laufen
     While (Element^.nd<> NIL) and (not Gefunden) do // wenn er ende erreicht soll abgebrochen werden
       Begin
         // in der IF Then Anweisung werden die Werte des aktuellen mit dem nächsten vergleicht.. jeweils 20% kleiner/ größer
         // dürfen die Einzelwerte sein, damit die beiden Elemente zusammengelegt werden
         If (Element^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
            (Element^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8)) and
            (Element^.nd^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
            (Element^.nd^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8)) Then
           Begin
             // Sind die beiden Elemente in dem Bereich, dann soll der erste als Wert den Mittelwert beider bekommen
             Element^.Nummer := (Element^.Nummer+Element^.nd^.Nummer) / 2;
             // 2. Element löschen
             tmp := Element^.nd;
             Element^.nd := tmp^.nd;
             Dispose(tmp);
             Durchlauf := true;
             gefunden := true;
           End; //soll weiter suchen, bis die andere While anforderung erfühlt ist.....

         Element:= Element^.nd; // immer ein Element weiter
       End;
   End;
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
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#15

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 15:53
ach sorry.... das mit dem [1] ist weil ich den quelltext aus delphi herauskopiert habe und dann alles soweit verändert hatte.... in delphi ist das ein array vom typ extended mit 10 möglichen stellen.... nummer : array[1..10] of Extended;.......


aber ich probiere das mal direkt aus!!!! sage gleich noch bescheid ob es funktioniert
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#16

Re: Probleme mit Listen/ verkettet Listen

  Alt 25. Okt 2007, 17:25
also erstmal danke.... hat schonmal ganz gut geholfen, gibt nur noch einen fehler bei den letzten werten..... werde mal etwas weiter suchen.... falls ich es nicht hinbekomme, melde ich mich nochmal......... ABER WIRKLICH VIELEN VIELEN DANK!!!!!
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#17

Re: Probleme mit Listen/ verkettet Listen

  Alt 27. Okt 2007, 16:57
hallo, ich bins leider schon wieder

also grundsätzlich läuft der algorithmus schon ganz gut, nur leider immer noch nicht zufriedenstellend ich habe ihn etwas weiter geändert, leider macht er immer noch fehler.... hier mal, was ich geändert habe in blau und rot zu sehen....

blau: da ich immer zwei aufeinanderfolgende elemente vergleichen will, also auch vorletzten und letzten darf ich nich bis zum letzten springen und dann mir werte aus dem danach holen (kommt zu fehler)

rot: da der dummy leer ist, springe ich schon vor dem ersten mal checken auf das nächste element, das sozusagen das erste element ist.

PROBLEM: solange die beiden letzten elemente so unterschiedlich sind, dass sie nicht zusammengelegt werden müssen ist alles okay, aber sobald die beiden letzten elemente "vereint werden sollen" kommt es zu einem fehler "access violation at adress ...."! Aber dard auch erstmal nicht abbrechen, den das jetzt letzte element könnte ja mit dem vorletzten element wieder vereint werden können..... ABER ich weiss einfach nicht mehr weiter..... ich sehe nicht wo der fehler ist... eigentlich sollte doch die While Do Kriterien einen fehler abbsichern, oder?


While Durchlauf Do
Begin
Element := Dummy;
Durchlauf := False;
gefunden := false;
While (Element^.nd^.nd<> NIL) and (Element^.nd<> NIL) and (not Gefunden) do
Begin
Element:= Element^.nd; //muss hierhin, da im dummy kein wert abgelegt ist, sonst fehler
If (Element^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
(Element^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8 )) and
(Element^.nd^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
(Element^.nd^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8 )) Then
Begin
Element^.Nummer := (Element^.Nummer+Element^.nd^.Nummer) / 2;
tmp := Element^.nd;
Element^.nd := tmp^.nd;
Dispose(tmp);
Durchlauf := true;
gefunden := true;
End;
End;
End;

Delphi-Quellcode:
While Durchlauf Do
   Begin
     Element := Dummy;
     Durchlauf := False;
     gefunden := false;
     While [color=#009fff](Element^.nd^.nd<> NIL) and [/color](Element^.nd<> NIL) and (not Gefunden) do
       Begin
       [color=#ff0000]Element:= Element^.nd; //muss hierhin, da im dummy kein wert abgelegt ist, sonst fehler [/color]
         If (Element^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
            (Element^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8 )) and
            (Element^.nd^.Nummer < (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 1.2)) and
            (Element^.nd^.Nummer > (((Element^.Nummer+Element^.nd^.Nummer) / 2) * 0.8 )) Then
           Begin
             Element^.Nummer := (Element^.Nummer+Element^.nd^.Nummer) / 2;
             tmp := Element^.nd;
             Element^.nd := tmp^.nd;
             Dispose(tmp);
             Durchlauf := true;
             gefunden := true;
           End;
       End;
   End;
Ihr habt mir bisher schon so gut geholfen, dafür nochmals vielen Dank, falls das letzte problem zu beheben wäre, das wäre super!!! wer in köln/umgebung wohnt und noch zusätzlich das problem lösen kann, den werde ich zum dank auf nen drink einladen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#18

Re: Probleme mit Listen/ verkettet Listen

  Alt 27. Okt 2007, 17:07
Wieso ist denn in Dummy kein Wert hinterlegt? Nomalerweise speichert man sich doch beim Anlegen einer einfach verketteten Liste das 1. Element als Einstiegspunkt. Und wenn Du schon "einen weiter" prüfst, dreh bitte die Bedingungen um, sonst knallt es. While (Element^.nd<> NIL) and (Element^.nd^.nd<> NIL) and (not Gefunden) do // so herum [edit] Vielleicht zeigst Du uns mal, wie Du die Liste anlegst, ich denke, da liegt der Hund begraben. [/edit]
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
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#19

Re: Probleme mit Listen/ verkettet Listen

  Alt 27. Okt 2007, 17:31
mensch das war es...... ich hatte nie angenommen das die Reihenfolge der Bedingungen für die While Do Schleife eine Rolle spielt....... MENSCH ES LÄUFT....... daran habe ich mir seit Wochen den Kopf zerbrochen und euch hier ja genervt

ach bin ich froh!!! vielen Dank!!!! Also falls du in der Nähe Köln wohnst steht das Angebot !!!!

Naja der Dummy verweisst nur auf das erste Element, hat aber ausser dem Zeiger aufs nächste Element selber keinen Inhalt......
Aber da es jetzt läuft ist alles SUPER !!!!!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#20

Re: Probleme mit Listen/ verkettet Listen

  Alt 27. Okt 2007, 17:39
Ich versteh bei der ganzen Sache aber immer noch nicht, wieso Du das übernächste Element prüfen musst.
Naja, wenn es jetzt geht, isses ja gut .

P.S.: Nähe von Köln haut nicht ganz hin, siehe mein Profil

[edit] Achja, zur Reihenfolge schau Dir mal den Compilerschalter $B an.
Zitat:
Die Direktive $B schaltet zwischen zwei unterschiedlichen Modellen der Code-Generierung für die Booleschen Operatoren and und or um.
Im Status {$B+} erzeugt der Compiler Code für die vollständige Auswertung eines Booleschen Ausdrucks. Das bedeutet, dass jeder Operand eines Booleschen Ausdrucks, der mit den Operatoren and und or gebildet wird, garantiert ausgewertet wird, auch wenn das Ergebnis des gesamtes Ausdrucks bereits feststeht.

Im Status {$B-} generiert der Compiler Code für die Kurzschlussauswertung Boolescher Ausdrücke, d. h. die Auswertung wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht (die Auswertung erfolgt immer von links nach rechts).
Daran lag' s. [/edit]
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
Antwort Antwort
Seite 2 von 3     12 3      


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 05:09 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