AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit einer Stringlist und Pointern
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit einer Stringlist und Pointern

Ein Thema von Tormentor32 · begonnen am 11. Jan 2007 · letzter Beitrag vom 12. Jan 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 15:53
ok anders,

folgender Code:

Delphi-Quellcode:
procedure dummy(var x:integer);
begin
  x:=5;
end;

procedure testdummy;
var p:integer;
begin
  p:=3;
  dummy(p);
  //Na? Welchen Wert hat p an dieser Stelle?
end;
p ist an der Stelle 5. Das liegt an diesem "var" vor dem x in der Prozedurendeklaration.

Soweit klar?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#22

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 15:57
Zitat von Tormentor32:
Aber warum ändert sich P, wenn ich nur MyResult ändere? Das will mir irgendwie nicht in den Kopf gehen...
Delphi-Quellcode:
procedure TBauteilListe.GetPBauteil(ID: string);

  procedure Rekursiv(p: PBauteil;const Search: string; var MyResult: PBauteil);
  var i: integer;
  begin
    if p <> nil
      then
        if p^.ID = Search
          then
            MyResult := p
          else
        if length(p^.Next) > 0
          then
            for i := low(p^.next) to high(p^.next) do
              Rekursiv(p^.next[i],Search,p);
  end;

begin
  Rekursiv(FRoot,ID,FPBauteil); // FPBauteil ist das Ergebnis, ein Pointer, der Auf das gefundene bauteil zeigt, Private Variable Meiner Klasse, die Klasse sieht so aus:
end;
Ich blick da einfach nicht durch, warum das mit P so ist, und weiß nicht wie ich es anders machen kann, sitzt da jetzt seit nen paar stunden dran, es wäre nett, wenn du mir das umschreiben könntest...
Aber bei P steht KEIN var davor! Wie das mit dem var funktioniert ist mir klar, aber ich verstehe nicht, warum P (ich meine nicht MyResult) geändert wird, wenn ich sage MyResult := P!
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 16:14
Doch, doch, doch, doch!

p ist der dritte parameter. Also wird er zu MyResult im zweiten aufruf. In diesem zweiten Aufruf wird myresult geändert, damit wird p geändert, wenn die Funktion aus Rekursiv (2. Ebene) wieder zurückspringt nach Rekursiv1

geh nochmal gedanklich, dass durch, was ich dir in Post #19 geschrieben habe.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#24

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 16:18
OOHHH MANNNN ICH BIN SOO BLÖÖÖÖÖDDDDD!!!!!!!

Da muss natürlich MyResult hin! Jetzt klappt das schonmal mit dem Suchen und so! Mannometer ich könnte ich sitz stunden da dran und dann hab ich nur die Falsche Variable übergeben

DANKE DANKE DANKE
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 16:24
Und ich hab einfach nicht kapiert, was du mit dieser funktion willst. Aber jetzt sieht es schon etwas klarer aus.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#26

Re: Problem mit einer Stringlist und Pointern

  Alt 11. Jan 2007, 16:29
Dadurch, dass MyResult da nicht drinstand, war natürlich Chaos vorprogrammiert...

Jedenfalls nochmal vielen Dank, ich dachte, du wolltest mir die ganze Zeit sagen, dass durch


MyResult := P

Sich P verändert...
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#27

Re: Problem mit einer Stringlist und Pointern

  Alt 12. Jan 2007, 09:10
Schon wieder diese Pointer...

Aaaaalso

Ich habe die Einträge in meiner Liste jetzt so arrangiert:
Delphi-Quellcode:
  TBauteil = Record
    ID: string; // Der einzigartige name jedes Bauteils
    Typ: TBauteilTyp; // Der Typ des Bauteils (im moment noch unwichtig)
    Ebene: integer; // Die Ebene des Bauteils, also Root Ebene = 0 Nachfolger Ebene = 1 usw
    Parent,Next: Array of PBauteil // Die direkten nachfolgenden und vorherigen Elemente
  end;
Da ich mit meiner Liste einen Stromkreis darstellen möchte, habe ich mir Überlegt, dass sich Parallel und Reihenschaltungen ja auch verschachteln können z.B:
Code:

[root] ---> [root_child1] ---> [root_child1_child1] ---> [root_child1_child1_child1]
                          \--> [root_child1_child2] --/
In diesem Fall wird aber durchs rekursive Auflisten (logischerweise, ergeht ja alle einträge durch, folgendes Angezeigt
Zitat von Listbox:
root_child1_child1_child1
root_child1_child1
root_child1_child1_child1
root_child1_child2
root_child1
root
Ist ja auch klar, denn durch die Rekursive Suche wird root_child1_child1_child1 zweimal gefunden

Wie kann ich das umgehen?
Die Zweite Sache ist, wenn ich den Speicherplatz beim beenden rekursiv freigebe, dann kommts auch zu einem Problem, denn:
Code:
[s][root] ---> [root_child1] ---> [root_child1_child1] ---> [root_child1_child1_child1][/s]
[s]                         \--> [root_child1_child2] --/[/s]

[s][root] ---> [root_child1] ---> [root_child1_child1] ---> nil[/s]
[s]                         \--> [root_child1_child2] [color=#ff0000][b]--/[/b][/color] // der Zeigt dahin, wo nichts ist und es kracht, wenn er versucht auf dieses Element zuzugreifen, er weiß ja nicht, das es das Element nicht mehr gibt [/s]
Wie kann ich das verhindern?

Und nochwas? Wäre es sinnvoller, statt Parent: Array of string; lieber Parent: Array of PBauteil; zu nehmen? EDIT: hat sich erldedigt, nur noch das Erste

Vielen Dank schonmal für die Hilfe!

Richard
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Problem mit einer Stringlist und Pointern

  Alt 12. Jan 2007, 10:21
Man sollte halt immer vor dem Programmieren über das Konzept nachdenken. Aber ich programmiere auch häufig nur drauf los. Grade, wenn man nur etwas üben oder lernen möchte. Und wenn man eben nur lernt, sich vorher ein vollständiges Konzept zu erarbeiten.

Mit deinem Programmaufbau fällt mir auf Anhieb nicht viel ein. Du könntest einfach im nachhinein Duplikate löschen. Weis nicht ob das dir ausreicht.

Oder du machst es so wie in PSpice (und wahrscheinlich an allen anderen Netzberechnungsprogrammen auch):
Da hat jedes Element 4 ( oder 3) Kenngrößen:
1. Was ist es (Widerstand, Quelle, Spule)
2. welche Größe hat es (10V, 2ohm); wobei die Einheit anhand der Art des Elementes zu erkennen ist
3.1. Wo beginnt es
3.2. Wo endet es

zu3) Dabei beziehst du dich immer auf Netzknotenpunkte, die du einfach durchnummerierst

Ich hab irgendwo (noch in Turbo Pascal 6.0) ein Programm geschrieben, was einfache Pspice-Dateien einlesen konnte und berechnen konnte. Die Dateien hatten etwa folgenden Inhalt:
  • R 10 0 1 //Widerstand 10ohm von Knoten 0 zu Knoten 1
  • I 5 0 1 //Stromquelle 5A von Knoten 0 zu Knoten 1
  • R 2 1 2 //Widerstand 2ohm von Knoten 1 zu Knoten 2
usw.
Das konnte man dann ganz einfach in die Netzberechnungsgleichungen (bzw. Matrix) schreiben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#29

Re: Problem mit einer Stringlist und Pointern

  Alt 12. Jan 2007, 10:39
Ich hab das Problem schon gelöst: Beim Suchen wird geschaut, ob der Erste Vorgänger des Nachfolgers das momentane Element ist, und nur dann wird rekursiv wieder aufgerufen.
Zitat von sirius:
Man sollte halt immer vor dem Programmieren über das Konzept nachdenken. Aber ich programmiere auch häufig nur drauf los. Grade, wenn man nur etwas üben oder lernen möchte. Und wenn man eben nur lernt, sich vorher ein vollständiges Konzept zu erarbeiten.
Ja da hast du wohl recht, doch wenn ich jetzt das Konzept ändere, dann war ja alles für die Katz, außerdem finde ich die Idee, wie ich das gemacht habe gar nicht so schlecht... (hast du auch nicht gesagt)

naja jedenfalls Danke für die (nicht) Hilfe (diesmal habichs allein hingekriegt! )

Richard
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#30

Re: Problem mit einer Stringlist und Pointern

  Alt 12. Jan 2007, 10:44
Bist du sicher, dass das klappt. Was ist, wenn das Netz hinter [root_child1_child2] nicht gleich wieder zusammengeht, sondern erst noch ein paar andere Elemnte kommen...
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 12:53 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