![]() |
mengentypen in einer funktion und andere probleme
Hallo.
Ich versuche gerade, zwei array of string zu einem zusammenzufügen, was aus einem unerfindlichen Grund nicht funktioniert. Der Quelltext ist zu lang, hässlich und zu kompliziert, ich wüsste jetzt aber auch nicht was ich ändern könnte. Viel besser würde mir das gefallen, wenn ich mit einem Mengentypen in einer Funktion arbeiten könnte, das würde mit viel besser gefallen, zb vereinfacht so:
Delphi-Quellcode:
nur leider ist das ja unmöglich. Hier nun mein quelltext. Es gibt auf dem Formular nur 3 buttons, 2 textfelder und 1 memo. mit den ersten beiten buttons kann man strings (von edit1 und edit2) zu dem jeweiligen array of string hinzufügen (button 1 und 2). Mit button3 sollten die beiden array of string zusammengefügt werden und dann im memo1 ausgegeben werden.
function tform1.fusion(a,b:set of integer):set of integer;
begin result:=a+b end
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type thasenkolonie=record hasen:array of string; anzahl:integer; end; TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; Button2: TButton; Memo1: TMemo; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private function hasenkoloniefusion(a,b:thasenkolonie):thasenkolonie; public { Public-Deklarationen } end; var Form1: TForm1; keinohrhasen,mitohrhasen:thasenkolonie; gemischtehasen:thasenkolonie; implementation {$R *.dfm} function tform1.hasenkoloniefusion(a,b:thasenkolonie):thasenkolonie; var i:integer; begin setlength(result.hasen,a.anzahl+b.anzahl); for i:=0 to a.anzahl-1 do begin result.hasen[i]:=a.hasen[i]; end; for i:=a.anzahl to (a.anzahl+b.anzahl-1) do begin result.hasen[i]:=b.hasen[i-a.anzahl+1] end; end; procedure TForm1.Button1Click(Sender: TObject); begin setlength(keinohrhasen.hasen,length(keinohrhasen.hasen)+1); keinohrhasen.hasen[length(keinohrhasen.hasen)-1]:=edit1.Text; inc(keinohrhasen.anzahl); end; procedure TForm1.Button2Click(Sender: TObject); begin setlength(mitohrhasen.hasen,length(mitohrhasen.hasen)+1); mitohrhasen.hasen[length(mitohrhasen.hasen)-1]:=edit1.Text; inc(mitohrhasen.anzahl); end; procedure TForm1.Button3Click(Sender: TObject); var i:integer; begin gemischtehasen:= hasenkoloniefusion(mitohrhasen,keinohrhasen); for i:=1 to gemischtehasen.anzahl do begin memo1.Lines.Add(gemischtehasen.hasen[i]) end end; procedure TForm1.FormCreate(Sender: TObject); begin setlength(mitohrhasen.hasen,0); mitohrhasen.anzahl:=0; setlength(keinohrhasen.hasen,0); keinohrhasen.anzahl:=0; end; end. |
Re: mengentypen in einer funktion und andere probleme
Ein Array ist keine Menge ;). Und wieso speicherst Du die Anzahl mit im Record, die könntest Du doch bequem mittels Length(Array) abfragen?
|
Re: mengentypen in einer funktion und andere probleme
Die Klassen TList und TStringlist (und andere) haben bereits solche Methoden (TStringList.AddStrings bzw. TList.Assign). Vielleicht solltest Du fertige Klassen nehmen, anstatt das Rad neu zu erfinden.
|
Re: mengentypen in einer funktion und andere probleme
Just for Info:
eine Menge kann in Delphi max 256 Elemente haben und benötigt dann 8 Bytes Speicherplatz. Daher ist set of integer keine erlaubte Menge. set of char oder set of Byte ist die grösstmögliche Menge. Ein Menge ist ein komplexer Datentyp und muss daher immer mit dem Schlüsselwort type zuvor deklariert werden. |
Re: mengentypen in einer funktion und andere probleme
Hallo,
Zitat:
@vsilverlord Du musst bei den Indexwerten für Arrays etwas besser aufpassen. In der Fusion der Hasenkolonien unterschlägst du einen "keinohrhasen" und fügst einen imaginären Hasen hinzu. Dabei dürfte es allerdings zu einer Zugriffsverletzung kommen. Bei der Ausgabe im Memo liegt eine Indexverschiebung vor. Auch nach der Korrektur wirst du im Memo nichts finden. Die Hasen verraten ihrem Züchter die Gesamtzahl nicht... Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz