AGB  ·  Datenschutz  ·  Impressum  







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

Array konstant?

Ein Thema von Skyrunner2 · begonnen am 27. Feb 2005 · letzter Beitrag vom 27. Feb 2005
Antwort Antwort
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#1

Array konstant?

  Alt 27. Feb 2005, 14:52
hallo,
Ich Programiere ein Labyrinth, und hab's momentan wie folgt implimentiert:

Delphi-Quellcode:
const constXSize=10;
      constYSize=10;

Type TMaze=class
        Private
           TargetCanvas:TCanvas;
           MazeMemImg:array[0..constXSize, 0..constYSize] of Record
                                                                N,E,S,W:boolean;
                                                             end;

        Public
           constructor Create(width, height : Integer);

           
        end;
Problem: ConstxSize und constYSize sind KOnstant und ich kann (soweit ich weiß) nicht die constanten ändern wenn ich den typ via constructor initialisiere...


also was ich suche ist eigentlich ein dynamisches array. so wie mann es z.b. auch in TStrings findet. mit [Zeile][Zeichen].

doch wie kann ich ein solches 2 dimensionales, dynamisches array erstellen?
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Array konstant?

  Alt 27. Feb 2005, 15:04
moin,

Dynamische Arrays:

Deklaration:D2Array: array of array of {beliebiger Typ}; Die Größe wird mit setlength geregelt:setlength( D2Array, countX, countY ); Zugriff:x := D2Array[X,Y]; // wobei der Index immer von 0 bis length(D2Array)-1 (=high(D2Array) läuft und zur Vollständigkeit noch:
man kann auch dynamische Arrays mit unterschiedlicher Zeilenlänge erzeugen. z.B:
Delphi-Quellcode:
setlength( D2Array, 3 ); // drei "Zeilen"
setlength( D2Array[0], 5 ); // die erste Zeile hat 5 Elemente
setlength( D2Array[1], 3 ); // die zweite Zeile hat 3 Elemente
setlength( D2Array[2], 1 ); // die dritte Zeile hat 1 Element
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Array konstant?

  Alt 27. Feb 2005, 15:25
WOW!!!

DANKE für diese wirklich sehr sehr schnelle Antwort.

Hab eine frage zum beispiel:
Delphi-Quellcode:
setlength( D2Array, 3 ); // drei "Zeilen"
setlength( D2Array[0], 5 ); // die erste Zeile hat 5 Elemente
setlength( D2Array[1], 3 ); // die zweite Zeile hat 3 Elemente
setlength( D2Array[2], 1 ); // die dritte Zeile hat 1 Element
wären das nicht 4 "Zeilen" da, [0] bis [3].. ?

und eine weitere frage:

besteht eine funktion welche die größ des arrays ausgiebt? (wie ubound(Array) & lbound(Array) in VBS(Upper bzw Lower bound))
also Groesse( setlength(array, 5) ) -> 5
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#4

Re: Array konstant?

  Alt 27. Feb 2005, 15:29
1. Nein. Es wird schon angegeben, wieviele Zeilen es insgesamt gibt. Gezählt wird trotzdem von 0 an. Also 0-2 = 3 Zeilen

2. Schau mal unter Delphi-Referenz durchsuchenhigh, Delphi-Referenz durchsuchenlow und Delphi-Referenz durchsuchenlength

Die Gesamtgröße ist Length

High und Low geben die Entfernungen zur 0 an (wenn man ein Array [-5] hat z.B. is low = 5)
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#5

Re: Array konstant?

  Alt 27. Feb 2005, 15:34
Zitat von Skyrunner2:
wären das nicht 4 "Zeilen" da, [0] bis [3].. ?
nein weil die Länge des Arrays auf 3 gesetzt wird, d.h. es geht dann von 0 bis 2
Zitat von Skyrunner2:
und eine weitere frage:

besteht eine funktion welche die größ des arrays ausgiebt? (wie ubound(Array) & lbound(Array) in VBS(Upper bzw Lower bound))
also Groesse( setlength(array, 5) ) -> 5
Das erledigt Length bzw. High und Low:

Delphi-Quellcode:
var Arr: array[0..2, 1..5] of Integer;

[...]
  
  Length(Arr) -> 3
  High(Arr) -> 2
  Low(Arr) -> 0

  Length(Arr[0]) -> 5
  Length(Arr[1]) -> 5
  High(Arr[0]) -> 5
  Low(Arr[0]) -> 1


[Edit]
Zu langsam!! hätte ich nicht eigentlich von der DP darauf aufmerksam gemacht werden sollen?
[/Edit]
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Array konstant?

  Alt 27. Feb 2005, 15:35
mit setlength() legst du die Anzahl der Elemente fest; und mit length() fragst du sie wieder ab: d.h. das Array läuft immer von 0 bis length()-1. wobei du statt length()-1 auch high() verwenden kannst.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Array konstant?

  Alt 27. Feb 2005, 15:49
wow echt super! sind ja wirklich viel leute die helfen! DANKE DANKE DANKE!

Ich habe allerdings ein problem mit setlenght():

---------------------------
Mazebacktracker
---------------------------
Access violation at address 00404A49 in module 'MazeBacktracker.exe'. Read of address 6D726F42.
---------------------------
OK
---------------------------



Delphi-Quellcode:
unit MazeClass;

interface

uses Graphics;

Type TMaze=class
        Private
           TargetCanvas:TCanvas;
           MazeMemImg: array of array of Record
                                                    N,E,S,W:boolean;
                                                 end;

        Public
           constructor Create;
        end;


implementation


constructor TMaze.Create;
begin
    setlength(MazeMemImg,10,10);
end;

end.
und:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var test:TMaze;

begin
test.Create();
end;
ich bekomme die oben stehende fehler meldung wenn die prozedure button1click aufgerufen wird.
was habe ich falsch gemacht?
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Array konstant?

  Alt 27. Feb 2005, 16:05
Zitat:
test.Create();
ist falsch ... einer der leidigen Fehler die einem öftermal passieren und die man erst als letztes findet
es müsste lauten:
test := tMaze.Create()
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Array konstant?

  Alt 27. Feb 2005, 16:08
ahh danke!


ist das erstem mal das ich mit mit klassen beschäftige, und selber eine schribe..

freu mich schon über was auch mich zukommen wird (an fehler meldungen)


Nochaml ein SUPER GROßES DANKE!!!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:12 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