| Autor |
Beitrag |
Vaio
      
Beiträge: 32
Win XP Home
D7 Prof
|
Verfasst: Di 06.12.05 19:07
Als Hausaufgabe sollen wir einen Algorithmus erstellen. Und zwar wird in ein Editfeld eine Zahl eingegeben und die muss dann mal 1 genommen werden. Das Ergebnis der Multiplikation mal 2, und das Ergebnis mal 3 usw. bis 100. Ich habe wie vom Lehrer gesagt ein Memofeld erstellt wo die Zahlen aufgelistet werden sollen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var a:double; begin a:=StrToFloat(eda.text); ma.Lines.add(FloatToStr(a*1)); ma.Lines.add(FloatToStr(a*1*2)); end;
end. |
Das was ich oben reingeschrieben habe ist sinnlos, denn ich kann ja nicht immer das Ergebnis hinschreiben und dann mal 3, 4, 5, 6 usw. nehmen. Ich muss es wohl in eine While-Schleife packen, aber wie? Es kommt ja nicht drauf an wie groß der Wert bei a ist, sondern das er eben von 1 bis 100 multiplizieren soll. Aber ich muss ihm dann eine neue Variable geben, nur da ist mein Problem. Hilft mir bitte auf die Sprünge! Danke!
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 06.12.05 19:13
|
|
Vaio 
      
Beiträge: 32
Win XP Home
D7 Prof
|
Verfasst: Di 06.12.05 19:21
Habe das soweit mit der For-Schleife, aber bei mir kommen diese Fehler:
[Fehler] mAlgo.pas(32): FOR-Schleifenvariable muss von ordinalem Typ sein
[Fehler] mAlgo.pas(35): Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann
Ich kann mit ihnen nicht viel anfangen?
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 06.12.05 19:22
|
|
Vaio 
      
Beiträge: 32
Win XP Home
D7 Prof
|
Verfasst: Di 06.12.05 19:24
Jetzt läuft es, aber dort scheint irgendwo ein Fehler zu sein. Denn ich bekomme negative Zahlen raus. Z.b bei 2:
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
1932053504
1278945280
2004310016
2004189184
-288522240
-898433024
109641728
-2102132736
-1195114496
-522715136
862453760
-775946240
2076180480
-1853882368
1484783616
-1375731712
-1241513984
1409286144
738197504
-2147483648
-2147483648
Und danach kommen sehr viele Nullen! Egal welche Zahl ich in das Editfeld eingebe, es kommt immer das selbe raus!
Zuletzt bearbeitet von Vaio am Di 06.12.05 19:29, insgesamt 2-mal bearbeitet
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 06.12.05 19:25
x und i sind beides integer ?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 06.12.05 20:43
Hmm, sieht für mich ganz danach aus, als würde es hier zu nem Überlauf kommen. Integer kann halt nicht beliebig große Zahlen verarbeiten. Und bei Fakultät ist da recht schnell Schluss. Abhilfe schaffen da bis zu einem gewissen Grad vorszeichenlose Typen (z.B. Cardinal, wenn ich mich da jetzt recht erinnere), da schafft man dann ein paar Fakultäten mehr, oder man nimmt Int64.
Wenn das auch nicht ausreicht, muss man sich nach UNits umschauen, die auch sehr große Zahlen verarbeiten können...
_________________ We are, we were and will not be.
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 06.12.05 20:45
Vielleicht findest du die BigNum Unit hier im Delphi-Forum, ansonsten kannst du auch mal bei www.torry.net gucken, aber mit int64 solltest du einigermaßen weit kommen 
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Di 06.12.05 20:51
Nein 64 Bit reichen dafür auch nicht aus. So wie ich das sehe ist das ne Fakultätsberechnung. Könnt ja mal spaßeshalber in den Windowstaschenrechner schmeißen. Der sagt da nicht umsonst kann sehr lange dauern und Zahlen werden riesig. Da schon bei 2! (! heißt Fakultät) die Faktoren größer als zwei sind wird weit früher als beim 64. Schritt auch die Int64 hürde genommen hinzu kommt, dass die auch noch signed sind.
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 06.12.05 20:53
warum bekommen die denn so eine aufgabe, wenn schleifen schon ein problem sind ? 100! ist extrem groß ^^
|
|
Vaio 
      
Beiträge: 32
Win XP Home
D7 Prof
|
Verfasst: Mi 07.12.05 10:26
Ich habe die Lösung. Ich muss mich erst mal entschuldigen, ich habe euch die Aufgabe falsch erklärt. Und zwar soll soweit gerechnet werden, wie es im Editfeld eingegeben wurde. Z.b bei 6 muss der Rechner folgendes machen:
1*2=2
2*3=6
6*4=24
24*5=120
120*6=720
Und dazu habe ich auch eine Lösung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var a:double; var aneu:double; var e:double; begin a:=StrToFloat (eda.text); aneu:=1; e:=1; ma.Clear; while aneu < a do begin e:=e*(aneu+1); aneu:=aneu+1; ma.lines.add(FloatToStr(e)); end
end;
end. |
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 07.12.05 14:30
dann nimmst du statt hundert eben deine zahl 
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mi 07.12.05 14:35
Vaio hat folgendes geschrieben: | Delphi-Quelltext 1:
| var a:double; var aneu:double; var e:double; | |
Nur mal so nebenbei...
du kannst Variablen vom gleichen Typ auch gleich auf einmal deklarieren:
Delphi-Quelltext 1:
| var a, aneu, e : double; |
Gruß,
Miri
|
|