AGB  ·  Datenschutz  ·  Impressum  







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

Übergebenes Array: low() immer 0?

Ein Thema von Thanatos81 · begonnen am 5. Jul 2005 · letzter Beitrag vom 5. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Thanatos81
(Gast)

n/a Beiträge
 
#1

Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 11:31
Nur mal ne schnelle Frage: wenn ich einer Prozedur/Funktion ein Array übergebe, ergibt low immer 0?

Zur Verdeutlichung mal ein kurzes Beispiel:
Delphi-Quellcode:
procedure getChecksumme(var bc : array of Byte);
var i,cs : Byte;
begin
  cs := 0;
  for i := low(bc) to high(bc)-1 do
    begin
      if (i mod 2 = 0)
        then cs := cs + bc[i]
        else cs := cs + bc[i]*3;
    end;
  if (cs mod 10 = 0)
    then cs := 0
    else cs := 10 - (cs mod 10);
  bc[high(bc)] := cs;
end;
Der Proezdur übergebe ich ein array[1..13]of Byte. low spuckt mir aber 0 statt 1 raus. Wenn das immer so ist (auch wenn das Array mal mit 2, 12 oder weiss der Geier was anfängt) ist alles i.O. Ansonsten muss ich mir noch was anderes überlegen, damit jedes 2. Array-Elemente mit 3 multipliziert wird.

Schönen Dank im Voraus,
Thomas

P.S.: Bevor wer fragt, ja es geht um die Prüfsumme des EAN13
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 11:48
Hi,

Arrays werden meines Wissens immer nullrelativ übergeben.
Delphi-Hilfe "Offene Array-Parameter" als Bestätingung.

Grüße

Frank
Frank
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#3

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 11:52
Danke, genau so was in der Richtung wollte ich hören! Das passt mir jetzt super in den Kram *freu*
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 12:01
Ihr habt recht.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 12:10
Zitat von bigg:
Gegenbeispiel:
Das ist kein 'Offenes Array'.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#6

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 12:10
Das mit dem Gegenbeispiel war mir schon klar, das da bei low 1 und bei high 63 rauskommen muss. Aber da wurde es ja auch nicht an eine Methode übergeben.

Ne, das var in meinen Beispiel ist schon OK, ich will ja die letzte Zelle des Arrays ändern. Und ein const kann man soweit ich weis nicht ändern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 13:15
Gegenfrage: "Was interessiert dich das ?" Du solltest immer mit Low(), High() arbeiten, statt mit konstant 0.
Es gibt arrays di nicht mit Low() == 0 anfangen, zb.


Delphi-Quellcode:
type
  TMyArray = array[123...345] of Type;
  TMyArray = array[-123..+123] of Type;
  TMyArray = array[Boolean] of Type;
  TMyArray = array[red..green] of Type;
Low(), High() arbeiten aber auch ganz speziell mit solchen Spezial-Arrays die andere ordinale Indizees zulassen.

Gruß Hagen
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#8

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 13:25
Ich arbeite schon immer mit low und high, wenn ich nicht innerhalb einer Prozedur ein festes Array habe.

Aber bei meinem Beispiel geht es um das "i mod 2". Jedes zweite Element muss mit drei multipliziert werden. Nicht jedes Element mit einem durch zwei teilbaren Index. Da ist der Wert von low schon von Bedeutung.

Wenn low null oder gerade ist muss es
Delphi-Quellcode:
if (i mod 2 = 0)
  then cs := cs + bc[i]
  else cs := cs + bc[i]*3;
heissen.

Ansonsten wäre
Delphi-Quellcode:
if (i mod 2 = 0)
  then cs := cs + bc[i]*3
  else cs := cs + bc[i];
richtig.

Deswegen brauch ich halt einen Wert für low auf den ich mich verlassen kann.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 13:35
Zitat von Thanatos81:
Jedes zweite Element muss mit drei multipliziert werden. Nicht jedes Element mit einem durch zwei teilbaren Index.
if not Odd(i - Low(bc)) then Odd ist übrigens besser als der Versuch mit mod die Performance zu optimieren...
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Übergebenes Array: low() immer 0?

  Alt 5. Jul 2005, 13:54
Delphi-Quellcode:

var
  C: array[0..1] of Integer;
  I,J: Integer;
begin
  C[0] := 0;
  C[1] := 0;
  J := 0;
  for I := Low(Array) to High(Array) do
  begin
    Inc(C[J], Array[I]);
    J := (J + 1) and 1;
  end;
  Result := C[0] + C[1] * 3;
end;
Gruß hagen
  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:06 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