AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Fatorisierung - Ablauf korrekt, aber falsche Ergebnisse
Thema durchsuchen
Ansicht
Themen-Optionen

Fatorisierung - Ablauf korrekt, aber falsche Ergebnisse

Offene Frage von "Waldbärchen"
Ein Thema von Waldbärchen · begonnen am 6. Feb 2007 · letzter Beitrag vom 6. Feb 2007
 
Waldbärchen

Registriert seit: 6. Feb 2007
Ort: Freiburg i.Br.
6 Beiträge
 
#1

Fatorisierung - Ablauf korrekt, aber falsche Ergebnisse

  Alt 6. Feb 2007, 16:53
Hallo und guten Tag!

Ich befasse mich erst seit kurzem mit DELPHI (Version2005) und habe dazu meine alten Ideen wieder herausgeholt, die ich vor langer Zeit mit Turbo Pascal gebastelt habe. Ich will natürlich jetzt einiges verfeinern.
Hier also ein Programm zur Primzahlprüfung und Primfaktorzerlegung.
So sollte das eigentlich funktionieren:
Teil I: Eine Funktion "primpruef(a)", die den kleinsten von 1 verschiedenen Primteiler ausgibt, im Primfall also a selber.
Teil II: Eine Prozedur, die diese Funktion so oft aufruft, bis auch der letzte (größte) untersuchte Teiler prim ist. Die kleineren werden jeweils nacheinander abgespalten und in "Zerlegung" aufgezählt. Danach schließlich die entsprechenden Ausgaben.
Das Dumme an der Sache ist nur, daß ich vom Compiler keine Fehlermeldung bekomme, das Programm auch fehlerfrei abläuft, aber falsche und höchst merkwürdige Ergebnisse bringt. Bei 67 z.B. sagt es richtig, das die Zahl prim ist, die Teiler von 34 seien aber 1 x 2 x 117 und die Primzahl 117 selber habe eine Zerlegung 1 x 3 x 3 x 113!
Delphi-Quellcode:
function primpruef(a:Int64):Int64;
  {gibt den kleinsten Primteiler von a aus}
var b,i:Int64;
begin
  b:= Trunc(Sqrt(a));
  i:= 2;
While i<=b Do
  begin
    If a mod i = 0 Then
      begin
        primpruef:= a div i;
        exit;
      end
    Else
      i:= i+1;
  end;
  primpruef:= a;
end;


procedure TForm4.Button1Click(Sender: TObject);
  {gibt, falls eine Zahl nicht prim ist,
  die Primteiler aus}

var a,b,c,Primteiler:Int64;
    Zerlegung:String;
begin
  a:= StrToInt64(InputBox('Eingabe',
  'Bitte hier die zu prüfende Zahl eingeben:',''));
  b:= a;
  Zerlegung:= '1';
Repeat
  c:= b;
  b:= primpruef(b);
  If b=a Then
    begin
      ShowMessage('Die Zahl '+ IntToStr(a)
      +' ist eine Primzahl!');
      exit;
    end
  Else
    begin
      Primteiler:= c div b;
      Zerlegung:= Concat(Zerlegung,' x ',IntToStr(Primteiler));
    end;
Until b=c;
  ShowMessage('Die Zahl '+ IntToStr(a)+
  ' hat die Primfaktorzerlegung '+Zerlegung+ IntToStr(c));
end;
end.
Ich finde bei diesen Ergebnissen nicht die Stelle, über welchen Befehl das Programm stolpert.
Habt Ihr eine Idee?

Vielen Dank im Voraus,
Euer Waldbärchen
  Mit Zitat antworten Zitat
 


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 01:04 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