AGB  ·  Datenschutz  ·  Impressum  







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

array addieren

Ein Thema von trifid · begonnen am 7. Okt 2004 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#1

array addieren

  Alt 7. Okt 2004, 17:02
Wie kann man 2 array einfach addieren?
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
   var a : array[1..3] of integer;
   var b : array[1..2] of integer;
   var c : array[1..5] of integer;
begin
   a[1] := 1;
   a[2] := 2;
   a[3] := 3;

   b[1] := 5;
   b[2] := 9;

   c := a + b; // in c sollte dann [1,2,3,5,9] stehen
end;
a) ich möchte keine Schleifen verwenden
Delphi-Quellcode:
for n := 0 to High (a) do
   c[n] := a[n];
for n := High (a) to High (a) + High (c) do
   c[n] := b[n];
b) Array a und Array b können auch ein dyn.Array sein
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
   var a : array of integer;
   var b : array of integer;
   var c : array of integer;
begin
   SetLength (a, 3);
   a[0] := 1;
   a[1] := 2;
   a[2] := 3;

   SetLength (b, 2);
   b[0] := 5;
   b[1] := 9;

   SetLength (c, High (a) + High (b));
   c := a + b; // in c sollte dann [1,2,3,5,9] stehen
end;
irgendeiner eine Idee ?
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#2

Re: array addieren

  Alt 7. Okt 2004, 18:33
Tja das geht nur, wenn man Operatoren überladen kann! Das ging zumindesten vor D7 nicht, aber wie das jetzt mit dem .Net Kram aussieht weiss ich nicht so genau!

Üblich ist ja immer eine "Add" Funktion in einer Vektor Klasse zu implementieren, aber ganz ohne Schleife kommst du nicht aus, es sei denn du benutzt 128 Bit Vektoren aus dem SSE Befehlssatz. Die haben aber max. 4 Komponenten!
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#3

Re: array addieren

  Alt 7. Okt 2004, 19:01
Mit "Move" kannst du die Daten des einen Arrays ohne Schleifen in ein zweites Array kopieren. In der Form c := a + b geht es aber nicht, wie schon gesagt (bzw. nur in Delphi8).
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#4

Re: array addieren

  Alt 7. Okt 2004, 19:44
Könnte man nicht eine Klasse mit freepascal (Operatorüberladung möglich) erstellen, die das kann und dann in Delphi einbinden? Würde mir persönlich auch interessieren wie das geht.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: array addieren

  Alt 7. Okt 2004, 19:47
Wie soll das gehen? Ist doch wurscht, ob du die Klasse mit Delphi, der Freepascal-IDE oder mit Notepad schreibst. Entscheidend ist, ob der Compiler das auch versteht, was du geschrieben hast. Und der Delphi-Compiler kennt keine überladenen Operatoren.
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#6

Re: array addieren

  Alt 7. Okt 2004, 20:07
Ich ging ja davon aus, dass ich die Klasse mit freepascal compiliere und sozusagen das "dcu"-File, falls so etwas in der Art existier, in mein Delphi Projekt einbinde. Ob das in dieser Form oder anders geht ist meine Frage. Notfalls kann man sicherlich eine DLL erstellen. Dass müsste ja dann schon gehen.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: array addieren

  Alt 7. Okt 2004, 20:15
Wenn es in Summe nacher nicht mehr als 256 Element sind, dann arbeite doch mit Sets! Dann gehts auch mit dem +-Operator!
Delphi-Quellcode:
type
  TSet = set of 0..255;
.
.
var
  s1, s2, s3: TSet;
.
.
  s1 := [1, 3, 5];
  s2 := [1, 2, 4];
  s3 := s1 + s2;
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#8

Re: array addieren

  Alt 7. Okt 2004, 20:22
Zitat von pajofego:
Ich ging ja davon aus, dass ich die Klasse mit freepascal compiliere und sozusagen das "dcu"-File, falls so etwas in der Art existier, in mein Delphi Projekt einbinde. Ob das in dieser Form oder anders geht ist meine Frage. Notfalls kann man sicherlich eine DLL erstellen. Dass müsste ja dann schon gehen.
Nicht in Delphi, denn Delphi kann keine Klassen in DLLs exportieren bzw. importieren. (Ok, kann man schon, aber nur mit viel Tricksereien).
Die arithmetischen Operatoren bleiben mit dem Delphi32-Compiler den Standard-Datentypen vorbehalten.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#9

Re: array addieren

  Alt 7. Okt 2004, 20:38
a) schleifen nehmen
b) delphi .net nehmen
c) ander sprache nehmen

d) sets können das mit gewissen (heftigen) einschränkungen, und sind auch noch dezent langsam
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#10

Re: array addieren

  Alt 7. Okt 2004, 21:02
Weitere Einschränkungen
Ich möchte keine TArrayKlasse bauen, weil dann kann ich gleich eine ObjectListe (Dictionary) verwenden.
Es soll nicht unter .net sein
nicht unter "freepascal"
Keine Mengen (TSet) hab auch schon daran gedacht meine Code umzustricken.
Aber es sind etliche mehrdimensionale Array's, der einfachheithalber habe ich es erst mal mit einen einfachen integer-array probiert
Operatoren überladen ala c++ geht halt nicht
soll als win32-Applikation laufen
>c) ander sprache nehmen
welche? kann nur Delphi - nein, aber der Aufwand ist zu groß
dynamische Arrays an irgendwelchen DLL's übergeben?
>d) sets können das mit gewissen (heftigen) einschränkungen, und sind auch noch dezent langsam
das auch noch

aber ich hab ein wenig rumgebastelt und auch etwas gefunden, it's magic
nur bekomme ich eine Speicherschutzverletzung und die Variablen werden überschrieben
Delphi-Quellcode:
type
   TTestArray = array of integer;

procedure TForm1.Button3Click(Sender: TObject);
   var a, b, c : TTestArray;

   var x, y, z : String;

   function MyCopyArray (Dest, Source, typeInfo : Pointer; Count:Integer): Pointer; assembler;
   asm
       PUSH Count

       CALL System.@CopyArray
   end;
begin
   SetLength (a, 3);
   a[0] := 1;
   a[1] := 2;
   a[2] := 3;

   SetLength (b, 3);
   b[0] := 5;
   b[1] := 9;

   SetLength (c, 3);

   x := 'abc';
   y := '123';
   z := '';
   
   MyCopyArray (@z, @x, TypeInfo(String), 5);

   MyCopyArray (Addr (c), Addr (b), TypeInfo(TTestArray), 2);
   // MyCopyArray (@c, @b, TypeInfo(TTestArray), 2);
   // MyCopyArray (@c[0], @b[0], TypeInfo(TTestArray), 2);
end;
Für die strings funktioniert es, aber nicht für die Array's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:39 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