AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi mengentypen in einer funktion und andere probleme
Thema durchsuchen
Ansicht
Themen-Optionen

mengentypen in einer funktion und andere probleme

Ein Thema von vsilverlord · begonnen am 29. Nov 2008 · letzter Beitrag vom 29. Nov 2008
Antwort Antwort
Benutzerbild von vsilverlord
vsilverlord

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

mengentypen in einer funktion und andere probleme

  Alt 29. Nov 2008, 16:17
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:
function tform1.fusion(a,b:set of integer):set of integer;
begin
result:=a+b
end
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.
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.
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: mengentypen in einer funktion und andere probleme

  Alt 29. Nov 2008, 16:22
Ein Array ist keine Menge . Und wieso speicherst Du die Anzahl mit im Record, die könntest Du doch bequem mittels Length(Array) abfragen?
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
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: mengentypen in einer funktion und andere probleme

  Alt 29. Nov 2008, 17:32
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: mengentypen in einer funktion und andere probleme

  Alt 29. Nov 2008, 20:29
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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: mengentypen in einer funktion und andere probleme

  Alt 29. Nov 2008, 21:47
Hallo,

Zitat von sx2008:
eine Menge kann in Delphi max 256 Elemente haben und benötigt dann 8 Bytes Speicherplatz.
Das wären aber dann sehr große Bytes, von den "normalen" benötigt man 32 Stück.

@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
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:49 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