Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array länge verändern (https://www.delphipraxis.net/72151-array-laenge-veraendern.html)

Murcielago82 26. Jun 2006 13:15


Array länge verändern
 
Hallo, ich will die länge eines arrays erst in einer Procedure setzen.


Delphi-Quellcode:
procedure zahlsetzen_generieren(i,j : integer;StringGrid1:TStringGrid);

VAR zeiger,k,zahl,wo:integer;                              
möglichkeit : array [0..zeiger] of integer;   //Zeiger soll erst in der procedur gesetzt werden???
geprüft: boolean;

procedure prüfen();
  begin
  geprüft:= false;
  geprüft:= check_zeile(i,zahl);
  if geprüft = false then
      begin
        geprüft:=check_spalte(j,zahl);          
        if geprüft = false then
          begin
            geprüft:=check_3x3(zahl,i,j);            
            if geprüft = false then                      
            begin
              exit;
            end;
          end;
        end;
  end;

begin
  zeiger:=0;
  for k:=0 to 9 do
    begin
    prüfen();
    if geprüft = false then
      begin
      möglichkeit[zeiger]:= k;
      inc(zeiger);                 //Hier sollte Zeiger immer erhöht werden wenn zulässig
      end;
    end;
end;
Leider bekomme ich immer ine Fehlermeldung wenn ich oben das array erstelle. Ist sowas überhaupt möglich was ich vorhabe?
Gruss

pacman1986 26. Jun 2006 13:20

Re: Array länge verändern
 
seh dich nach dynamischen arrays um die werden dann so deklariert

Delphi-Quellcode:
möglichkeiten : array of integer;
und wenn du die größe setzt:

Delphi-Quellcode:
setlength(moeglichkeiten,2);
das array begin bei 0 also -> 0,1 sind die array elemete bei diesem beispiel

Angel4585 26. Jun 2006 13:22

Re: Array länge verändern
 
Delphi-Quellcode:
procedure zahlsetzen_generieren(i,j : integer;StringGrid1:TStringGrid);

VAR zeiger,k,zahl,wo:integer;                              
möglichkeit : array of integer;   //Zeiger soll erst in der procedur gesetzt werden??? 
geprüft: boolean;

procedure prüfen();
  begin
  geprüft:= false;
  geprüft:= check_zeile(i,zahl);
  if geprüft = false then
      begin
        geprüft:=check_spalte(j,zahl);          
        if geprüft = false then
          begin
            geprüft:=check_3x3(zahl,i,j);            
            if geprüft = false then                      
            begin
              exit;
            end;
          end;
        end;
  end;

begin
  zeiger:=0;
  for k:=0 to 9 do
    begin
    prüfen();
    if geprüft = false then
      begin
      SetLength(möglichkeit,Succ(zeiger));
      möglichkeit[zeiger]:= k;
      inc(zeiger);                 //Hier sollte Zeiger immer erhöht werden wenn zulässig
      end;
    end;
end;
So sollte es gehn, aber ob die variabl "Möglichkeit" zulässig ist denk ich nicht ;)

pacman1986 26. Jun 2006 13:22

Re: Array länge verändern
 
:oops: ups natürlich oe net ö :D

Avatar 26. Jun 2006 13:23

Re: Array länge verändern
 
Hi Murcielago82.

Dafür musst Du eine dynamische Array-Variabl definieren und dann die Länge zuweisen. Das sieht dann so aus:

Delphi-Quellcode:
var
  xMoeglichkeit: Array of Integer;

begin
  SetLength(xMoeglichkeit, iAnzahl);
  ...
PS: Zeiger würd ich nie eine Variable nennen, es sei denn, es ist wirklich ein Pointer ;)

PPS: och nö. das geht viel zu schnell hier ...

Murcielago82 26. Jun 2006 13:28

Re: Array länge verändern
 
Klasse vielen Dank!!!
Zitat:

SetLength(möglichkeit,Succ(zeiger));
Was bedeuted Succ ??

Avatar 26. Jun 2006 13:31

Re: Array länge verändern
 
Da zitiere ich doch mal aus der allesumfassenden Hilfe die man gut über F1 erreichen kann:

Zitat:

Die Funktion gibt den Nachfolger eines Arguments zurück.

Murcielago82 26. Jun 2006 13:35

Re: Array länge verändern
 
und das bedeuted? In Der Hilfe steht n+1 also wäre es hier zeiger +1?

Avatar 26. Jun 2006 13:50

Re: Array länge verändern
 
Richtig, das heißt "einen mehr als". pred(x) steht übrigens für "einen weniger als X". Beides kann auch zusammen mit high(X) und low(X) für Enum-Typen (Aufzählungstypen) verwendet werden. Ganz praktisch, um den Überblick zu behalten und nicht lange 2+i-(i+1)+(i*i-1)+6... Würmer zu bekommen.

Christian Seehase 26. Jun 2006 16:00

Re: Array länge verändern
 
Moin Martin,

Zitat:

Zitat von Angel4585
So sollte es gehn, aber ob die variabl "Möglichkeit" zulässig ist denk ich nicht ;-)

in D2006 kannst Du Umlaute, oder Accents, oder ß... in Bezeichnernamen verwenden (in D2005 weiss ich es nicht)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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