Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array mit einer schleife durchlaufen


Luncustaf - Mo 21.10.02 12:33
Titel: Array mit einer schleife durchlaufen
Hi,

hab hier nen array deklariert (das erste mal) hab nur mit der hilfe gearbeitet aber irgendwie steht da nichts brauchbares drinnen.

gibt nur ei nwirkliches beispiel und das ist so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var

    OrderDates: TArrayField;
    I: Integer;
begin
    for I := 0 to OrderDates.Size - 1 do
    begin
      if OrderDates.Fields[I].IsNull then Break;
      OrderDateListBox.Items.Add(OrderDates[I]);
    end;
end;


das problem ist aber das der array hier mit einem TArrayFiled initalisiert wird und ich das so geschrieben habe


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
MyArray : array[1..10] of String;

.
.
.
.
.

for i := 0 to MyArray.Size -1 do
begin


nur wenn ich das so mache dann kommt immer Rekord, Objekt oder Klassentyp erforderlich

nur kann ich damit nicht wirklich was anfangen :>

gr€€tz


Tino - Mo 21.10.02 12:55

Versuch es mal so:

Quelltext
1:
2:
3:
4:
5:
6:
var 
  MyArray : Array [1..10] Of String; 
Begin
  For i := Low (MyArray) To High (MyArray) Do 
    ;
End;

Gruß
TINO


Luncustaf - Mo 21.10.02 13:21

hmm ok thx

das hat funktioniert.

nun habe ich aber ein problem mit dem füllen von diesem array.

und zwar soll bei einer betimmten eingabe jweils ein feld von diesem array belegt werden

also beim ersten durchlauf einer schleife das erste feld beim zweiten durchlauf das zweite feld usw.

bei einer anderen eingabe sollen alle felder und deren inhalt dargestellt werden.

also wen nic hdei erste schleife 5x durchlaufen ahben sollen die ersten 5 felder belegt sein und bei der zweiten eingabe soll der inhalt der 5 felder dargestellt werden.

versteht das einer? :)

gr€€tz


JeanvanHees - Mo 21.10.02 13:40

:wink2:
Zitat:

also wen nic hdei erste schleife 5x durchlaufen ahben sollen die ersten 5 felder belegt sein und bei der zweiten eingabe soll der inhalt der 5 felder dargestellt werden.

:?!?:
Jetzt hol mal tief luft....und erzähl mal ruhig was du willst.
So wie du es jetzt umschreibst ist es ein bißchen chaotisch.


Luncustaf - Mo 21.10.02 13:57

ok sorry

hätte nochmal drüber lesen sollen bevor ich es abschicke.

also.

ich hab eine schleife in dieser schleife soll der array gefüllt werden.

wird diese schleife zb 5x durchlaufen, sollen die ersten 5 felder des array's belegt werden.

in der zweiten schleife sollen diese felder ausgelesen werden und ein "menü" erstellt werden

1. eintrag eins
2. eintrag zwei
3. eintrag drei
4. eintrag vier
5. eintrag fünf

dieses menü soll dynamisch nach der anzahl der felder erstellt werden die in dem array gefülltsind. also alle nachfolgenden die leer sind sollen ignoriert werden.
ich weis nicht ob das möglich ist


Quelltext
1:
MyArray : array[1..10] of String;                    


durch diese deklarierung sage ich doch das der array 10felder haben soll oder nicht?
also wenn nur bisz um feld 5 der array gefüllt wurde, soll das programm auch nur "menüeinträge" bis um 5ten feld bringen.

ich hoffe das ist nun etwas verständlicher :)

gruß Luncustaf

ps: mein code den ich bis hier hin habe


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
for i := 1 to 20
do begin
   writeln('1. array fuellen');
   writeln('3. neues Menue ausgeben');
   writeln('2. beenden');
   readln(a);
   if a = 1
   then begin
   MyArray[i] := 'Neuer Punkt';
   end;
   if a = 3
   then begin
        for x := Low (MyArray) to High (MyArray)
        do begin
           b := b +1;
           write(b);
           writeln(MyArray[i]);
           end;
   end;
   if a = 2
   then begin
        exit;
   end;
end;


Delete - Mo 21.10.02 14:00

Spring doch aus der Schleife raus, wenn du feststellst, dass ein Feld des Arrays leer ist. Wenn du es so füllst wie beschrieben und keine Leerstrings zwisczhendrin zu läßt, sollte es gehen.


Luncustaf - Mo 21.10.02 14:14

hmm

und wie frage ich ab ob das feld des arrays leer ist?
ich denk das ich dann ne andere schleife brauche


sowas in der art


Quelltext
1:
2:
while not MyArray[i] = ''
do begin



oder ?


JeanvanHees - Mo 21.10.02 14:22

Zitat:

und wie frage ich ab ob das feld des arrays leer ist?
ich denk das ich dann ne andere schleife brauche


sowas in der art


Quelltext
1:
2:
while not MyArray[i] = ' ' 
do begin


oder?


Ja, das geht....Ich mach das auch oft...aber wenn du die antwort schon haßt, brauchst du nicht zu fragen.
Jede frage die du selber beantwortest macht dir doppelt so schlau als jede frage die du beantwortet kriegst :mahn:

P.S: Ein gutes Delphi buch ist auch 'ne gute hilfe :wink:


Luncustaf - Mo 21.10.02 14:28

jo aber ich muss ja überprüfen ob meine antowort richtig ist :>
delphi buch liegt zuhause :>

wenn ich das so mache


dann kommt immer Operator ist auf den Operandentyp nicht anwendbar


gr€€tz Luncustaf


JeanvanHees - Mo 21.10.02 14:32

Mach mal den NOT weg und schreib <>
NOT geht NOT immer gut :D
Also <> auf den platz von =


Delete - Mo 21.10.02 14:33

Das geht bei mir:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.FormCreate(Sender: TObject);
var
  MyArray: array[0..9] of String;
  i: Integer;
begin
  for i := 0 to 4 do
    MyArray[i] := IntTostr(i);

  for i := 0 to High(MyArray) do
    if MyArray[i] <> '' then
      Listbox1.Items.Add(MyArray[i]);
end;


Luncustaf - Mo 21.10.02 14:40

hmm macht das nen unterschied wenn das keine anwendung sonder nen konsolen programm ist?

sollte eigentlich nicht oder?


also es läuft zwar aber irgendwie schreibt er in den array nichts rein :>


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i := 1 to 20
do begin
   writeln('1. array fuellen');
   writeln('3. neues Menue ausgeben');
   writeln('2. beenden');
   readln(a);
   if a = 1
   then begin
   MyArray[i] := 'Neuer Punkt';
   end;


geht das so überhaupt?

wenn ich nun 3x 1 drücke dann müssen doch die ersten 3 felder des array's gefüllt sein oder nicht?

vllt bin ich auch nen depalla :>

hehe


gr€€tz


wieczo - Mo 21.10.02 22:01

Das funzt und sieht schöner aus :wink: :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
b := 1;
repeat
   writeln('1. array fuellen');
   writeln('3. neues Menue ausgeben');
   writeln('2. beenden');
   readln(a);
   if a = 1 then
     begin
       MyArray[b] := 'Neuer Punkt';
       b := b +1
     end
   else
     if a = 3 then
       for x := Low (MyArray) to High (MyArray) do
         begin
           write(x);
           writeln(MyArray[x]);
         end
until a = 2;

Tschö Thomas


Luncustaf - Di 22.10.02 08:17

hi,

also das funktioniert soweit vielen danke für deine hilfe. nur mein problem ist noch ich initalisieren ja oben den Array und setze ihn auf 10 felder [1..10]

wenn nun aber die ersten beiden felder nur belegt sind gibt er das dort zwar korrekt aus aber er gibt dann auch die stellen 3 - 10 aus wo halt nichts dahinter steht und das soll vermieden werden :>

gr€€tz


Peter2002 - Di 22.10.02 09:36


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
b := 1; 
repeat 
   writeln('1. array fuellen'); 
   writeln('3. neues Menue ausgeben'); 
   writeln('2. beenden'); 
   readln(a); 
   if a = 1 then 
     begin 
       MyArray[b] := 'Neuer Punkt'; 
       b := b +1 
     end 
   else 
     if a = 3 then 
       for x := Low (MyArray) to High (MyArray) do 
         begin 
           if MyArray[x]<>'' then   // <---
           begin
             write(x); 
             writeln(MyArray[x]); 
           end;
         end; 
until a = 2;

Jetzt sollten die leeren Felder nicht angezeigt werden


Luncustaf - Di 22.10.02 10:12

hi,

er gibt trotzdem die nummer 3 - 10 aus

1 neuer punkt
2 neuer punkt
3
4
.
.
10

und das soll er nicht ich meine ich gebe die Zahl mit write(x) aus aber die is ja auch in der ifansweisung also hmm voll komisch :>


gr€€tz


Peter2002 - Di 22.10.02 12:55

Wenn die nicht verwendeten Felder wirklich leer sind, dann werden diese auch nicht ausgegeben.
Vielleicht solltest du dein Arry vorher leeren.

Quelltext
1:
2:
3:
4:
for x := Low (MyArray) to High (MyArray) do   MyArray[x] :='';
b := 1;
repeat
  ...


Luncustaf - Di 22.10.02 13:02

juhu :> danke man ich hab schon gedacht das es an dem zähler b liegt hab da nun die ganze zeit dran rumgebastelt nun funktioniert es aber vielen dank :>


gr€€tz


Peter2002 - Di 22.10.02 13:06

:think:
Gern geschehen