AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ungerade und gerade Zahlen erkennen

Ein Thema von Inkompetent · begonnen am 24. Mai 2019 · letzter Beitrag vom 11. Jun 2019
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: ungerade und gerade Zahlen erkennen

  Alt 24. Mai 2019, 11:28
etwas Hardcore:
in der binären Darstellung einer ganzen Zahl ist das niederwertigste Bit=0

Delphi-Quellcode:
if (zahl and 1) = 0 then
  ShowMessage('Zahl ist gerade')
else
  ShowMessage('Zahl ist ungerade');
(das überfordert aber teils schon manche Lehrer... )
Es kann nicht schaden das zu wissen, aber der Compiler optimiert das sogar selbst:
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var zahl: Integer;
begin
  zahl := 3;
  if zahl mod 2 = 0 then
    ShowMessage('!');
end;
CPU-Fenster zur Laufzeit:

Miniaturansicht angehängter Grafiken
and2.png  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#12

AW: ungerade und gerade Zahlen erkennen

  Alt 24. Mai 2019, 11:34
Deine Gerade/Ungerade Prüfung ist falsch rum. "Odd" bedeuted "Ungerade".

Es wurde zwar schon angedeutet, aber was dein Lehrer wahrscheinlich statt der Funktion Odd() haben wollte ist wahrscheinlich was anderes.
Eine Zahl ist gerade wenn sie ohne Rest durch 2 teilbar ist. In Delphi gibt es den "mod" Operator mit dem du den Rest einer Division erhältst.
D.h. eine andere Art zu prüfen wäre:
Delphi-Quellcode:
if (zahl mod 2) = 0 then // Falls der Rest der Division von der Zahl geteilt durch zwei 0 ist, ist die Zahl gerade
  ShowMessage('Zahl ist gerade')
else
  ShowMessage('Zahl ist ungerade');
Oops, danke für den Hinweis. Wollte natürlich nix falsches Erzählen und hab es geändert. Ist passiert, da ich die Prüfung vorher andersrum hatte^^

Dein Ansatz war ursprünglich auch meiner, wobei ich denke das die Funktion Odd() ähnlich vorgeht. Aber beides sind Wege das richtige Ergebnis zu erhalten. "Viele Wege führen nach Rom"
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#13

AW: ungerade und gerade Zahlen erkennen

  Alt 24. Mai 2019, 12:35
Odd ist allerdings immer noch die schnellste Option.

Bei Odd gibt es lediglich einen TEST call auf das Lo-Byte und einen bedingten Sprung:
Code:
Project543.dpr.9: if Odd(N) then
0040A10A F60588F5400001   test byte ptr [$0040f588],$01
0040A111 741B            jz $0040a12e
während der Weg über mod schon ein paar mehr CPU-Befehle braucht:
Code:
Project543.dpr.13: if N mod 2 = 0 then
0040A147 A188F54000       mov eax,[$0040f588]
0040A14C 2501000080       and eax,$80000001
0040A151 7905             jns $0040a158
0040A153 48               dec eax
0040A154 83C8FE          or eax,-$02
0040A157 40               inc eax
0040A158 85C0             test eax,eax
0040A15A 751B            jnz $0040a177
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#14

AW: ungerade und gerade Zahlen erkennen

  Alt 24. Mai 2019, 13:13
Wenn die Rede von floating point ist, könnte das hier sinnvoll sein.
Das ist wohl nicht die effizienteste Lösung, und ich würde das anders machen.

Ich halte das Ganze aber sowieso für ziemlich fragwürdig, wahrscheinlich gibt es hier ein Missverständnis was odd/even sein soll bei floating point.

Womöglich sollte die Variable in deinem Programm auf Integer geändert werden.

Es kommt auch auf die Anzahl der relevanten Nachkommastellen, z.B. wenn 0.001 reicht dann könntest du Alles mal 1000 nehmen, und zu Integer wechseln.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

AW: ungerade und gerade Zahlen erkennen

  Alt 24. Mai 2019, 13:19
Du hast Recht.
Bei dem mod unterscheidet er noch zwischen positiven und negativen Zahlen. Obwohl das in dem Fall eigentlich nicht notwendig wäre.
Hätte ich nicht gedacht.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
ISMIRSCHLECHT

Registriert seit: 17. Dez 2018
Ort: Görlitz
69 Beiträge
 
#16

AW: ungerade und gerade Zahlen erkennen

  Alt 11. Jun 2019, 09:23
Statt Hardcoreprogrammierung etwas Mathematik :
Nur bei ganzen Zahlen ist die Eigenschaft "gerade" (entspr. "ungerade) definiert.
Niemals bei gebrochenen oder reellen Zahlen.

ism
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz