Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: k.A.
Webcode: 6i5m-xtvw
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen