Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
576 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Erstellung einer Schleife mit drei Überprüfungen

  Alt 24. Mai 2021, 23:58
uebrig := zahl - 2 mod teiler; ist nicht das, was du willst.

mod wird vor +*-/ ausgewertet.

Was du willst ist
uebrig := ( zahl - 2 ) mod teiler;

In deinem Code berechnest du in jeder Runde drei Mal, ob eine Zahl (du rechnest für zahl-2, zahl und zahl+2) prim ist. Wie du gesehen hast geht es auch mit einer Berechnung pro Runde: Du könntest dir jeweils prim oder nicht für zahl und zahl+2 merken. In der nächsten "ungeraden zahl Runde" kannst du dann auf diese Werte zurückgreifen und musst nur für "zahl+2" rechnen.

Wie besprochen: Ausser 2 ist keine Primzahl gerade. Überprüfe also nur ungerade teiler.
teiler := teiler + 2;

Wie besprochen: Prüfe nur für ungerade Teiler von 3 bis sqrt(zahl).

Delphi-Quellcode:
  ist_prim := true;
  teiler := 3;
  pruefebis := trunc(sqrt(zahl));
  repeat
    ist_prim := zahl mod teiler <> 0;
    inc( teiler, 2 );
  until not ist_prim or ( teiler > pruefebis );
Fibo müsstest du nicht für jede Zahl immer neu berechnen. Es reicht, wenn du dir immer die nächste Fibo-Zahl f > zahl merkst und dann in jeder Runde auf f=zahl prüfst.
Das spielt hier keine grosse Rolle - aber Effizienz in Schleifen ist wichtig .
Michael Gasser

Geändert von Michael II (25. Mai 2021 um 00:16 Uhr)
  Mit Zitat antworten Zitat