AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit For... to... do... und Integer Array
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit For... to... do... und Integer Array

Ein Thema von Benjin · begonnen am 17. Feb 2005 · letzter Beitrag vom 17. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benjin

Registriert seit: 1. Nov 2004
Ort: München
64 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 01:47
Hallo,

ich benutze folgende Funktion, um festzustellen ob sich ein Integer als Wert in einem Integerarray befindet:

Delphi-Quellcode:
function IsInArray(navindex:integer; const a:array of Integer):Boolean;
var
   p,i : integer;
begin
   for i := 0 to High(a) do
   begin
      p := a[i];
      if p = navindex then
      begin
         Result := true; //Treffer
         Exit;
      end;
   end;
   Result := false; // nix gefunden
end;
Die Funktion gibt entsprechend einen boolschen Wert zurück.

Dies funktioniert ganz wunderbar außer bei

IsInArray(0, [...]) oder IsInArray(0, [...])

Vermute das etwas mit der 0 und der For Schleife nicht hin haut,
komme aber nicht drauf.
Vermutlich ist es einfach zu spät...
..... - Kurt - .....
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 01:54
Änder mal den Code ein wenig:
Delphi-Quellcode:
function IsInArray(navindex:integer; const a:array of Integer):Boolean;
var
   i : integer;
begin
   for i := 0 to High(a) do
   begin
      if (a[i] = navindex) then
      begin
         Result := true; //Treffer
         Exit;
      end;
   end;
   Result := false; // nix gefunden
end;
Wahrscheinlich liegts an der Klammerung im if..then, ist aber nur eine Vermutung.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 02:38
Die Chose hat mich so gewurmt, daß ichs jetzt doch mal ausprobiert hab. Bei mir funktioniert dein Code einwandfrei.
Und - sorry Binärbaum - das mit der Klammersetzung war ein etwas seltsamer Tip. Was soll den diese Klammer an der Stelle verändern?
Zitat von Benjin:
IsInArray(0, [...]) oder IsInArray(0, [...])
Wo ist da der Unterschied?
Also wie gesagt, bei mir hat das auch so funktioniert. Egal ob die 0 drin war oder nicht, es wurde korrekt angezeigt.

Etwas kannst du an dem Code aber auf jeden Fall verändern:
Delphi-Quellcode:
function IsInArray(NavIndex : Integer; Const a : Array of Integer):Boolean;
Var
   i : Integer;
Begin
   For i := 0 to High(a) Do
   Begin
      If a[i] = NavIndex Then
      Begin
         Result := true; //Treffer
         Exit;
      End;
   End;
   Result := false; // nix gefunden
End;
Das p kannste dir nämlich sparen. Aber ansonsten würd ich das so lassen, wie es is. Ich konnte auf jeden Fall - wie ja bereits schon gesagt - weder im Code noch beim Testen nen Fehler feststellen.
Was genau funktioniert da bei dir denn nicht? Wird es generell falsch angezeigt, oder nur in einem Fall?
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Bart82

Registriert seit: 27. Aug 2004
24 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 08:04
for i := 0 to High(a) do Schreibe besser

for i := 1 to High(a) do Da Arrays in Delphi normalerweise von 1..x laufen und nicht wie z.B. bei C von 0..x


Edit: @ daniel: Sorry, mein Fehler - bin von nem Index beim String ausgegangen, da ist es so! Bei den Arrays hast du vollkommen recht
Carsten
Life's a piece of shit
when you look at it!
- Monty Python -
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#5

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 08:08
Zitat von Bart82:
Da Arrays in Delphi normalerweise von 1..x laufen und nicht wie z.B. bei C von 0..x
Seit wann den das? Dynamische Arrays laufen immer von 0 weg und bei statischen hat mans selbst in der Hand.

Wenn schon dann:
for i := Low(0) to High(a) do grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 10:59
Da hat sich jetzt aber auch der Fehlerteufel eingeschlichen!
Es sollte nicht
for i := Low(0) to High(a) do heißen, sondern
for i := Low(a) to High(a) do
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 11:05
Hoppala
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 11:12
Wenn, dann aber gleich richtig.
Die Funktion liefert auch gleich die Info, an welcher Position sich der Suchwert befindet.

Delphi-Quellcode:
function FindInArray(value : Integer; Const a : Array of Integer):Integer;
Var
   i : Integer;
Begin
   For i := Low(a) to High(a) Do
   Begin
      If a[i] = value Then
      Begin
         Result := i; //Treffer
         Exit;
      End;
   End;
   Result := -1; // nix gefunden
End;

function IsInArray(value : Integer; Const a : Array of Integer):Boolean;
begin
   Result := (FindInArray(value, a) <> -1);
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 11:19
Zitat von Benjin:
Dies funktioniert ganz wunderbar außer bei

IsInArray(0, [...]) oder IsInArray(0, [...])
[...] soll das ein leeres array sein?
  Mit Zitat antworten Zitat
opfer.der.genauigkeit

Registriert seit: 14. Feb 2005
66 Beiträge
 
#10

Re: Problem mit For... to... do... und Integer Array

  Alt 17. Feb 2005, 11:32
Darf man wissen, wie du deinen dynamischen Array erstellst?

SetLength(array, wert) ??

Da könnte der Hund vielleicht begraben sein.

Zitat:
procedure SetLength(var S; NewLength: Integer);

Beschreibung

S ist eine String- oder dynamische Array-Variable.

NewLength enthält die neue Anzahl der Zeichen oder Elemente in S.

Bei einem kurzen String ändert SetLength einfach das Längenbyte (das Zeichen an der Position S[0]) auf den angegebenen Wert. In diesem Fall muß mit NewLength ein Wert zwischen 0 und 255 angegeben werden.

Bei einer langen String- oder einer dynamischen Array-Variable weist SetLength dem in S referenzierten String oder Array die angegebene Länge zu. Dabei bleiben die Zeichen im String oder die Elemente im Array erhalten, jedoch ist der Inhalt des neu zugewiesenen Speicherbereichs nicht definiert. Eine Ausnahme stellt das Vergrößern der Länge von dynamischen Arrays dar, in dem die Elemente Typen sind, die initialisiert werden müssen (Strings, Varianten, Variant-Arrays oder Records, die solche Typen enthalten). Wenn S ein dynamisches Typen-Array ist, das initialisiert werden muß, wird der neu zugewiesene Platz auf 0 oder nil gesetzt.

Nach dem Aufruf von SetLength ist sichergestellt, daß S auf einen eindeutigen String oder ein eindeutiges Array zeigt (d.h. dessen Referenzzähler den Wert Eins hat). Ist nicht genug Speicher für die Variable vorhanden, wird eine EOutOfMemory-Exception ausgelöst.
Ist nur ne Idee.

//Edit: Weil

Delphi-Quellcode:
procedure TTestForm.FormCreate(Sender: TObject);
var
  b: array of byte;
  i: integer;
begin
  SetLength(b, 1); //
  i := b[0]; // i ist 0
  i := High(b); // hight -> 0 .. High gibt - 1 wenn SetLength(b, 0)

  for i := 0 to High(b) do begin
    ShowMessage('0');
  end;
end;
Stellen Sie sich bitte Zirkusmusik vor.
  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 09:43 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