![]() |
ungerade und gerade Zahlen erkennen
Hi ich möchte in einem Programm erreichen das es erkennt ob eine erreichte Zahl gerade ist oder ungerade und dann dementsprechend handelt z Bsp mit einem if x=(gerade zahl) then ... Hilfe währe nett ^^
|
AW: ungerade und gerade Zahlen erkennen
|
AW: ungerade und gerade Zahlen erkennen
danke kann man das auch irgendwie bei komma zahlen benutzen also obs ne komme zahl oder ganze zahl ist
|
AW: ungerade und gerade Zahlen erkennen
Sicher, einfach den Teil nach dem Komma entfernen:
Delphi-Quellcode:
Statt
if Odd(Trunc(X)) = ...
![]() Grüße Dalai |
AW: ungerade und gerade Zahlen erkennen
danke schön ^^
|
AW: ungerade und gerade Zahlen erkennen
Was kennzeichnet eine gerade Zahl? Das sie ohne Rest durch 2 teilbar ist...
Wie kann somit eine Zahl mit Nachkommastellen jemals gerade sein? |
Dieses Thema wurde am "24. May 2019, 08:49 Uhr" von "Daniel" aus dem Forum "Fragen / Anregungen zur DP" in das Forum "Object-Pascal / Delphi-Language" verschoben.
|
AW: ungerade und gerade Zahlen erkennen
Zitat:
Eine Prüfung könnte aussehen:
Delphi-Quellcode:
//Prüft ob Kommazahl oder ganze Zahl
if x = trunc(x) then showmessage('Ganze Zahl') else showmessage('Kommazahl'); //Prüft auf gerade Zahl if odd(x) then showmessage('ungerade Zahl') else showmessage('gerade Zahl'); |
AW: ungerade und gerade Zahlen erkennen
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'); |
AW: ungerade und gerade Zahlen erkennen
etwas Hardcore:
in der binären Darstellung einer ganzen Zahl ist das niederwertigste Bit=0
Delphi-Quellcode:
(das überfordert aber teils schon manche Lehrer... )
if (zahl and 1) = 0 then
ShowMessage('Zahl ist gerade') else ShowMessage('Zahl ist ungerade'); |
AW: ungerade und gerade Zahlen erkennen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
CPU-Fenster zur Laufzeit:
procedure TForm3.Button1Click(Sender: TObject);
var zahl: Integer; begin zahl := 3; if zahl mod 2 = 0 then ShowMessage('!'); end; https://www.delphipraxis.net/attachm...1&d=1558690075 |
AW: ungerade und gerade Zahlen erkennen
Zitat:
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" :) |
AW: ungerade und gerade Zahlen erkennen
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:
während der Weg über mod schon ein paar mehr CPU-Befehle braucht:
Project543.dpr.9: if Odd(N) then
0040A10A F60588F5400001 test byte ptr [$0040f588],$01 0040A111 741B jz $0040a12e
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 |
AW: ungerade und gerade Zahlen erkennen
Wenn die Rede von floating point ist, könnte das
![]() 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. |
AW: ungerade und gerade Zahlen erkennen
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. |
AW: ungerade und gerade Zahlen erkennen
Statt Hardcoreprogrammierung etwas Mathematik :
Nur bei ganzen Zahlen ist die Eigenschaft "gerade" (entspr. "ungerade) definiert. Niemals bei gebrochenen oder reellen Zahlen. ism |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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