![]() |
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: .
|
Re: natürliche, ungerade zahlen addieren
@ Sharky: Bei deinem Vorschlag kommt schon wieder diese negative zahl heraus :(
edit: und @ BenjaminH: Da kommt auch wieder diese negative zahl heraus :gruebel: . Und diese "negative zahl" einfach als positive zahl ist auch nicht richtig... |
Re: natürliche, ungerade zahlen addieren
|
Re: natürliche, ungerade zahlen addieren
Zitat:
|
Re: natürliche, ungerade zahlen addieren
Ich glaube es gibt einfach einen Integeroverflow, darum ist die Zahl negativ.
|
Re: natürliche, ungerade zahlen addieren
Zitat:
Zitat:
Zitat:
|
Re: natürliche, ungerade zahlen addieren
Wie wäre es einfach mit
Delphi-Quellcode:
wobei x die letzte Zahl darstelltergebnis := Power((1 + x) / 2), 2); |
Re: natürliche, ungerade zahlen addieren
@Sergej: Wie bist du darauf gekommen?
|
Re: natürliche, ungerade zahlen addieren
JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAA
Sharky was right!!!!! :thumb: :thumb: :thumb: PS: Genau für diese vielen und vor allem schnellen antworten liebe ich dieses Forum!!! THX @ ALL !!! edit: Ach ja, falls es jemanden interessieren sollte: das richtige ergebnis ist 59905499536 :zwinker: |
Re: natürliche, ungerade zahlen addieren
Zitat:
Naja man nehme die Formel für die Arithmetische Reihe für die Summe der ersten n ungeraden Zahlen ( -> n^2) und überlege sich dann, wieviele n Zahlen es zwischen 1 und x gibt ( -> ( 1 + x) / 2 ) [edit] Ah und ich sehe gerade, dass meine Formel korrekt ist ;-) |
Re: natürliche, ungerade zahlen addieren
Zitat:
|
Re: natürliche, ungerade zahlen addieren
Delphi-Quellcode:
das vermeidet die Fließkommaberechnungen und mit Int64 kann X bis Wurzel(MaxInt64) * 2 = $FFFFFFFF gehen.
temp := (x +1) div 2;
Result := temp * temp; Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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