![]() |
Delphi-Version: 6
Gerade Zahl oder Ungerade Zahl?
Kann mir jemand sagen, wie ich ein Programm schreiben soll, dass überprüft, ob eine Zahl gerade oder ungerade ist?
ich schätze ich brauche eine 'if klausel' ... aber so recht weiß ich auch nicht weiter ... kann mir jemand einen quelltext schreiben, und kurz erläutern? das wäre verdammt nett! |
AW: Gerade Zahl oder Ungerade Zahl?
Funktion:
![]() Manuell:
Delphi-Quellcode:
oder
x mod 2 = 1
Delphi-Quellcode:
Ergibt jeweils wahr, wenn die Zahl ungerade ist ;)
x and 1 = 1
P.S.: In der Suchfunktion findet man auch so manches: ![]() |
AW: Gerade Zahl oder Ungerade Zahl?
Um zu prüfen, ob eine Zahl gerade oder ungerade ist, kann man prüfen, ob sie ohne Rest durch 2 teilbar ist.
Der Operator für den Rest bei einer ganzzahligen Division ist in Delphi
Delphi-Quellcode:
.
mod
Z.B.:
Delphi-Quellcode:
usw...
5 mod 4 = 1
10 mod 7 = 3 3 mod 6 = 0 3 mod 5 = 3 Eine Zahl x ist also durch 2 teilbar, sprich gerade, wenn
Delphi-Quellcode:
ist, sonst ist sie nicht teilbar, also ungerade.
x mod 2 = 0
Soweit die allgemeine Version. Es gibt aber auch noch eine Spezialfunktionen die ich dir nicht vorenthalten will:
Delphi-Quellcode:
.
Odd()
Delphi-Quellcode:
if Odd(x) then
// x ist ungerade else // x ist gerade |
AW: Gerade Zahl oder Ungerade Zahl?
Delphi-Quellcode:
Gruß
if x and 1=0 then {gerade}
K-H |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
Merkwürdig, ich könnte schwören, dass es die gibt... vielleicht war sie aber aus irgendeiner 3rd-Party-Unit :gruebel:
|
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
Even() = not(Odd()) ?
Gruß K-H |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
Delphi-Quellcode:
:-D
function Even(X: Integer): Boolean; inline;
begin Result := not Odd(X); end; |
AW: Gerade Zahl oder Ungerade Zahl?
Ergänzend zu NamenLoser:
Delphi-Quellcode:
If (x mod 2 = 0) then
//x ist gerade else // x ist ungerade |
AW: Gerade Zahl oder Ungerade Zahl?
Wobei aber die AND-Version zu bezuzugen wäre (Odd verwendet diese ebenfalls intern),
da diese kleine Bitoperation wesentlich schöner/flotter ist, als soeine "rießige" mathematische Berechnung, wie das MOD. Am Ende schlägt noch emand
Delphi-Quellcode:
. :stupid:
Frac(x / 2) <> 0
Wobei man es auch dirkt in einen ASM-Bit-Test casten könnte (über ein SET und den IN-Operator), aber so toll isses dann nun och nicht. |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
mehr, mehr <bg> Der Thread erinnert mich an ... ![]() |
AW: Gerade Zahl oder Ungerade Zahl?
Nicht, dass das wieder so ein
![]() |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
vielen lieben dank!
ich habe nun diese form gewählt:
Code:
aber ich hab parallel noch eine mit
procedure TForm1.Button1Click(Sender: TObject);
var x: integer; begin x := StrToInt(Edit1.Text); if ODD(x) then Label1.Caption := 'ungerade!' else Label1.Caption := 'gerade!'; end; ![]() |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
Wenn andere schon mit Assembler kommen, sei mir zumindest eine kleine Kürzung erlaubt (ohne Fehlerbehandlung):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const Ausgabe: array[Boolean] of string = ('gerade!', 'ungerade!'); begin Label1.Caption := Ausgabe[Odd(StrToInt(Edit1.Text))]; end; |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
Oh bitte bitte mehr so Zeug wie aus dem Negativ-Test-Thread! Biiiiiiitte! :D
|
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
Spart nochmal 40% LOC ein :mrgreen: |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
Du musst doch sogar einen Kommentar zu dem Code schreiben, damit man weiss, was er machen soll, und das bei 5 Zeichen. Versteck deine Bittüdelei wenigstens in einer Funktion. Aber nenn die bloß nicht AND_1 :-D |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
|
AW: Gerade Zahl oder Ungerade Zahl?
Delphi-Quellcode:
Oder wie wäre es mit
uses StrUtils;
procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := IfThen(Odd(StrToInt(Edit1.Text)), 'ungleich', 'gleich'); end;
Delphi-Quellcode:
.
if Edit1.Text[Length(Edit1.Text)] in ['1', '3', '5', '7', '9'] then {ungerade};
(eine Prüfung, ob überhaupt eine gültige Zahl in Edit liegt, überlaß ich Anderen) |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
wobei es ja eine allgemein gültige form sein soll für den integer brecih. ich meien gut. man kann so auch den gesamten bereich angeben ... xD |
AW: Gerade Zahl oder Ungerade Zahl?
Zitat:
Also ich find die Version mit der logischen Verknüpfung einfach am optimalsten und auch sehr leserlich. Man muss ja nur kurz überlegen und schon weiß man, was geschieht. Außerdem ist es in diesem Fall ja nur ein Einzeiler, daher würde schon die richtige Bennenung der Funktion den Code leserlich machen! :P |
AW: Gerade Zahl oder Ungerade Zahl?
Delphi-Quellcode:
Auf begin end können wir wohl doch nicht verzichten.
function Ungerade(const ein:integer):boolean;
begin result:=boolean(ein and 1); end; Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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 by Thomas Breitkreuz