restructure and add ipi texs

This commit is contained in:
2019-11-06 18:24:04 +01:00
parent e21da561fc
commit 8fd8d2a485
155 changed files with 129 additions and 0 deletions
+49
View File
@@ -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);
}