![]() |
natürliche, ungerade zahlen addieren
Also die zahl die ich brauche ist: alle natürlichen und ungeraden zahlen von 1 bis 489511 (jeweils eingeschlossen) ---> zusammen addiert. So jetzt habe ich eben gecodet und vom code her funktioniert es ja alles, nur das ergebnis kommt nicht hin.
Hier mein code (Auf der Form vorhanden sind Button1, Button2, Memo, Edit1):
Delphi-Quellcode:
Vorraussetzung Edit1.Text ist am anfang null.
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin i := 0; while strtoint(memo.Lines.Strings[memo.Lines.Count-1]) > 1 do begin memo.Lines.Add(inttostr(strtoint(memo.Lines.Strings[i])-2)); inc(i); end; end; procedure TForm1.Button2Click(Sender: TObject); var a: integer; result: longint; begin a := 0; while a < memo.Lines.Count do begin result := strtoint(memo.Lines.Strings[a]); edit1.Text := inttostr(strtoint(edit1.text)+result); inc(a); end; end; So, wo ist jetzt der fehler? Ich verstehe es einfach nicht, als ergebnis bekomme ich immer eine negative zahl!! |
Re: wo ist der fehler?
Warum nimmst du keine For-Schleife?
|
Re: wo ist der fehler?
Moin Amo,
bitte verpasse Deinem Beitrag doch noch einen aussagekräftigen Titel. Danke. ;-) |
Re: wo ist der fehler?
Ich glaube das ist schon im Ansatz falsch, zumindest ist für mich nicht ersichtlich, wo da ungerade Zahlen herkommen sollen.
Ich würde das so machen:
Delphi-Quellcode:
Außerdem hab ich den Verdacht, dass das irgendwie auch ohne Schleife geht..
function UngeradeZahlenaddiert(von,bis:Integer):Integer;
Var i:Integer; Begin if (von mod 2)=0 Then Inc(von); if (bis mod 2)=0 Then Dec(bis); i:=von; Result:=0; while i<bis do begin Result:=Result+i; Inc(i,2); end; end; |
Re: wo ist der fehler?
Edit: Hab mich verlesen. Aber so müsste es doch gehen:
Delphi-Quellcode:
for I := 1 to 489511 do
if I mod 2 = 1 then Zahl := Zahl + I; WriteLn(IntToStr(Zahl)); ReadLn; |
Re: wo ist der fehler?
Zitat:
![]() |
Re: wo ist der fehler?
Hai ihr,
ich habe hier auch noch einen Vorschlag der auf das ![]()
Delphi-Quellcode:
function OddlySum(const aFrom, aTo: Integer): Int64;
var i: Integer; blubb: Int64; begin blubb := 0; for i := aFrom to aTo do begin if (i and 1) = 1 then begin blubb := blubb + i; end; end; result := blubb; end; procedure TDemo_Form.Button1Click(Sender: TObject); begin ShowMessageFmt('%d', [OddlySum(1, 489511)]); end; [edit]Mal schnell Cardinal gegen Int64 getauscht ;-) |
Re: natürliche, ungerade zahlen addieren
@ ritchie: hmm, da kommt eine zahl raus (1923305872) aber die ist ja auch nicht korrekt.. also ich habe jetzt i und zahl als cardinal deklariert, ich hoffe das war richtig..
@ BenjaminH: Ich bin noch dabei das jetzt zu machen und zu testen^^ |
Re: natürliche, ungerade zahlen addieren
Man könnte auch Laufvariable von der zahl entkoppeln
Delphi-Quellcode:
for i = 0 to <ende-start div 2>+1
begin z = <start>+2*ende-1; ... |
Re: natürliche, ungerade zahlen addieren
Man könnte auch einfach die dafür erdachte mathematische Formel benutzen :roll: .
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz