Funktion pow und mehr
-
Hallo und guten Morgen liebe Gemeinde.
1stens:
Ich wollte ein Programm schreiben, mit dem ich das Volumen eines Kreiszylinders berechnen kann.
Folgenden Code habe ich aufgesetzt:
#include <iostream> #include <math.h> using namespace std; int main() { double const Pi=3.14; cout<<"\tGerader Kreiszylinder!" << endl; cout<<"Es soll das Volumen eines geraden Kreiszylinders berechnet werden"<<endl; cout<<"Dafuer muss fuer den Radius und die Hoehe des Zylinders jeweils eine"; cout<<"Zahl eingegeben werden!" << endl; float Radius, Hoehe, Volumen; cin >> Radius; cin >> Hoehe; cout<< endl; Volumen = pow(Radius)*Pi*Hoehe; cout<<"Radius: " << Radius << endl; cout<<"Pi: " << Pi << endl; cout<<"Hoehe: " << Hoehe << endl; cout<<"Voulemen:" << Volumen << endl; return 0; } [\cpp] Ich bekomme folgende Fehlermeldung [cpp] 'pow' : Keine überladene Funktion akzeptiert 1 Argumente
Ist die Funktion "pow" überhaupt die richtige Funktion um einen Radius in´s Quadrat zu nehmen?? Falls nicht, welche Funktion muss ich statt dessen verwenden? Falls die Funktion doch stimmt, was habe ich falsch gemacht?? Falls ich die Funktion "pow" verwende muss ich doch die Bibliothek math.h einbeziehen?
Kann man bei der deklaration von Pi auch
int const Pi = 3.14;
schreiben? Weil double verbraucht doch mehr Speicher als int. Wobei ... was mir gerade kommt... int kann man nicht verwenden, da int für Ganzzahlen verwendet wird. Kann man statt double auch float verwenden??
2tens
Was ist ein Alias??
3tens
Wie oft werden denn die Funktionen "typedef" und "sizeof" verwendet? Was "typedef" und "sizeof" sind und was sie bedeuten, weiß ich, aber mir fehlen Beispiele.... Könnt ihr mir welche geben??
Danke schon einmal für die Antworten im Voraus.
Gruß
Max
-
silent_max schrieb:
Ist die Funktion "pow" überhaupt die richtige Funktion um einen Radius in´s Quadrat zu nehmen??
Jain. pow ist eine allgemeine Potenzierungsfunktion (Englisch: Power). Auch für Zweierpotenzen.
Falls nicht, welche Funktion muss ich statt dessen verwenden?
Du kannst auch einfach Radius * Radius schreiben.
Falls die Funktion doch stimmt, was habe ich falsch gemacht??
Du musst den Exponenten angeben. Dringend: Lerne eine Referenz zu benutzen, zum Beispiel eine dieser beiden:
http://www.cplusplus.com/
http://en.cppreference.com/w/Falls ich die Funktion "pow" verwende muss ich doch die Bibliothek math.h einbeziehen?
Jain.
- Das heißt cmath, nicht math.h. math.h ist C, anscheinend hast du auch einen C-Compiler auf dem System, der die math.h zur Verfügung stellt oder dein C++-Compiler ist abwärtskompatibel zu C. In cmath sind aber mehr Sachen drin als in math.h, Sachen die in C gar nicht möglich sind. Nimm also cmath.
- Das ist keine Bibliothek, sondern der Header zu der Mathematikbibliothek. In C müsstest du die Mathebibliothek in der Regel noch explizit dazulinken, in C++ ist diese in der Standardbibliothek enthalten.Kann man bei der deklaration von Pi auch
int const Pi = 3.14;
schreiben? Weil double verbraucht doch mehr Speicher als int. Wobei ... was mir gerade kommt... int kann man nicht verwenden, da int für Ganzzahlen verwendet wird. Kann man statt double auch float verwenden??
Kannst du, aber wozu? Selbst wenn der Größenunterschied relevant wäre, ist es hier doch ein Konstante und ist irgendwo fest im Programm gespeichert. Dein fertiges Programm wäre dann 4 Byte kleiner. Uiuiui, das lohnt sich.
Sei auch nicht aus falschen Gründen sparsam. Auf einer "normalen" CPU ist double bei "normalen" Rechnungen gleich schnell wie float, aber viel genauer. Bei float kommt man recht flott zu signifikanten Rechenungenauigkeiten, double ist für alle praktischen Zwecke mehr als ausreichend. Wenn du keinen sehr guten Grund hast, etwas anders zu nehmen, bleib bei den "natürlichen" Datentypen.2tens
Was ist ein Alias??
Nichts was mit C++ zu tun hat. Ansonsten kannst du ja mal in einem Lexikon nachgucken. Jemand meint damit vermutlich eine Referenz
3tens
Wie oft werden denn die Funktionen "typedef" und "sizeof" verwendet?
Das sind keine Funktionen, sondern Schüsselwörter der Sprache. typedef kommt in der Praxis recht oft vor, sizeof wirst du (zumindest hier im Forum) eher nur dann sehen, wenn jemand ein "C mit Klassen"-Programm als C++ verkauft.
Was "typedef" und "sizeof" sind und was sie bedeuten, weiß ich, aber mir fehlen Beispiele.... Könnt ihr mir welche geben??
Wenn du weißt, was sie bedeuten, was willst du dann mit einem Beispiel? Was möchtest du wissen? Kennst du Google?
Beschaff dir dringend ein gutes Buch, siehe den zweiten Link in meiner Signatur.
-
silent_max schrieb:
Ist die Funktion "pow" überhaupt die richtige Funktion um einen Radius in´s Quadrat zu nehmen?? Falls ich die Funktion "pow" verwende muss ich doch die Bibliothek math.h einbeziehen?
pow ist schon ok, allerdings frage ich mich, welche Größe der Exponent haben soll? Frägst du dich das nicht? Ne, du sollst nicht math.h sondern cmath einbinden.
silent_max schrieb:
Kann man bei der deklaration von Pi auch
int const Pi = 3.14;
schreiben? Weil double verbraucht doch mehr Speicher als int. Wobei ... was mir gerade kommt... int kann man nicht verwenden, da int für Ganzzahlen verwendet wird. Kann man statt double auch float verwenden??
Du kannst schon einen int nehmen. Dann hast du aber kein PI mehr, sondern ein PIchen. Aber du hast ja schon erkannt, dass int für Ganzzahlen ist. Also ich nehme immer double für Kommazahlen. Huetzutage interessiert mich der Speicherverbrauch nicht mehr.
silent_max schrieb:
Was ist ein Alias??
Ein Alias ist ein anderer Name für etwas. Du hast z.B. eine Variable int i und machst einen Alias u für i. Dann hast du 2 Namen mit denen du die Variable ansprechen kannst.
silent_max schrieb:
Wie oft werden denn die Funktionen "typedef" und "sizeof" verwendet? Was "typedef" und "sizeof" sind und was sie bedeuten, weiß ich, aber mir fehlen Beispiele.... Könnt ihr mir welche geben??
sizeof und typedef sind keine Funktionen. sizeof nimmst du, wenn du die Größe deines Objekts benötigst, z.B. wenn du ein rohes Array hast und die die Anzahl Elemente des Arrays herausfinden willst, machst du sizeof(array)/sizeof(*array). Nimmst du z.B. wenn du etwas allgemein halten willst. z.B. einen typedef auf einen Container, dessen Typ du beliebig ändern willst. Willst du z.B. irgendwelche Messungen durchführen, machst du einen typedef auf einen Container und benutzt dann den Alias im Programm. Willst du den Typ des Containers ändern, änderst du einfach nur den typedef und musst damit nicht alles im ganzen Programm umändern.
-
Wenn du weißt, was sie bedeuten, was willst du dann mit einem Beispiel? Was möchtest du wissen? Kennst du Google?
Beschaff dir dringend ein gutes Buch, siehe den zweiten Link in meiner Signatur.
Mein Lehrer, der sehr fit in C- und in C++-Programmierung ist, hält einiges von dem "Buch" "C++ in 21 Tagen".
Tut mir leid SppJ, ich kann aber nichts dafür, dass ich mir dieses Buch antun muss und bin somit gebunden.
Ich würde einfach gern Beispiele für typedef und sizeof wissen.
Gruß
Max
-
Mein Lehrer, der sehr fit in C- und in C++-Programmierung ist, hält einiges von dem "Buch" "C++ in 21 Tagen".
So schlecht ist das Buch gar nicht, man sollte halt nicht versuchen es auch wirklich in 21 Tagen durchzuarbeiten.
Beispiele für
typedef
: hier der Anfang vonbasic_string.h
`template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string { typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type; // Types: public: typedef _Traits traits_type; typedef typename _Traits::char_type value_type; typedef _Alloc allocator_type; typedef typename _CharT_alloc_type::size_type size_type; typedef typename _CharT_alloc_type::difference_type difference_type; typedef typename _CharT_alloc_type::reference reference; typedef typename _CharT_alloc_type::const_reference const_reference; typedef typename _CharT_alloc_type::pointer pointer; typedef typename _CharT_alloc_type::const_pointer const_pointer; typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator; typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string> const_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator; typedef std::reverse_iterator<iterator> reverse_iterator;
usw.
sizeof` wird heutzutage wie schon gesagt eher weniger benutzt.
-
silent_max schrieb:
Ich würde einfach gern Beispiele für typedef und sizeof wissen.
typedef int sint;
Hier wird festgelegt, dass statt
int
überallsint
geschrieben werden kann. Es kann syntaktisch nicht mehr zwischenint
undsint
unterschieden werden.
Sieh dir den Wikipedia-Artikel dazu an.sizeof (int)
Ist ein Compile-Zeit konstanter Ausdruck, der die Größe eines
int
s auf deiner Maschine repräsentiert. Kann auf jede Variable und jeden Typ angewandt werden.
Sieh dir den Wikipedia-Artikel dazu an.
-
typedef
hat auch noch eine spezielle Syntax fuer Funktionszeiger:typedef void (*f)(int); // f kann nun als Typ fuer Funktionen des Prototyps: // "void Funktionsname(int)" verwendet werden // Beispiel: void bla(int i) { std::cout << i; } // funktionsdefinition ... f func = &bla; func(5); // ruft jetzt bla auf
-
Ersteinmal Danke für Dein Posting.
So schlecht ist das Buch gar nicht, man sollte halt nicht versuchen es auch wirklich in 21 Tagen durchzuarbeiten.
Warum meinst Du, dass ich mir solange Zeit lasse? Ich möchte es halt schon verstehen. In 21 Tagen eine Programmiersprache zu lernen ist eh fast unmöglich.
Und dank des Forums kapiere ich zwar nicht alles aber immerhin mehr, als in dem "Buch" steht. Spätestens in einem Jahr, wenn ich aus der Schule bin, möchte ich eh mehr das richtige C++ lernen.
-
silent_max schrieb:
Warum meinst Du, dass ich mir solange Zeit lasse? Ich möchte es halt schon verstehen. In 21 Tagen eine Programmiersprache zu lernen ist eh fast unmöglich.
Ja, aber dir ist schon klar, dass es für C++ mindestens Jahre dauert.
-
Sone schrieb:
sizeof int
Ist ein Compile-Zeit konstanter Ausdruck, der die Größe eines
int
s auf deiner Maschine repräsentiert.Nur wenn du noch Klammern um int hinzufügst. Sonst ist es bloss ill-formed.
-
camper schrieb:
Sone schrieb:
sizeof int
Ist ein Compile-Zeit konstanter Ausdruck, der die Größe eines
int
s auf deiner Maschine repräsentiert.Nur wenn du noch Klammern um int hinzufügst. Sonst ist es bloss ill-formed.
Du hast Recht. Ich dachte, die Klammer-freie Version funktioniert sowohl für Variablen als auch für Typnamen.