Potenzwerte berechnen
-
Hab mein Problem gelöst :
/* Programm das Potenzwerte berechnet */ #include <stdio.h> #include <math.h> double pow(); //declare function pow that can potentialize constants int main() { double x, y; //initialize x,y both typ double // ask for x, x constitutes a konstant printf("Bitte geben Sie die Konstante ein : "); scanf ("%lf", &x); // ask for y, y constitutes a potency printf("Bitte eine Potenz eingeben : "); scanf ("%lf", &y); fflush(stdin); //delete input buffer printf("Potenz von x hoch y : %.2lf\n", pow(x, y)); return 0; } // So abgeädert, dass alle Potenzen ausgerechnet werden könnenDanke an Euch

-
Du gibst bei deine Funktionsdeklaration keien Parameter an.
Daher kann der Compiler nicht wissen, dass die Funktion pow() zwei double-Parameter erwartet.Entweder richtig deklarieren oder durch ein cast richtig übergeben oder den entsprechende Header (math.h) einbinden.
-
Wenn du math.h einbindest solltest du deine Deklaration weglassen. Die steht schon in math.h
-
Ja, also meines Wissens sind in C weder überladene Funktionen noch überschriebene Funktionen wirklich sinnvoll... wenn das also ohne Compilergemeckere gehen sollte, dann hast du schlichtweg Glück gehabt.
Hier noch ein drittes Mal:
Entferne deine Deklaration.Deklarationen werden eigentlich nur in zusammenhang mit entsprechenden Funktionsdefinitionen genutzt. Die Nutzung sowohl von Deklaration als auch Definition impliziert, dass du dir deine eigenen Funktionen einfügst

-
DaRe schrieb:
Hallo Zwiebels,
solltest du, wenn du schon einen double für die Basis benutzt, nicht auch mit einem %lf scanf durchführen:
scanf("%lf", &x);Zeichen Umwandlung
...Was soll denn der Unsinn?
Oben scanf nennen und danach dann die Formatspezifizierer für printf aufführen?
Falls du es nicht weißt, die sind nicht gleich.
-
Und ich dachte für Potenz reicht ein simpler boolscher Wert.
-
DaRe schrieb:
Das gleiche gilt übrigens auch für printf()
mit deinen %f liest du nur die Hälfte, also 4 Byte, der 8 Byte langen double Variablen result aus.Schon wieder falsch.
Wo steht, dass float 4 und double 8 Byte lang sind?
Ein float kommt nie bei printf an, wird zuvor als Argument immer in double gewandelt, deshalb ist auch %f für float und double spezifiziert und nicht etwa %lf.
-
Wutz schrieb:
DaRe schrieb:
Hallo Zwiebels,
solltest du, wenn du schon einen double für die Basis benutzt, nicht auch mit einem %lf scanf durchführen:
scanf("%lf", &x);Zeichen Umwandlung
...Was soll denn der Unsinn?
Oben scanf nennen und danach dann die Formatspezifizierer für printf aufführen?
Falls du es nicht weißt, die sind nicht gleich.Ok, das ist mein Fehler.
Wutz schrieb:
DaRe schrieb:
Das gleiche gilt übrigens auch für printf()
mit deinen %f liest du nur die Hälfte, also 4 Byte, der 8 Byte langen double Variablen result aus.Schon wieder falsch.
Wo steht, dass float 4 und double 8 Byte lang sind?
Ein float kommt nie bei printf an, wird zuvor als Argument immer in double gewandelt, deshalb ist auch %f für float und double spezifiziert und nicht etwa %lf.Hier hast du eine Information über die Größe von float und double:
Type Bytes Bits Range
short int 2 16 -32,768 -> +32,767 (16kb)
unsigned short int 2 16 0 -> +65,535 (32Kb)
unsigned int 4 16 0 -> +4,294,967,295 ( 4Gb)
int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
long int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
signed char 1 8 -128 -> +127
unsigned char 1 8 0 -> +255
float 4 32
double 8 64
long double 12 96http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html
Wenn die Werte nicht dem heutigen Standard entsprechen findest du einige Zeilen weiter oben:
ANSI has the following rules:
short int <= int <= long int
float <= double <= long doublehttp://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html
Wenn du mir nun also weis machen willst, dass ein float nie weniger Speicher als ein double hätte, dann bezweifle ich das doch sehr. Wenngleich die 4 bzw. 8 Bytes aus diesem Artikel stammen.Die Modifier hab ich mir eben nochmal angeschaut. Dass zwischen float und double bei printf eignetlich gar nicht unterschieden wird, ist mir neu gewesen.
-
DaRe schrieb:
Hier hast du eine Information über die Größe von float und double:
Type Bytes Bits Range
short int 2 16 -32,768 -> +32,767 (16kb)
unsigned short int 2 16 0 -> +65,535 (32Kb)
unsigned int 4 16 0 -> +4,294,967,295 ( 4Gb)
int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
long int 4 32 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
signed char 1 8 -128 -> +127
unsigned char 1 8 0 -> +255
float 4 32
double 8 64
long double 12 96http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html
Wenn die Werte nicht dem heutigen Standard entsprechen findest du einige Zeilen weiter oben:
ANSI has the following rules:
short int <= int <= long int
float <= double <= long doublehttp://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html
Wenn du mir nun also weis machen willst, dass ein float nie weniger Speicher als ein double hätte, dann bezweifle ich das doch sehr. Wenngleich die 4 bzw. 8 Bytes aus diesem Artikel stammen.Die Modifier hab ich mir eben nochmal angeschaut. Dass zwischen float und double bei printf eignetlich gar nicht unterschieden wird, ist mir neu gewesen.
Selfowned?
-
DaRe schrieb:
Wutz schrieb:
Wo steht, dass float 4 und double 8 Byte lang sind?
Ein float kommt nie bei printf an, wird zuvor als Argument immer in double gewandelt, deshalb ist auch %f für float und double spezifiziert und nicht etwa %lf.Hier hast du eine Information über die Größe von float und double:
...Da hast du aber brav was abgeschrieben.
ANSI C definiert für die 3 Fließkommatypen keine Größen, sondern (Mindest)Bereiche, definiert in float.h; in wieviele Bytes der Compilerbauer das abbildet ist seine Sache und unspezifiziert.
Da hilft dir dein zusammengegoogeltes Zeugs nichts.
Für integrale Typen werden übrigens auch nur Mindestbereiche aber hier auch Mindestgrößen spezifiziert.DaRe schrieb:
Die Modifier hab ich mir eben nochmal angeschaut. Dass zwischen float und double bei printf eignetlich gar nicht unterschieden wird, ist mir neu gewesen.
Zeigt auch wieder, dass du den Standard nur vom Hörensagen kennst und somit auch die dort sehr wohl spezifizierten Standardargumentumwandlungen.