AGB  ·  Datenschutz  ·  Impressum  







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

denkfehler; array-> dynarray

Ein Thema von vsilverlord · begonnen am 8. Jan 2009 · letzter Beitrag vom 11. Jan 2009
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#21

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:25
Zitat von Klaus01:
Zitat von vsilverlord:
ach ja, die funktion mutiere hat ja nur den parameter tviech: [vereinfacht, aber im prinzip das gleiche]
Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  result.länge:=viech.länge+random(5);
  result.haare:=viech.haare+random(5);
end;
So ^ sollte es gehen.
Jetzt kennt der Compiler aber kein "result"!

Ich gebe mal zu bedenken: wenn du uns hier "bereinigten" Code zeigst, kann es sein, daß du den Fehler "wegbereinigst".
Uwe Raabe
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#22

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:31
Zitat von Uwe Raabe:
Zitat von Klaus01:
Zitat von vsilverlord:
ach ja, die funktion mutiere hat ja nur den parameter tviech: [vereinfacht, aber im prinzip das gleiche]
Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  result.länge:=viech.länge+random(5);
  result.haare:=viech.haare+random(5);
end;
So ^ sollte es gehen.
Jetzt kennt der Compiler aber kein "result"!

Ich gebe mal zu bedenken: wenn du uns hier "bereinigten" Code zeigst, kann es sein, daß du den Fehler "wegbereinigst".
Das kommt davon, copy und paste, und nicht darauf achten was denn kopiert wurde:

Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  viech.länge+random(5);
  viech.haare+random(5);
end;
Klaus
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#23

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:34
Zitat von Klaus01:

Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  viech.länge+random(5);
  viech.haare+random(5);
end;
örm, erzeugt das überhaupt code?
Da fehlt ne Zuweisung oder?

Wir sind nicht in C und haben soweit ich weiss keinen += operator

...warum funktionieren bei meinen delphicodes die highlights nich...
narf - not a real function
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#24

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:38
Zitat von HenKst:
Zitat von Klaus01:

Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  viech.länge+random(5);
  viech.haare+random(5);
end;
örm, erzeugt das überhaupt code?
Da fehlt ne Zuweisung oder?

Wir sind nicht in C und haben soweit ich weiss keinen += operator :D

...warum funktionieren bei meinen delphicodes die highlights nich...
ich sollte nach Hause gehen, bin sowas von daneben heute...

Delphi-Quellcode:
procedure mutiere(var viech:tviech);
begin
  viech.laenge:=viech.laenge+random(5);
  viech.haare:=viech.haare+random(5);
end;
und mein Delphi mag auch keine Umlaute.

Danke und Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#25

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 13:47
Zitat:
blaueviecher.viecher[blaueviecher.viecheranzahl]:= mutiere(blaueviecher.viecher[blaueviecher.viecheranzahl]);
Tut mir leid, ich habs falsch geschrieben. So wie oben sieht es aus.
Leider ist das gar nicht das Problem, es besteht immer noch. Das problem bei dem array war sowieso, dass er maximal 10000 viecher aufnehmen konnte. Wieviel viecher kann ich mit tobjectlist aufnehmen? Ich brauch es ja erst gar nicht versuchen, wenn da weniger reinpassen. Kann es sein, dass setlength alle vorhandenen felder um eins nach vorne verschiebt, sodass das feld 0 frei wird? so könnte ich mir vorstellen, dass das problem entsteht. [wäre aber trotzdem nicht logisch]
Gib es noch andere Mengentypen, die Sinn machen?
grüße, hoffnungslos frustriert
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#26

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 14:15
Zitat von vsilverlord:
viech1:
länge:1
haare:2
-- neuer timer durchgang
viech1:
länge:3
haare:5
viech2:
länge:3
haare:5
-- neuer timer durchgang
viech1:
länge:8
haare:1
viech2:
länge:8
haare:1
viech3:
länge:8
haare:1
huch den hab ich ja noch garnich gesehn^^


hmm das wäre genau was passiert wenn du nur pointer durch die Gegend schieben würdest...

Sicher das TViech ein record ist?

hab mir auch grade ein testprojekt gebaut und deinen code kopiert.
TViech als
record mit laenge und haare als integer declariert

funktioniert roblemlos(abgesehen davon das inc(viecheranzahl) und setlengh mit viecheranzahl+1 beim ersten durchlauf 2 elemente kreiert aber das hab ich vermutlich falsch initialisiert)...
narf - not a real function
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#27

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 14:24
Zitat von HenKst:
funktioniert roblemlos(abgesehen davon das inc(viecheranzahl) und setlengh mit viecheranzahl+1 beim ersten durchlauf 2 elemente kreiert aber das hab ich vermutlich falsch initialisiert)...
ne, dass ist genau das, wo ich eine mögliche Fehlerursache vermute, aber Deine Pointertheorie ist nicht von der Hand zu weisen.

@vsilverlord
gib' mal den Inhalt des Arrays vor und nach dem SetLength aus, dann müsstest Du doch sehen können, ob da verstrubbelt wird und wenn Du dann diese beiden Ausgaben neben die nach der Mutation legst, müsstest Du sehen können, wann der Inhalt durcheinanderkommt, bzw. hier ja unerwartet vereinheitlicht wird.
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#28

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 14:32
Ich hab jetzt als Initialisierung setlength mit 1 gemacht aber die viecheranzahl auf 0 gelassen, damit funktionierts wunderprächtig

Delphi-Quellcode:
  TViech = record
    laenge: integer;
    haare: integer;
  end;

  TViecherGruppe = record
    viecheranzahl: integer;
    viecher: array of TViech;
  end;
var
  Form2: TForm2;
  blaueviecher: TViecherGruppe;

implementation

{$R *.dfm}

Function mutiere(var viech:tviech): TViech;
begin
  result.laenge:=viech.laenge+random(5);
  result.haare:=viech.haare+random(5);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  i: integer;
begin
  blaueviecher.viecheranzahl:= 0;
  for i := 0 to 10000 do begin
    inc(blaueviecher.viecheranzahl);
    setlength(blaueviecher.viecher,blaueviecher.viecheranzahl+1); //der array ist 1 größer !!!ALS!!!^^ die benötigte anzahl
    blaueviecher.viecher[blaueviecher.viecheranzahl]:=
    blaueviecher.viecher[blaueviecher.viecheranzahl-1]; // hier sieht es so aus wie das letzte
    blaueviecher.viecher[blaueviecher.viecheranzahl]:=
    mutiere(blaueviecher.viecher[blaueviecher.viecheranzahl]) // hier wird es ein inviduum, da es mutiert
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  randomize;
  blaueviecher.viecheranzahl:= 0;
  setlength(blaueviecher.viecher, 1);
  blaueviecher.viecher[0].haare:= 0;
  blaueviecher.viecher[0].laenge:= 1;
end;
narf - not a real function
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#29

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 14:35
Ich hab mir das jetzt noch einmal mit test-echos durchgeschaut, und ihr hattet irgendwie recht.
in
blaueviecher.viecher[blaueviecher.viecheranzahl]:= mutiere(blaueviecher.viecher[blaueviecher.viecheranzahl]); geht er Alle felder des arrays durch und mutiert alle gleichzeitig. Bloß warum??? Wie kann ich das machen, dass er nur das eine, letzte Feld mutiert?
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#30

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 14:35
Also, mal ein kleines Prog draus gemacht, dass funzt:
Delphi-Quellcode:
Program Project1;
Uses sysutils;
Type
  tviech = Record
    laenge: Real;
    haare: Real;
  End;

  tblaueviecher = Record
    Viecher: Array of tviech;
  End;

Var
  blaueviecher: tblaueviecher;
  i: integer;

Procedure mutiere(Var viech: tviech);
Begin
  viech.laenge := viech.laenge + random(5);
  viech.haare := viech.haare + random(5);
End;
Begin
  Randomize;
  For i := 1 To 3 Do
  Begin
    setlength(blaueviecher.viecher, succ(length(blaueviecher.viecher))); //der array ist 1 größer wie die benötigte anzahl
    If length(blaueviecher.viecher) > 1 Then
      blaueviecher.viecher[high(blaueviecher.viecher)] := blaueviecher.viecher[high(blaueviecher.viecher)-1]; // hier sieht es so aus wie das letzte
    mutiere(blaueviecher.viecher[high(blaueviecher.viecher)]) // hier wird es ein inviduum, da es mutiert
  End;
End.
Ergebnisse nach dem Durchlauf:
blaueviecher.viecher[high(blaueviecher.viecher)]: (laenge:5; haare:3)
blaueviecher.viecher: ((laenge:0; haare:2), (laenge:2; haare:3), (laenge:5; haare:3))

Also denke ich, wird es nicht an Pointern liegen...

edit:
Die Posts haben sich Überschnitten, bei mir funzt auch Dein Prog ohne die Initialisierung.
Hast Du mal probiert in den Projektoptionen 'Optimierung' und 'Ausgerichtete Rekord-Felder' auszuschalten?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 18:41 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