Du bist nicht angemeldet.

Werbeanzeige

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

541

03.03.2015, 23:31

Mein Programmieren-Prof hat mal ein Schnippselchen Code veröffentlicht, was jemand in die Klausur geschrieben hat:

Quellcode

1
if(n%1==0)

*Bei n handelt es sich um einen Integer
:D :D :D

Wenn einem ein einfaches if(!(false == true)) oder if(n+n*-1==2n+1) zu einfach ist... ^^
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

MitgliedXYZ

Alter Hase

Beiträge: 1 375

Wohnort: Bayern

  • Private Nachricht senden

542

04.03.2015, 18:44

Wenn einem ein einfaches if(!(false == true)) oder if(n+n*-1==2n+1) zu einfach ist... ^^
Deine zweite Variante ergibt aber nicht true, sondern false ("!" vergessen?).
z.B. n = 5: 5+5*(-1)=0; 2*5+1=11; --> false

Und bei nicht Integer Werten könnte doch beides rauskommen:
n - n = 2n + 1
0 = 2n + 1
-1 = 2n
-0,5 = n
z.B. n = -0,5: (-0,5) + (-0,5)*(-1) = 0; 2 * (-0,5) + 1 = 2; --> true

Oder hab ich was übersehen?

543

04.03.2015, 18:47

Zitat

Oder hab ich was übersehen?

Rundungsfehler und den nicht vorhandenen %-Operator für floats :P

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

544

04.03.2015, 20:15

Deine zweite Variante ergibt aber nicht true, sondern false ("!" vergessen?).
Ja, da dürfte mir ein Fehler unterlaufen sein...

Und bei nicht Integer Werten könnte doch beides rauskommen:
[...]
Oder hab ich was übersehen?

*Bei n handelt es sich um einen Integer
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

MitgliedXYZ

Alter Hase

Beiträge: 1 375

Wohnort: Bayern

  • Private Nachricht senden

545

05.03.2015, 17:55

Ok, wieder was dazugelernt. Ich dachte Modulo würde bei allen Datentypen funktionieren.

Schorsch

Supermoderator

Beiträge: 5 200

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

546

06.03.2015, 18:13

Überleg dir einfach mal was du erwarten würdest wenn du den Modulo Operator auf float, bool, char und Co anwenden würdest. Klar könnte man false als 0 ansehen und true als 1, chars per ASCII Code in Ints umwandeln und floats runden aber ob es sinnvolle Anwendungsfälle gibt wage ich zu bezweifeln:)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 235

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

547

06.03.2015, 18:17

Warum sollte char nicht gehen?
Das ist auch bloß eine Zahl. Die muss man dort hin auch nicht von ASCII umwandeln,
den sie ist schon zugleich ein ASCII Code(normalerweise!) als auch eine Zahl.

birdfreeyahoo

Alter Hase

Beiträge: 766

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

548

06.03.2015, 18:21

Geht schon mit unsigned chars

http://ideone.com/VPKP1

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

549

06.03.2015, 19:51

Fließkommazahlen:
Man nehme §a = q * m + r§, dann wäre §a§ die Ausgangszahl (die Fließkommazahl, deren Restwert ermittelt werden soll), §q§ das Ergebnis bei einer Division ohne Nachkommastellen (bspw. bei Division von Ganzzahlen), §m§ wäre der Divisor (und somit die beim Modulo verwendete Zahl) und §r§ der Restwert (das Ergebnis für Modulo), solange §r < m§. Eine Modulooperation mit Fließkommazahlen ist also durchaus möglich, nur liegt es an den Programmiersprachen, wenn diese nicht definiert sind. (In JavaScript scheint es bspw. möglich zu sein.)
Ob es für Fließkommazahlen sinnvolle Anwendungsfälle gibt... naja... Ich würde ja fast mit Zeitwerten antworten, aber da kann man die Fließkommazahlen immer vorher erstmal in Ganzzahlen umrechnen. Sollte mir mal ein realer Anwendungsfall über den Weg hüpfen, kann ich ja Bescheid geben...

Boolean:
In manchen Sprachen ist eine Umwandlung in eine Zahl auch gar nicht möglich, da ein Wahrheitswert semantisch betrachtet keine Zahl ist, auch wenn Wahrheitswerte (auch außerhalb von Computern) häufig als solche (0 und 1) Dargestellt werden. Wie du also schon angedeutet hast: auch wenn man es machen könnte, wäre es unsinnig. (Man erhält übrigens immer entweder die numerische Darstellung des Booleans oder 0. ;) )

Warum sollte char nicht gehen?
Das ist auch bloß eine Zahl. Die muss man dort hin auch nicht von ASCII umwandeln,
den sie ist schon zugleich ein ASCII Code(normalerweise!) als auch eine Zahl.

Weil Zeichen eine andere semantische Bedeutung haben und das Ergebnis nicht zwingendermaßen erwartet wäre. Und wenn dann der verwendete Zeichensatz mal anders ist...
Oder ums anders zu fragen: warum sollten Pointer nicht gehen? Das sind auch nur Zahlen, also sollte das doch auch gehen. ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Beiträge: 1 235

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

550

06.03.2015, 20:56

Die Sache ist, das charsnicht bloß Zeichen sind sondern allgemein Zahlen.
Pointer zeigen auf Adressen im Adressraum und sind auf Sprachebene keine Zahlen. Deshalb ist Module auch keine sinnvolle Operation.
Das zeigt sich auch so: Pointer können nicht implizit zu ints konvertiert werden,chars schon.
Und ein charist eben nicht bloß ein Textzeichen sondern im Prinzip einfach der Typ eines Bytes und steht letzendlich auch hinter uint8_t/int8_t. Und da will ich definitv Modulooperationen.

Werbeanzeige