Autor |
Beitrag |
steppenwolf
      
Beiträge: 38
|
Verfasst: Di 14.06.05 15:14
Hallo allerseits,
ich dreh am Rad: Ich soll eine 'Wasseruhr' programmieren, wobei die Anzahl der Ziffern variabel sein soll. Außerdem soll mit der linken Zahl begonnen werden zu zählen.
Ich komme mit einer Doppelschleife und einem eindimensionalen Array einfach nicht hin, da ja nicht alle Kombinationen erfaßt werde. Für Hinweise vielen Dank im Voraus.
Auf bald ...
steppenwolf.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 14.06.05 15:18
Wenn du mir erklärst, was nochmal eine 'Wasseruhr' ist, kann ich vielleicht helfen 
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 14.06.05 15:46
|
|
arj
      
Beiträge: 378
Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
|
Verfasst: Di 14.06.05 16:28
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 14.06.05 16:42
@steppenwolf: wie wäre es mit ein wenig code, damit auch wir es verstehen ?
|
|
steppenwolf 
      
Beiträge: 38
|
Verfasst: Di 14.06.05 17:25
Hallo allerseits,
sorry für meine etwas abstrakte Darstellung und Danke für die bisherigen Infos.
Also, ich habe ein eindimensionales Array definiert und möchte alle Varianten durchzählen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for i := 1 to Stellenzahl do Wasseruhr [i] := 0;
for i := 1 to Stellenzahl do begin for j := 0 to 9 do begin Wasseruhr [i] := j; end; end; |
Problem ist, daß nach dem Durchlauf der ersten Stelle diese ja bei 9 'stehenbleibt'. Bei einer dreistelligen Anzahl würden nur dreißig Durchläufe stattfinden anstatt der 999 (bzw. 1000).
Auf bald ...
steppenwolf.
Moderiert von Christian S.: Delphi-Tags hinzugefügt.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 14.06.05 17:28
Wenn du jede Stelle separat behandelst kriegst du das nicht mit einer Doppelschleife hin.
5 Stellen => 10*10*10*10*10 Werte => Du brauchst 5 verschachtelte Schleifen à 10 Durchläufen.
Machs mit Rekursionen, oder Iterativ wie arj. Int64 wäre zu empfehlen.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 19.06.05 13:05
Oder, schreibe Dir eine Prozedur, die die Addition mit Überlauf beherrscht. Wenn ich das richtig verstanden habe:
Delphi-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: 25: 26: 27: 28: 29: 30:
| Procedure ArrayInc (aNumber : Array Of Integer); Var i : Integer;
Begin i := 0; While i< High (aNumber) do if aNumber[i]=9 Then Begin aNumber[i] := 0; inc (i); End Else begin inc (aNumber[i]); Exit; End; Raise Exception.Create('Überlauf!') End;
Procedure Test; Var aZaehler : Array [0..5] Of Integer;
Begin FillChar (aZaehler, SizeOf (aZaehler), 0); While True Do Begin ArrayInc (aZaehler); ZeigeZaehlerstand (aZaehler); End; End; |
Die Testroutine ruft den Addiere einfach auf, bis ein Überlauf eintritt ('999999' + 1)
|
|
steppenwolf 
      
Beiträge: 38
|
Verfasst: Do 07.07.05 16:51
Hallo allerseits,
vielen Dank für Eure Tips.
Ich habe eine Alternative gefunden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Anzahl_Buffer := (Potenz (10, Anzahl)); for i := 1 to Anzahl_Buffer - 1 do
begin Wasseruhr_String := IntToStr (i); Stringlaenge_Buffer := Length(Wasseruhr_String);
k := Anzahl; Position := Stringlaenge_Buffer;
for j := Stringlaenge_Buffer downto 1 do begin Wasseruhr [k] := StrToInt (Copy (Wasseruhr_String, Position, 1)); Dec (Position); Dec (k); end;
end; |
Auf bald ...
steppenwolf.
Moderiert von Gausi: Delphi-Tags hinzugefügt.
|
|
zemy
      
Beiträge: 207
Win XP Prof.
D7
|
Verfasst: Fr 08.07.05 09:58
Gut, nciht gerade elegant aber funktioniert .... Fasse deine Beiträge ,mit Delphiquellcode allerdings besser in Delphi-Tags, ist besser Lesbar..
_________________ LifeIsToShortToThinkAboutTheShortness
|
|