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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!