C-Kurs/Rekursives arbeiten/Musterlösung
< C-Kurs | Rekursives arbeiten
Version vom 2. September 2010, 17:05 Uhr von Ugene (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<pre> #include <stdio.h> →* Gibt Nachfolger des uebergebenen Wertes zurueck: int succ(int x){ return ++x; } /* * Gibt den inversen Wert eines uebergeben...“)
#include <stdio.h> /* * Gibt Nachfolger des uebergebenen Wertes zurueck */ int succ(int x){ return ++x; } /* * Gibt den inversen Wert eines uebergebenen Wertes zurueck */ int neg(int x){ return -x; } //--------------Ab hier durch C-Kurs Teilnehmer ----------------------- /* * Gibt den Vorgaenger des uebergebenen Wertes zurueck */ int pred(int x){ return neg(succ(neg(x))); } /* * Addition zweier Zahlen */ int add(int x, int y){ if (y == 0) { return x; } if (x < 0 && y < 0) { return neg(add(neg(x), neg(y))); } if (y < 0) { return add(y, x); } return add(succ(x), pred(y)); } /* * Subtraktion */ int sub(int x, int y){ return add(x, neg(y)); } /* * Multiplikation */ int mult(int x, int y){ int inv = 0; int result = x; if (x == 0 || y == 0) { return 0; } if (x < 0) { x = neg(x); inv = !inv; } if (y < 0) { y = neg(y); inv = !inv; } if (inv) { return neg(add(x, mult(x, pred(y)))); } return add(x, mult(x, pred(y))); } /* * Division */ int div(int x, int y){ int inv = 0; if (y == 0) { //undefiniert!!! return 0; } if (x == 0) { return 0; } if (x < 0) { x = neg(x); inv = !inv; } if (y < 0) { y = neg(y); inv = !inv; } if (x < y) { return 0; } if (inv) { return neg(succ(div(sub(x, y), y))); } return succ(div(sub(x, y), y)); } /* * Modulo */ int mod(int x, int y){ if (y == 0) { //undefiniert!!! return 0; } if (x == 0) { return 0; } if (y < 0) { y = neg(y); } if (x < 0) { return neg(mod(neg(x),y)); } if (x < y) { return x; } return mod(sub(x,y),y); } /* * Potenziert eine angegebene Zahl mit dem angegebenen Exponenten */ int pot(int x, int y){ if (y == 1) { return x; } if (y < 0) { return 0; } return mult(x,pot(x,pred(y))); } int main(){ printf("%i\n", add(-3,-7); printf("%i\n", sub(-3,7)); printf("%i\n", mult(-3,-7)); printf("%i\n", div(3,-7)); printf("%i\n", pot(-7,3)); return 0; }