Structure an andere Structure kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... yo zugegeben,
ich bin gar nicht auf die idee gekommen, dass es nicht funktionieren könnte.
habe es eigentlich als selbstverständlich angesehen.

aber das es nicht funktioniert, hast du in deinem posting auch nicht angegeben.

...wie machen die sortier-routinen es denn dann... is ja ätzend.

...aber dann nimm doch den pointer von den beiden Arrays,
ermittele die gesamtlänge, und benutz CopyMemory()
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

Xaby hat geschrieben:Ach Kaeru, ist schon nicht so einfach mit dir, was.

Solltest weniger versuchen mich zu belehren als Code zu schreiben, der funktioniert. Denn soweit war ich doch auch schon.

Um eine Kopie des Arrays zu machen, muss man jede einzelne
Structure-Untervariable (1.Array) einer Structure-Untervariable (Kopie) zuweisen.

Und das ist ätzend.

Schreib ruhig mal den Code, in einen Editor:

Code: Alles auswählen

Structure teebeutel
  x.l
  y.l
EndStructure

Dim paul.teebeutel(100)
Dim heinz.teebeutel(100)

For x=0 To 100
  heinz(x)=paul(x)
Next
Und dann sag mir was passiert ...


>>
Ansatz, vielleicht macht mal ein einziges Array, was doppelt so groß ist.
Aber auch das würde nicht das Problem lösen, dass es keinen
CopyStructuredField(Quelle, Ziel)
Befehl gibt.

Jetzt verstehst du mich vielleicht :? :allright:
Und was ist mit

Code: Alles auswählen

  heinz()=paul() 
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Bild
Line 13 ist da wo Heinz und Paul sich treffen
Zuletzt geändert von Xaby am 04.12.2006 14:04, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@DeltaG

falls das funktionieren sollte, würde es aber lediglich den pointer
von heinz() auf paul() verbiegen, aber keine kopie anfertigen.
du hättest danach per heinz() und paul() zugriff auf denselben speicherbereich,
und der speicherbereich in dem heinz() erzeugt wurde liegt brach.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

Stimmt, leider:

Code: Alles auswählen

Structure teebeutel 
  x.l 
  y.l 
EndStructure 

Dim paul.teebeutel(100) 
Dim heinz.teebeutel(100) 

  Paul(1)\x=1
  heinz()=paul() 
  Paul(1)\x=2


Debug heinz(1)\x
gibt:
debugger hat geschrieben: 2
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

@Kaeru
...aber dann nimm doch den pointer von den beiden Arrays,
ermittele die gesamtlänge, und benutz CopyMemory()
Genau das meinte ich.

Das ist in meinen Augen nicht mehr Basic-like.

Denn Basic sollte selbsterklärend und einfach sein. Es sollte immer das machen, was man sich vorstellt.

Wieso kann der Compiler nicht einfach die Struktur und deren Inhalte kopieren? Wenn man es so angibt wie oben?

Übrigens

Code: Alles auswählen

swap heinz(x), paul(x)
Geht auch nicht. :freak:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Verstehe.

@DeltaG
(hast es ja selbst gemerkt :roll: )

Du meinst also, man kann sich sogar die Schleife sparen.

Ist cool. :praise:

Das war jetzt zu einfach :o

Und wie kann man nun einen Bereich kopieren?
Oder brauch mal sowas im wahren Leben gar nicht?
Ich weiß es nicht, ich komm auch ohne aus.
Ist nur die Frage, wann dann die GBs RAM voll sind :wink:

>> Aber nun kommt es!
Das richtige ergebnis der Wiederherstellung müsste lauten: 1
Denn zuerst stand in Paul eins drin, dann wurde angeblich der Inhalt von Paul in Heinz geschrieben.
Danach Paul auf zwei gesetzt.

Also müsste in Heinz die eins sein.

Aber was steht drin?

>_<
Kinder an die Macht http://scratch.mit.edu/
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

Vielleicht so:

Code: Alles auswählen

Structure teebeutel 
  x.l 
  y.l 
EndStructure 

Dim paul.teebeutel(100) 
Dim heinz.teebeutel(100) 
Dim dummy.teebeutel(100)

Paul(1)\x=1
Heinz(1)\x=2
Debug Paul(1)\x
Debug Heinz(1)\x

dummy()=Paul()
Paul()=Heinz()
Heinz()=dummy()

Debug Paul(1)\x
Debug Heinz(1)\x

Paul(1)\x=3
Heinz(1)\x=4

Debug Paul(1)\x
Debug Heinz(1)\x
debugger hat geschrieben:1
2
2
1
3
4
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Das war jetzt Swap?
Kinder an die Macht http://scratch.mit.edu/
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

Xaby hat geschrieben:Das war jetzt Swap?
Ja, ein Ersatz-Swap für dich.

Bei mir funktioniert Swap überigens.
Antworten