AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Collatz Problem

Ein Thema von lasagne0504 · begonnen am 9. Jul 2013 · letzter Beitrag vom 10. Jul 2013
Antwort Antwort
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

AW: Collatz Problem

  Alt 9. Jul 2013, 21:35
Ich vermute mal, das der Zahlenbereich Integer zu klein ist für die Zahl 670617279

670617279 * 3 = 2011851837
+1 = 2011851838 -> gerade Zahl noch im Bereich Longint
2011851838 / 2 = 1005925919 -> ungerade Zahl noch im Bereich Longint
1005925919 * 3 = 3017777757 -> nicht mehr im Bereich Longint
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Collatz Problem

  Alt 9. Jul 2013, 22:05
Ich habe gerade mal mit diesem Quelltext getestet und bei der Zahl kommt ein Ergebnis bei raus :
Delphi-Quellcode:
procedure TForm13.Btn_1Click(Sender: TObject);
var
  x, z : Int64;
begin
  if TryStrToInt64(edit1.Text, x) then
    x := strtoint(edit1.Text)
  else
    x := 0;
  z := 0;
  if (x = 0) or (x < 0) then
    showmessage('Die Zahl muss mindestens 1 sein!')
  else
  begin
    while (x>1) do
    begin
      if (x mod 2 = 0) then
      begin
        x:= x div 2;
        Inc(z);
      end
      else
      begin
        x := x * 3 + 1;
        Inc(z);
      end;
      label1.Caption := 'Nach ' + inttostr(z) + ' Schritten kommt 1 heraus.';
    end;
  end;
end;
Und habe mir erlaubt Deinen Quelltext noch ein wenig zu verbessern.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
lasagne0504

Registriert seit: 9. Jul 2013
2 Beiträge
 
#3

AW: Collatz Problem

  Alt 9. Jul 2013, 22:33
Ah ich dachte immer dass Delphi eine Fehlermeldung ausgibt wenn eine Zahl zu groß für eine Integer-Variabel ist. Aber dann ist das Problem ja geklärt, wenn ich int64 benutze klappt das auch.
Danke
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.209 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Collatz Problem

  Alt 10. Jul 2013, 09:04
Ah ich dachte immer dass Delphi eine Fehlermeldung ausgibt wenn eine Zahl zu groß für eine Integer-Variabel ist.
Das dachte ich auch lange. Leider ist das in der Debug-Fassung nicht die Standard-Einstellung, finde ich auch doof. Du kannst (und solltest?) es in der Debug-Fassung unter Delphi-Compiler->Compilieren->Laufzeitfehler wieder aktivieren (siehe Bild)
Angehängte Grafiken
Dateityp: png Unbenannt.png (54,7 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Collatz Problem

  Alt 10. Jul 2013, 09:12
Auf dem Bild ist die Bereichsprüfung fokussiert, die Überlaufprüfung befindet sich 2 Zeilen tiefer
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.209 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Collatz Problem

  Alt 10. Jul 2013, 09:21
Natürlich, ich hatte noch nicht einmal bewusst etwas angewählt, war immerhin schon nahe dran
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: Collatz Problem

  Alt 10. Jul 2013, 09:37
Ist ja auch kein Beinbruch, die Hilfe sagt sowieso:
Zitat:
Der Schalter $Q wird normalerweise zusammen mit dem Schalter $R eingesetzt, der die Erzeugung von Bereichsprüfungscode aktiviert bzw. deaktiviert. Die Aktivierung der Überlaufprüfung vergrößert und verlangsamt ein Programm. Die aktivierte Überlaufsprüfung verlangsamt und vergrößert Ihr Programm. Sie sollten {$Q+} daher nur für die Fehlersuche verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Collatz Problem

  Alt 10. Jul 2013, 09:38
Vereinfacht sieht der Code so aus:
Delphi-Quellcode:
procedure TForm13.Btn_1Click(Sender: TObject);
var
  x : Int64;
  count : Integer;
begin
  x := StrToInt(edit1.Text);
  if x < 1 then
    raise Exception.Create('Die Zahl muss >= 1 sein!');
  count := 0;
  while (x>1) do
  begin
    if x mod 2 = 0 then
      x:= x div 2
    else
      x := x * 3 + 1;
    Inc(count);
  end;
  label1.Caption := 'Nach ' + inttostr(count) + ' Schritten kommt 1 heraus.';
end;
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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