AGB  ·  Datenschutz  ·  Impressum  







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

Arrays vergleichen

Ein Thema von nailor · begonnen am 15. Jan 2003 · letzter Beitrag vom 5. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von nailor
nailor

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

Arrays vergleichen

  Alt 15. Jan 2003, 20:15
1. warum geht: const a: array[0..0] = (1) aber const a: array[0..0] = 1 gibt eine Access Violation? Und const a: array[0] = 1 geht erst gar nicht?


2. kann man irgendwie
Delphi-Quellcode:
const a: array[0..0] = (1); b: array[0..0] = (1);
...
if a = b then...
in der Art zum laufen kriegen?
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
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 15. Jan 2003, 20:18
Hi,

versuchs mal damit:
if a[0] = b[0] then Exit; //Wenn der erste Datensatz vom a-Array, gleich den ersten Datensatz vom b-Arrays ist, dann spring aus der Prozedur raus Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 15. Jan 2003, 20:19
Hi Nailor,

Nr. 1: Dies ist korrekte Pascal-Syntax, weil die in Klammern angegebene 1 dem ersten Item 1 zuweist (und es gibt nur ein Item).

Nr. 2: Ich bin mir nicht ganz sicher, wie Arrays unter Delphi intern behandlet werden, wenn Arrays aber wie unter C++ eigentlich Pointer sind, dann verlegst du mit dieser Anweisung dein Array an die Speicherstelle 1, das führt zur Access Violation.

Nr 3: Arrays in ObjectPascal müssen einen oberen und unteren Index haben-

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 15. Jan 2003, 20:22
Hi,

Konstanten-Array-Values müssen immer in Klammern stehen. Falls ich mich nicht irre.

Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 15. Jan 2003, 20:24
Und zum letzten. Delphi erkennt nicht, dass Array a und Array b vom gleichen Typ sind. Du musst erst einen einheitlichen Typ deklarieren und diesen nutzen. Dann kannst Du a mit b vergleichen.
Delphi-Quellcode:
type
  TNullNullArray = array[0..0] of Byte;

const
  a: TNullNullArray = (1);
  b: TNullNullArray = (1);
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6
  Alt 15. Jan 2003, 20:30
@sakura:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TType = array[0..3] of byte;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a: TType = (1,2,3,4);
  b: TType = (1,2,3,4);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if a = b then close;
end;

end.
--> [Error] Unit1.pas(31): Operator not applicable to this operand type

@Daniel: Das kann ich selber, aber dafür bin ich zu faul. Ich will eine einzige Abfrage, um zu wissen, ob die Dinger gleich sind.[/quote]
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 sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 15. Jan 2003, 20:40
Ich falle immer wieder drauf rein Aus der Delphi Hilfe
Delphi-Quellcode:
function Equal(var Source, Dest; Size: Integer): Boolean;

type
  TBytes = array[0..MaxInt - 1] of Byte;
var
  N: Integer;
begin
  N := 0;
  while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do
    Inc(N);
  Equal := N = Size;
end;
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#8
  Alt 15. Jan 2003, 20:40
Zitat von Nailor:
@Daniel: Das kann ich selber, aber dafür bin ich zu faul. Ich will eine einzige Abfrage, um zu wissen, ob die Dinger gleich sind.
Delphi-Quellcode:
var
  MyVar: Integer;
Delphi-Quellcode:
begin
  for i := 0 to MaxArray -1 do
  begin
    if a[i] = b[i] then MyVar := MyVar +1;
  end;
  if MyVar = MaxArray -1 then Exit;
end;
Eine Abfrage, ob alle gleich sind.
Meinst Du sowas?

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#9
  Alt 15. Jan 2003, 20:54
So ähnlich hab ich das bis jetzt auch gemacht, nur hab ich mich gefragt, ob ich nicht irgendwie blöd bin, weil ich keine zwei arrays miteinander verglichen bekomme. Aber anscheinend geht das gar nicht so wie ich gedacht habe, dass es irgendwie gehen muss.
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 Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#10
  Alt 15. Jan 2003, 22:37
Es geht aber auch einfacher über CompareMem (vorrausgesetzt a und b sind vom selben Typ):

if CompareMem(@a, @b, SizeOf(a)) then ShowMessage('Sind ident');
Manuel Pöter
  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 17:31 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