Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Gerade Zahl oder Ungerade Zahl? (https://www.delphipraxis.net/159618-gerade-zahl-oder-ungerade-zahl.html)

Rakash 5. Apr 2011 15:42

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!

jfheins 5. Apr 2011 15:46

AW: Gerade Zahl oder Ungerade Zahl?
 
Funktion: Delphi-Referenz durchsuchenOdd()
Manuell:
Delphi-Quellcode:
x mod 2 = 1
oder
Delphi-Quellcode:
x and 1 = 1
Ergibt jeweils wahr, wenn die Zahl ungerade ist ;)

P.S.: In der Suchfunktion findet man auch so manches: Hier im Forum suchenZahl gerade

Namenloser 5. Apr 2011 15:52

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:
5 mod 4 = 1
10 mod 7 = 3
3 mod 6 = 0
3 mod 5 = 3
usw...

Eine Zahl x ist also durch 2 teilbar, sprich gerade, wenn
Delphi-Quellcode:
x mod 2 = 0
ist, sonst ist sie nicht teilbar, also ungerade.

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

p80286 5. Apr 2011 16:07

AW: Gerade Zahl oder Ungerade Zahl?
 
Delphi-Quellcode:
if x and 1=0 then {gerade}
Gruß
K-H

uligerhardt 5. Apr 2011 16:11

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von NamenLozer (Beitrag 1093155)
Soweit die allgemeine Version. Für Gerade und Ungerade, gibt es aber auch noch zwei Spezialfunktionenm die ich dir nicht vorenthalten will:
Delphi-Quellcode:
Even()
und
Delphi-Quellcode:
Odd()
.
Delphi-Quellcode:
if Even(x) then
  // x ist gerade
else
  // x ist ungerade
Delphi-Quellcode:
Odd()
ist das gleiche, nur umgekehrt.

Mein D2007 kennt nur Odd.

Namenloser 5. Apr 2011 16:13

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:

ChrisE 5. Apr 2011 16:30

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von uligerhardt (Beitrag 1093167)
Mein D2007 kennt nur Odd.

Kann ich bestätigen. Meins auch ;-)

p80286 5. Apr 2011 16:35

AW: Gerade Zahl oder Ungerade Zahl?
 
Even() = not(Odd()) ?

Gruß
K-H

Deep-Sea 5. Apr 2011 16:37

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von p80286 (Beitrag 1093183)
Even() = not(Odd()) ?

Genau. Oder in Delphi "gesagt":
Delphi-Quellcode:
function Even(X: Integer): Boolean; inline;
begin
  Result := not Odd(X);
end;
:-D

Wolfgang Mix 5. Apr 2011 17:10

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

himitsu 5. Apr 2011 18:23

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:
Frac(x / 2) <> 0
. :stupid:

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.

ConnorMcLeod 5. Apr 2011 18:35

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von himitsu (Beitrag 1093227)
Delphi-Quellcode:
Frac(x / 2) <> 0

rotfl u made my day !!
mehr, mehr <bg>

Der Thread erinnert mich an ...
http://www.r-ene.de/lustigetexte/physikpruefung/

DeddyH 5. Apr 2011 18:45

AW: Gerade Zahl oder Ungerade Zahl?
 
Nicht, dass das wieder so ein Monster-Thread wird, einer reicht :warn:

implementation 5. Apr 2011 19:20

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von DeddyH (Beitrag 1093235)
Nicht, dass das wieder so ein Monster-Thread wird, einer reicht :warn:

Nein, jetzt roll' ich mich wieder vor Lachen auf dem Boden, weil du den wieder rausgekramt hast :roteyes::corky::spin2::spin::freak::hello:

Rakash 5. Apr 2011 19:22

AW: Gerade Zahl oder Ungerade Zahl?
 
vielen lieben dank!
ich habe nun diese form gewählt:

Code:
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;
aber ich hab parallel noch eine mit Hier im Forum suchenmod erstellt.

implementation 5. Apr 2011 19:24

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von Rakash (Beitrag 1093248)
aber ich hab parallel noch eine mit Hier im Forum suchenmod erstellt.

Eine reicht doch :wink:

DeddyH 5. Apr 2011 19:28

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;

Rakash 5. Apr 2011 19:50

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von implementation (Beitrag 1093249)
Zitat:

Zitat von Rakash (Beitrag 1093248)
aber ich hab parallel noch eine mit Hier im Forum suchenmod erstellt.

Eine reicht doch :wink:

mehr zur übung (:

Medium 5. Apr 2011 19:56

AW: Gerade Zahl oder Ungerade Zahl?
 
Oh bitte bitte mehr so Zeug wie aus dem Negativ-Test-Thread! Biiiiiiitte! :D

jfheins 5. Apr 2011 19:56

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von DeddyH (Beitrag 1093251)
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;

Wenn du den Code schon so rabiat kürzt: Ich glaube du kannst das begin/end weglassen. (Da die Prozedur nur aus einer Zeile besteht)
Spart nochmal 40% LOC ein :mrgreen:

alzaimar 5. Apr 2011 20:07

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von himitsu (Beitrag 1093227)
Wobei aber die AND-Version zu bezuzugen wäre

Um Gottes Willen, nein! Programme sollen lesbar sein und nicht durch kryptographischen Spezialcode das Insiderwissen des Autors belegen.

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

Namenloser 5. Apr 2011 21:16

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von jfheins (Beitrag 1093259)
Zitat:

Zitat von DeddyH (Beitrag 1093251)
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;

Wenn du den Code schon so rabiat kürzt: Ich glaube du kannst das begin/end weglassen. (Da die Prozedur nur aus einer Zeile besteht)

Seit wann geht das? :gruebel:

himitsu 5. Apr 2011 21:23

AW: Gerade Zahl oder Ungerade Zahl?
 
Delphi-Quellcode:
uses StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IfThen(Odd(StrToInt(Edit1.Text)), 'ungleich', 'gleich');
end;
Oder wie wäre es mit
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)

Rakash 5. Apr 2011 22:23

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von himitsu (Beitrag 1093299)
Delphi-Quellcode:
uses StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IfThen(Odd(StrToInt(Edit1.Text)), 'ungleich', 'gleich');
end;
Oder wie wäre es mit
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)

das wäre zu viel des guten xD
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

Aphton 5. Apr 2011 22:41

AW: Gerade Zahl oder Ungerade Zahl?
 
Zitat:

Zitat von alzaimar (Beitrag 1093268)
Zitat:

Zitat von himitsu (Beitrag 1093227)
Wobei aber die AND-Version zu bezuzugen wäre

Um Gottes Willen, nein! Programme sollen lesbar sein und nicht durch kryptographischen Spezialcode das Insiderwissen des Autors belegen.

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

Ach quatsch. Ich bin zwar kein professioneller Entwickler, aber ich schätze schon, dass in der Industrie Wert auf perfomanten Code gelegt wird, oder?
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

p80286 6. Apr 2011 13:51

AW: Gerade Zahl oder Ungerade Zahl?
 
Delphi-Quellcode:
function Ungerade(const ein:integer):boolean;
begin
result:=boolean(ein and 1);
end;
Auf begin end können wir wohl doch nicht verzichten.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 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