Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

1

19.12.2008, 10:56

#11: "Rechnen einmal anders", K.d.C., 18.01.2009

#11: "Rechnen einmal anders"
Typ: Kürze des Codes
Deadline: 18.01.2009
Abgabe: contest@spieleprogrammierer.de

Bitte beachten:
- Ablauf und Regeln


Aufgabenstellung:
Wie rechnet eigentlich ein Computer mit Zahlen, wo er doch nur Einsen und Nullen kennt? Dies ist das Thema dieses Contests.
Ihr sollt eine Funktion schreiben, die zwei 16-Bit-Integer mit Vorzeichen (int16_t) addiert, subtrahiert, multipliziert oder dividiert, ohne die Operatoren +, - (unär und binär), *, /, +=, -=, *=, /=, ++ und -- zu benutzen. Das gilt auch für Zählervariablen in for-Schleifen o.Ä.
Die Funktion muss genau so rechnen wie die normalen Operatoren. Geschwindigkeit spielt keine Rolle.
Die Funktion darf sich selbst aufrufen, um zum Beispiel die Multiplikation mit Hilfe der Addition auszuführen.
Divisionen durch Null kommen nicht vor.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
enum Operation
{
    ADD,
    SUBTRACT,
    MULTIPLY,
    DIVIDE
};

int16_t calculate(Operation op, int16_t x, int16_t y);


Ein paar Beispiele:
calculate(ADD, 10, 32) liefert 42.
calculate(SUBTRACT, 5, 11) liefert -6.
calculate(MULTIPLY, 100, 0) liefert 0.
calculate(DIVIDE, 10, -6) liefert -1.

Weitere Bedingungen:
- Verwenden der Standardbibliothek ist verboten.
- Natürlich ist es nicht erlaubt, die Ergebnisse im Vorhinein zu berechnen und dann aus einer Tabelle o.Ä. zu holen.

Paket hier herunterladen

Das Paket besteht aus dem Quelltext der Testumgebung, Code::Blocks-Projekt, Visual Studio-Projekt und Token-Counter.

Ein paar Links:
- Binärzahl
- Zweierkomplement
- Volladdierer

Viel Spaß und viel Erfolg!

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

2

19.12.2008, 11:31

Re: #11: "Rechnen einmal anders", K.d.C., 18.01.20

Zitat von »"David Scherfgen"«

Deadline: 18.01.2008


also viel zeit hat man ja nicht... -350 tage ca.? :p

ich glaub das ist n kontest, da mach ich mal mit, tönt interessant (nur hab ich keine ahnung wie man das machen soll, muss mir deine beispielimplementierung ansehen sobald ich zuhause bin :))

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

19.12.2008, 11:34

Es gibt keine Beispielimplementierung :P

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

4

19.12.2008, 11:37

Zitat von »"David Scherfgen"«

Danke für den Hinweis. An den anderen Stellen hatte ich es geändert.
Es gibt keine Beispielimplementierung.


nicht? stimmt.. wieso auch... (ich kann mir den code nicht ansehen, hier wird das zip-file vom proxy/firewall geblockt :()

wie muss man sich den die implementierung vorstellen? auf binärebene nur mit & und | ?

Anonymous

unregistriert

5

19.12.2008, 11:38

Ich denk mal die guten alten &, |, << und >> operatoren ;)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

19.12.2008, 11:38

Genau :)
So, wie die CPU es auch macht.

Anonymous

unregistriert

7

19.12.2008, 11:40

Solang man nicht die komplette Von-Neumann nachbilden muss :lol:

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

8

19.12.2008, 18:47

Der Contest is ja mal cool, Digitaltechnik gefällt mir =)

€:

C-/C++-Quelltext

1
 for(int i = 0; i<10;i++) {}

Das ist nicht erlaubt richtig? Wegen dem Inkrementoperator.. ?

€2:
Und auch nur Integer-Vars oder? Weil Floats sind ja bissle komplizierter die muss man erst mit IEEE 754 in ne Binärzahl bringen usw, wobei wär auch lustig [oki steht ja oben^^]

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

19.12.2008, 19:22

Ja, steht aber auch in der Beschreibung.
Das Verbot bezieht sich auch auf Zählervariablen o.Ä.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

19.12.2008, 21:14

Also, meine Funktion läuft schon :)

Werbeanzeige