Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi natürliche, ungerade zahlen addieren (https://www.delphipraxis.net/78193-natuerliche-ungerade-zahlen-addieren.html)

Amo 30. Sep 2006 17:58


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:
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;
Vorraussetzung Edit1.Text ist am anfang null.

So, wo ist jetzt der fehler? Ich verstehe es einfach nicht, als ergebnis bekomme ich immer eine negative zahl!!

mkinzler 30. Sep 2006 18:00

Re: wo ist der fehler?
 
Warum nimmst du keine For-Schleife?

Daniel 30. Sep 2006 18:03

Re: wo ist der fehler?
 
Moin Amo,

bitte verpasse Deinem Beitrag doch noch einen aussagekräftigen Titel. Danke. ;-)

BenjaminH 30. Sep 2006 18:05

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:
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;
Außerdem hab ich den Verdacht, dass das irgendwie auch ohne Schleife geht..

richie 30. Sep 2006 18:09

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;

Khabarakh 30. Sep 2006 18:29

Re: wo ist der fehler?
 
Zitat:

Zitat von BenjaminH
Außerdem hab ich den Verdacht, dass das irgendwie auch ohne Schleife geht..

So isses... ;)

Sharky 30. Sep 2006 18:29

Re: wo ist der fehler?
 
Hai ihr,

ich habe hier auch noch einen Vorschlag der auf das Delphi-Referenz durchsuchenMod verzichtet ;-)
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 ;-)

Amo 30. Sep 2006 18:33

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^^

mkinzler 30. Sep 2006 18:34

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;
...

Khabarakh 30. Sep 2006 18:35

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.
Seite 1 von 3  1 23      

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