Hochzahlen in C-Programmierung
Wie lässt sich die dritte Potenz einer Zahl in der Programmiersprache C ausgeben? (jedoch ohne Verwendung der mathematischen Bibliothek)
Mein Source-Code(fehlerhaft):
**#include<stdio.h>
main() { double x
printf("Geben Sie bitte eine Zahl ein:"); scanf("%lf", &x);
y = x³;
printf("Dreierpotenz davon = %lf", y); } **
4 Antworten
Die plumpe Lösung wäre x = n * n * n.
Dann gibt es die ^-Variante: x = n^3.
Richtig elegant wird es, wenn man die „Basis“ und den „Exponenten“ in einer Variablen ablegt und dann folgendes schreibt:
result = base^exponent.
Dann könnte man noch Kernighan/Ritchie um Rat fragen oder hier nachlesen: http://openbook.galileocomputing.de/c_von_a_bis_z/
Normal macht man das mit
pow(x,y);
Beispiel:
'#include <stdio.h>
'#include <math.h>
void main(void)
{
double x , y, ergebnis;
printf("\nx hoch y :");
printf("\nBitte x eingeben: ");
scanf("%lf", &x);
printf("\nBitte y eingeben:");
scanf("%lf", &y);
ergebnis =pow(x,y);
printf("\nergebnis: %lf", ergebnis);
printf("\nProgrammende");
}
Der Grund: Weil man pow( x hoch y) auch zum Wurzelziehen verwenden kann:
x hoch (1/y) ist die y-Wurzel aus x
2 hoch 0.5 ist die zweite Wurzel aus 2.
Selbst die Funktion schreiben ;) Z.B.
int pot(int base, int potval)
{
for (int i = 0; i < base; i++) // C99 Standard!!
{
base *= base;
}
return base;
}
So, hoffe ich hab jetzt nichts durcheinander gebracht^^
Grüße - Morph 8)
was bedeutet dieses i++? und base *=base bedeutet ja die basis wird mit der basis multipliziert. stimmts? wenn du auch die variablen erklären könnten würdest wäre ich dankbar...
Natürlich, kein Thema :) Ich gehe das mal Stück für Stück durch.
Also als erstes ist da natürlich die Funktionsdeklaration. Diese soll einen int-Wert zurückgeben, eben unser gewünschtes Ergebnis. Du übergibst der Funktion zwei Werte: Die Basis und die Potenz (bei 10³ ist 10 die Basis und ³ die Potenz).
Das "int i" hatte ich jetzt nachgerüstet, damit auch nicht C99-konforme Compiler das Programm schlucken ^^ Es dient für die for-Schleife. In der Schleife wird dann die Potenz errechnet. 10³ entspricht ja nicht mehr als 10 * 10 * 10. Ist also an sich sehr leicht zu errechnen.
Das base *= base multipliziert den aktuellen Wert von Base ... Upps, da ist n Fehler ^^ Hier eine nochmals korrigierte Version (Sry, ist wohl schon ein wenig zu spät heute ...)
int potenz(int base, int potval)
{
int i, tmp_base = base;
for (i = 0; i < potval; i++) // C99 Standard!!
{
base *= tmp_base;
}
return base;
}
So. base *= tmp_base macht jetzt also nichts anderes als base mit dem ursprünglichen Wert von base zu multiplizieren.
Wenn du also z.B. das hier schreibst:
int ergebnis = potenz( 10, 3 );
Dann wird an sich diese Rechnung durchgeführt: 10 * 10 * 10
Soweit dazu, ich hoffe ich konnte es einigermaßen verständlich erläutern ... :) Und sry wegen der hohen Fehlerquote, ist sonst nicht der Fall -.-
Grüße - Morph 8)
Habe auch gerade noch einen Fehler gefunden ... Ich bin urlaubsreif -.-
int potenz(int base, int potval)
{
int i, tmp_base = base;
for (i = 1; i < potval; i++) // C99 Standard!!
{
base *= tmp_base;
}
return base;
}
DAS MUSS jetzt aber funktionieren x_x
Grüße - Morph 8)
Da muss du zuerst die include <math.h> einbinden. Mit einer extra Funktion dafür: pow(); Mit pow(a,b) wird zum Beispiel die b-te Potenz zu a berechnet. Ein Tipp: a hoch (1/3) zieht die dritte Wurzel aus a. pow(x, (1/ 7)); liefert die siebte Wurzel aus x pow(x,(1/n)); liefert die n-te Wurzel aus x. Beispiel: wurzel = pow( a, (1/b); Dabei ist a der Radikand und b der Wurzelexponent. Die Funktion sqrt() dagegen liefert nur die Quadratwurzel einer Zahl.
Korrigiere: Da war n Fehler drin! Asche auf mein Haupt ^^ Hier nochmal die korrekte Funktion:
Varianten wie
funktionieren leider nicht. Dafür ist es ja auch C ;) In anderen Sprachen könnte es vielleicht funktionieren ...
Grüße - Morph 8)