Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie erkenne ich ob eine Zelle im array gefüllt ist? (https://www.delphipraxis.net/20540-wie-erkenne-ich-ob-eine-zelle-im-array-gefuellt-ist.html)

Michael Leyhe 19. Apr 2004 18:41


Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
HI

Ich habe bei einem Programm vollgendes Problem

Ich habe ein zweidimensionales statisches array of integer

Delphi-Quellcode:

beispiel :array [1..10,1..10] of integer;
Manche Zellen dieses Arrays werden nun befüllt und manche bleiben auch frei

Frage: Gibt es eine möglichkeit herauszufinden ob z.B. beispiel [7,7] eine Zahl enthällt oder ob ich dieser Zelle vorher noch nichts zugewiesen habe. :gruebel:

:dp: Danke schon im vorraus :-D

fauxx 19. Apr 2004 18:45

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Delphi-Quellcode:
var a: array [1..2, 1..2] of Integer;
begin
 a[1,1] := 3;
 showmessage(inttostr(a[1,1])); //gibt 3 aus...
 showmessage(inttostr(a[2,1])); //gibt bei mir (wieso auch immer) 201654148 aus
end;

Michael Leyhe 19. Apr 2004 18:52

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
HI

Naja so richtig hilft mir das auch nicht weiter, weil das programm dies erkennen soll.

wenn ich eine zelle des arrays auslesen will was nicht gefüllt ist erhalte ich eine 0. Das problem ist nur das das programm diese 0 nicht von einer 0 entscheidet die es dort in das array eingetragen hat. :?

Aber danke flaux

Pseudemys Nelsoni 19. Apr 2004 18:56

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
wie soll das auch unterschieden werden? irgendein wert ist immer drin, also "Nix" gibts nicht (denk ich mal)

Michael Leyhe 19. Apr 2004 18:57

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
HI

Das ist ja gerade das dumme, deswegen werde ich mir wohl irgendeine andere sehr umständliche methode ausdenken müssen :cry:

himitsu 19. Apr 2004 19:03

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
wenn du z.B. nur Werte zuweißt, die größer 0 sind, dann kanst du ja ganz am Anfang überall -1 reinschreiben und wenn dann der Wert immernoch -1 ist, dann ist noch nichts zugewiesen.



oder du machst 2 Array's

Delphi-Quellcode:
Werte: array [1..10,1..10] of integer;
Kontrolle: array [1..10,1..10] of boolean;
weist ebenfalls am Anfang dem Kontrolle-Array überall False zu

und sobald du einen Wert im Werte-Array änderst, machst du einfach den entsprechenden Wert im Kontrolle-Array auf True


das Zweite es geht auch damit
Delphi-Quellcode:
xyz: array [1..10,1..10] of Record
  Wert: integer;
  Kontrolle: boolean;
end;

neolithos 19. Apr 2004 19:05

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Überlege dir eine Zahl die du in dem Array nicht brauchst.
Und definiere alle Werte mit dieser Zahl als undefiniert.
Fülle das Array als ersten Schritt mit dieser speziellen Zahl. Und schon weist du immer welcher Wert noch nicht gesetzt wurde.

hboy 19. Apr 2004 19:08

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Zitat:

Zitat von fauxx
Delphi-Quellcode:
var a: array [1..2, 1..2] of Integer;
begin
 a[1,1] := 3;
 showmessage(inttostr(a[1,1])); //gibt 3 aus...
 showmessage(inttostr(a[2,1])); //gibt bei mir (wieso auch immer) 201654148 aus
end;

1. der Typ ist ja integer. Wenn man die Variable nicht initialisiert ( null setzt) ist da müll drin
2. wenn du nach zellen suchst brauchst man 2 schleifen,

Delphi-Quellcode:
for i :=0 to 10 do
begin
  for j :=0 to 10 do
  begin
    if a[i,j] =0 then showmessage('da is was');
  end;
end;
dazu musst du allerdings erst alle Zellen mit 0 füllen

Delphi-Quellcode:
for i :=0 to 10 do
begin
  for j :=0 to 10 do
  begin
     a[i,j]:=0;
  end;
end;
einfach ist es jedoch einen neuen typ zu definieren

Delphi-Quellcode:
type cell = record
  value: integer;
  used: boolean;
end;
wenn dir das zu arg ist kannst du auch Array of string[16] machn und prüfen ob a[i,j] <> ''. Das ist allerdings wieder problematischer da du erst prüfen musst ob <> '' ansonsten von string zu integer wandeln musst

peace

hboy

Edit: formatiert
und schwupp war einer schneller :drunken:

fauxx 19. Apr 2004 19:15

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
kann NIL eigentlich nur einem Zeiger zugewiesen werden oder auch einem Integer?

neolithos 19. Apr 2004 19:16

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
NIL kann nur Zeigern zugewiesen werden.

Intern:

NIL = 0 -> Null-Pointer

maximov 19. Apr 2004 22:28

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Für floats gibt es NAN -> Not A Number ...nur leiber für integers nicht!

Nimm doch low(Integer) -> das sollte eine sehr grosse negative Zahl sein, die man eher selten braucht!

dizzy 20. Apr 2004 01:27

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Ich hab das just mit so etwas gelöst, was es auch bei Java gibt. Nämlich einer Art "Wrapper-Klasse". Mit dem Code sieht man, dass es einfacher ist, als es zunächst klingt:
Delphi-Quellcode:
type
  TInteger = class(TObject)
  public
    value: Integer;
    constructor Create(val: Integer);
  end;


var
  IntArray: array[0..15] of TInteger;
.
.
.
constructor TInteger.Create(val: Integer);
begin
  inherited Create;
  value := val;
end;
Hat den Nachteil, dass man bei einer Wertzuweisung erst ein Objekt createn muss, aber wenn es gelöscht werden soll, so kann man es via:
Delphi-Quellcode:
FreeAndNil(IntArray[index]);
machen, und dann ergibt (auch wenn noch kein Objekt an "index" created wurde) ein "Assigned(IntArray[index])" = false. Und tädäää, schon weisst du, dass kein Wert drin ist.
Und das ist so traumhaft objektorientiert, dass jeder Lehrer/Prof. Freudensprünge machen müsste :lol:.


gruss,
dizzy

Michael Leyhe 20. Apr 2004 14:38

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
HI

Danke für die Antworten.
Habe mich entschieden ich füll das array vorher mit einer zahl und wenn die hinterher dort noch steht dann hat sich nichts geändert.

Nonsense 20. Apr 2004 15:19

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Delphi-Quellcode:
if ... <> nil then ...;

himitsu 20. Apr 2004 15:24

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
@Nonsense
es handelt sich hierbei um Integer und dazu gab es witeroben diesen Beitrag - soviel zu nil

Zitat:

Zitat von neolithos
NIL kann nur Zeigern zugewiesen werden.

Intern:

NIL = 0 -> Null-Pointer


Luckie 20. Apr 2004 15:28

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Zitat:

Zitat von fauxx
Delphi-Quellcode:
var a: array [1..2, 1..2] of Integer;
begin
 a[1,1] := 3;
 showmessage(inttostr(a[1,1])); //gibt 3 aus...
 showmessage(inttostr(a[2,1])); //gibt bei mir (wieso auch immer) 201654148 aus
end;

Da steht "Blödsinn" drin, weil a eine lokale Variable ist und diese nicht initialisiert werden. Folglich steht da irgendwas drin, was an dieser Stelle im Speicher zufällig für ein Wert steht / stand.

Nonsense 20. Apr 2004 15:28

Re: Wie erkenne ich ob eine Zelle im array gefüllt ist?
 
Zitat:

Zitat von himitsu
@Nonsense
es handelt sich hierbei um Integer und dazu gab es witeroben diesen Beitrag - soviel zu nil

Zitat:

Zitat von neolithos
NIL kann nur Zeigern zugewiesen werden.

Intern:

NIL = 0 -> Null-Pointer


Sorry, hatte mir den Beitrag ehrlich gesagt auch nicht richtig durchgelesen. Du hast natürlich recht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz