restructure and add ipi texs
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#include "cpp_headers/fcpp.hh"
|
||||
|
||||
// prueft ob Zahl gerade oder nicht
|
||||
int iseven(int n) {
|
||||
return n % 2 == 0;
|
||||
}
|
||||
|
||||
// berechnet Quadrat einer Zahl
|
||||
int square(int x) {
|
||||
return x * x;
|
||||
}
|
||||
|
||||
// berechnet x^exp schnell
|
||||
int potenz(int x, int exp) {
|
||||
return cond(exp == 1, // falls exp == 1
|
||||
x, // x^1 = x
|
||||
cond(iseven(exp),
|
||||
square(potenz(x, exp / 2)), // wenn gerade
|
||||
x * potenz(x, exp-1))); // wenn ungerade
|
||||
}
|
||||
|
||||
// summiert alle echten Teiler einer zahl auf
|
||||
int summiereTeiler(int summe, int index, int zahl) {
|
||||
// der index stellt den aktuellen zu pruefenden Teiler dar
|
||||
// falls dieser groeßer ist als die Haelfte der Zahl, kann es keine
|
||||
// echten Teiler mehr geben, d.h. es wird die aktuelle Summe zurueckgegeben
|
||||
return cond(index > zahl / 2,
|
||||
summe,
|
||||
// falls index die zahl teilt, wird die Summe um index erhöht
|
||||
// danach wird der nächste moegliche Teiler geprueft
|
||||
summiereTeiler(cond(zahl % index == 0, summe + index, summe),
|
||||
index + 1,
|
||||
zahl));
|
||||
}
|
||||
|
||||
// berechnet ob eine Zahl vollkommen ist
|
||||
bool vollkommen(int zahl) {
|
||||
// summiere alle Teiler und pruefe ob die Zahl gleich dieses Summe
|
||||
// es wird mit der Startsumme 0 und dem ersten Teiler 1 gestartet
|
||||
return summiereTeiler(0, 1, zahl) == zahl;
|
||||
}
|
||||
|
||||
int main() {
|
||||
return print(potenz(2, 10),
|
||||
cond(vollkommen(8128),
|
||||
"8128 ist vollkommen",
|
||||
"8128 ist nicht vollkommen"),
|
||||
0);
|
||||
}
|
||||
Reference in New Issue
Block a user