Autor Beitrag
Vaio
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 06.12.05 19:13 
ich denke das mal 1 kannst du dir schonmal schenken :lol:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Function Fakultaet(Zahl : integer): Integer;
begin
  If Zahl = 0 then
    result := 1
  else
    result := Zahl * Fakultaet(Zahl - 1);
end;


am besten machst du das mit ner for schleife:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
x := 1;
for i := 2 to 100 do
begin
  x := x * i;
  memo1.lines.add(inttostr(x)); 
end;
Vaio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 06.12.05 19:22 
x muss integer sein
Vaio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 06.12.05 19:25 
x und i sind beides integer ?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 06.12.05 20:53 
warum bekommen die denn so eine aufgabe, wenn schleifen schon ein problem sind ? 100! ist extrem groß ^^
Vaio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 07.12.05 14:30 
dann nimmst du statt hundert eben deine zahl ;)
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 07.12.05 14:35 
user profile iconVaio hat folgendes geschrieben:
ausblenden 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:

ausblenden Delphi-Quelltext
1:
var a, aneu, e : double;					


Gruß,
Miri