Ergebnis 1 bis 5 von 5

[Delphi] Primzahl ja/nein?

  1. #1 Zitieren
    General Avatar von Bloody Beetroots
    Registriert seit
    Oct 2005
    Ort
    Sachsen-Anhalt
    Beiträge
    3.422
    Hallo

    Wir sollen in Informatik bis nächste Woche Montag ein Programm erstellen, welches die eingegeben Zahl als Primzahl erkennt und wenn nicht, ob es eine gerade Zahl ist oder nicht.

    Hier die genaue Aufgabenstellung:

    Das Programm soll überprüfen ob eine eingegebene Zahl eine Primzahl ist,
    und wenn es keine Primzahl ist, soll eine weitere Überprüfung durchgeführt werden,
    ob die eingegebene Zahl eine gerade Zahl ist.
    (! Definition Primzahl)
    Mein bisheriger Prozedur-Quellcode schaut folgendermaßen aus:

    Code:
    f_primenzahl:=false;
      if(v_ein=2)or(v_ein=3)or(v_ein=5)or(v_ein=7)then begin
        f_primenzahl:=true;
      end else begin
        if not(v_ein mod 2 = 0)and not(v_ein mod 3 = 0)and not(v_ein mod 5 = 0)and not(v_ein mod 7 = 0) then begin
          f_primenzahl:=true;
        end;
      end;
    Ist das soweit richtig? Gibt es Verbesserungsvorschläge oder Tipps eurerseits?

    Würde mich über Antworten freuen.
    Bloody Beetroots ist offline

  2. #2 Zitieren
    Waldläufer
    Registriert seit
    Apr 2009
    Beiträge
    186
    das musst du mit der Modulu funktion machen afaik.
    geht dein proggi denn?
    Worden ist offline

  3. #3 Zitieren
    General Avatar von Bloody Beetroots
    Registriert seit
    Oct 2005
    Ort
    Sachsen-Anhalt
    Beiträge
    3.422
    Zitat Zitat von Worden Beitrag anzeigen
    das musst du mit der Modulu funktion machen afaik.
    geht dein proggi denn?
    Jap. Ich lad es mal hoch für die, die es probieren wollen.

    http://upload.worldofplayers.de/files3/Project1.exe
    Bloody Beetroots ist offline

  4. #4 Zitieren
    Halbgott
    Registriert seit
    Mar 2003
    Beiträge
    9.125
    341 ist aber garkeine Primzahl.
    Chris ist offline

  5. #5 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Wie dir vermutlich schon klar ist, kann man schlecht alle möglichen Primzahlen in die If-Abfrage reinpacken

    Ein möglicher Schlüssel ist eine while-schleife: welche versucht deine Eingabe durch eine Reihe von Zahlen zu teilen.
    also

    Eingabe mod x

    x muss sich beim Schleifendurchlauf verändern, also steigen.
    das würde dann im Programm z.B. so aussehen:

    49 mod 2 = 1 (nö)
    49 mod 3 = 1 (nö)
    49 mod 4 = 1 (nö)
    49 mod 5 = 4 (nö)
    49 mod 6 = 1 (nö)
    49 mod 7 = 0 (ja)

    Da fällt auf, dass es ziemlich unsinnig ist, gerade Zahlen, wie 4 , 6 zu verwenden, da, wenn eine Zahl schon durch 2 nicht teilbar ist, sie auch nicht durch ein vielfaches von 2 teilbar ist.
    Letztendlich mussen man nur überprüfen, ob die Eingabe modulo |eine bekannte Primzahl| =0 ist, denn die restlichen Zahlen lassen sich ja aus der Multiplikation von Primzahlen bilden.
    Das ist jetzt aber wieder eine Sackgasse: Ziel ist es ja gerade Primzahlen zu berechnen.
    Nun zumindest kann man es daraufhingehend vereinfachen, dass man erstmal einfach alle geraden Zahlen weglässt. Dazu muss man das x immer nur um 2 pro Schleifendurchlauf erhöhen.
    Dann bleibt die Frage, wielange man die Überprüfung treiben möchte, also wie groß man das x werden lässt. Man kanns solange machen, bis x > oder = dem Eingabewert ist.
    Aber es reicht auch die Wurzel der Eingabe, da man ja hinterher keinen größeren Teiler finden wird.


    Pseudocode:
    Code:
    Wenn Eingabe mod 2 =0 dann ists keine Primzahl;
    
    x als Zahlenvariable =3
    solange (x kleiner oder gleich Wurzel(Eingabe) )
    beginn
       wenn Eingabe mod x = 0 dann keine Primzahl, Schleife verlassen ansonsten eventuell Primzahl, Schleife weiterführen
     x um 2 erhöhen
    ende
    Wurde die Zahl noch nicht als Nicht-Primzahl bestätigt, ists definitv nun eine Primzahl
    Sumpfkrautjunkie ist offline Geändert von Sumpfkrautjunkie (12.05.2009 um 20:05 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •