Exponenten (Unterprogramme)
Schreiben Sie eine Funktion, die eine Zahl a potenziert (ab), ohne dabei die Mathematik-Methoden Ihrer Programmiersprache zu verwenden (insbesondere keine Exponenten- und Potenzfunktionen). Dabei ist a eine reelle Zahl (double) und b eine ganze positive Zahl (integer mit b >= 0).
0 Kommentare
5 Lösung(en)
a = float(raw_input("a: "))
b = int(raw_input("b: "))
fact =1
for i in range(b):
fact = fact *a
print str(a)+' hoch '+str(b)+' = '+str(fact)
/**
* Berechne Exponeneten
* @param a = basis
* @param n = exponent >=0
* @return a ^ n
* @author philipp gressly freimann / dez. 2010
*/
double hoch(double a, int n) {
if(0 == n) { return 1; }
double resultat = 1.0;
while(n > 1) {
if(gerade(n)) {
a = a * a;
n = n / 2;
} else {
resultat = resultat * a;
a = a * a;
n = (n-1) / 2;
}
}
return resultat * a;
}
boolean gerade(int n) {
return 0 == n % 2;
}
/*
Mit noch weniger Multiplikationen als mit obiger "Halbierungsmethode" kommt man bei gewissen Zahlen mit sog. Additionsketten (S. Wikipedia) aus. So kann a^15 z. B. mit lediglich 5 Multiplikationen berechnet werden:
a2 := a * a;
a3 := a2 * a;
a5 := a3 * a2;
a10 := a5 * a5;
a15 := a5 * a10;
S. Knuth: The Art of Computer Programming Vol. 2 Kap. 4.3.6 S. 463 "Evaluation of Powers" ISBN 0-201-89684-2
*/
function exponentiate(a, b) { return a ** b }
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET 6.x | C# 10.x | VS-2022
double Expo(double a, int b) => Enumerable.Range(0, b).Select(i => a).Aggregate(1, (double x, double y) => x * y);
Console.WriteLine(Expo(2, 20));
Lösung von: Jens Kelm (@JKooP)
// C++ 14 | VS-2022
#include <iostream>
int main() {
const auto expo{ [](double a, int b) { auto c{ 1 }; for (auto i{ 0 }; i < b; i++) c *= a; return c; } };
std::cout << expo(2, 3) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.5 |
Schwierigkeit: | k.A. |
Webcode: | 6i5m-xtvw |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |