Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.01.2004, 00:26
Sprengmeister



Hiho,
Wie kann ich verhindern das mir der Compi immer die Zahlen aufrundet? Bzw wie kann ich angeben das er bis zur 4. Stelle hinter dem Komma rundet?

Und wie inizialisier ich eine klasse bitte?

Wenn ich mache:

Quellcode:class Hans
{
void Kasten()
{
}
};
und ich es probiere per:
Quellcode:void main(void)
{
Hans Kasten
}
mag er das nicht.
Danke

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche
001
18.01.2004, 00:38
CN



1.
Quellcode:int main()
{
Hans weissdergeier;
}
wenn überhaupt ..

2. macht zwar bei deiner class eh nich so viel sinn weil die funktion nix macht
aber falls du da mal drauf zugreiffen willst sollte die nicht (wie jetzt) private

3. wie rundest du denn dass er aufrundet O_o

--


Dieser Beitrag wurde am 18.01.2004 um 00:40 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
18.01.2004, 00:51
Sprengmeister



Wenn ich ihn z.b. per pi rechnen lasse:
Quellcode:#include <iostream.h>

void main()
{
float winkel;
float radius;
double flaeche;

cout << "Bitte Winkel eingeben: ";
cin >> winkel;
cout << "Bitte Radius eingeben: ";
cin >> radius;

flaeche = ((winkel / 360) * (radius * radius)) * 3,141592654;

cout << "Die Flaeche betraegt: " << flaeche << "cm2" << endl;
}

Dann rudet er das ergebniss meistens auf oder ab...

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.


Dieser Beitrag wurde am 18.01.2004 um 00:52 von Sprengmeister bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
18.01.2004, 00:59
CN



verabschiede dich erstmal von .h-headern und void main

die klammern sind unnötig
ausserdem steht da 3,141592654;, der rundet das nich sondern sieht das als 3 weil das keine fliesspunktzahl is.. korrekt müsste das heissen

Quellcode:#include <iostream>

using namespace std;

int main()
{
float winkel;
float radius;
double flaeche;

cout << "Bitte Winkel eingeben: ";
cin >> winkel;
cout << "Bitte Radius eingeben: ";
cin >> radius;

flaeche = winkel / 360 * radius * radius * 3.141592654;
//flaeche = ((winkel / 360) * (radius * radius)) * 3,141592654;

cout << "Die Flaeche betraegt: " << flaeche << "cm2" << endl;
}

--


Dieser Beitrag wurde am 18.01.2004 um 01:00 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
18.01.2004, 01:09
Sprengmeister



per double kommt das selbe raus. Das Phänomen nennt sich Precision. er gibt bei double 0.49999990 auch 0.5 aus...

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.


Dieser Beitrag wurde am 18.01.2004 um 01:09 von Sprengmeister bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
18.01.2004, 01:17
CN



he?
wovon redest du überhaupt..

wenn ich das prog aus meinem post nehme zeigt der mir das selbe ergebnis wie mein taschenrechner
ka wo da gerundet werden soll

--

zum Seitenanfang zum Seitenende Profil || Suche
006
18.01.2004, 02:18




(none)

--

zum Seitenanfang zum Seitenende Profil || Suche
007
18.01.2004, 13:51
CN



#include <cmath>

soweit ich das beurteilen kann steht im topic c++

--

zum Seitenanfang zum Seitenende Profil || Suche
008
18.01.2004, 15:49
Sprengmeister



Cn hatte das "," übersehen. Danke, nun funktioniert es.

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche
009
18.01.2004, 20:12
apfelkorn



btw CN: du hast return 0; vergessen :)

--

zum Seitenanfang zum Seitenende Profil || Suche
010
18.01.2004, 20:49
CN



apfelkorn

Zitat:
In C++ main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:
Quellcode:#include<iostream>

int main()
{
        std::cout << "This program returns the integer value 0\n";
}
src: http://www.research.att.com/~bs/bs_faq2.html#void-main

(weh jetz behauptet einer ich hätte das extra vergessen um das quoten zu können :o)

--


Dieser Beitrag wurde am 18.01.2004 um 20:50 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
19.01.2004, 00:24
Kriz



Zu deiner ersten Frage:

4,99999... ist mathematisch 5. Auf Rechner ist die Nachkommaperiode nicht beliebig darstellbar, auch nicht mit BCD Darstellung, wegen der endlichen Ressourcen eines Rechners. Daher wird das Laufzeitsystem jeden Dezimalbruch mit Periode 9, welches die systembedingte Nachkommagenauigkeit der Mantisse darzustellen in der Lage ist, automatisch aufrunden. Das zu verhindern geht eventuell nur durch ein Setzen der Nachkommastellenpräzision mit den <iomanip.h> Manipulatoren auf einen niedrigeren Ausgabepräzision (bspw. nur 4 oder 5 Nachkommastellen). Garantieren kann dir das aber keiner.

Zu deiner zweiten Frage:

Was nicht bereits beantwortet worden ist, läßt sich nur durch folgenden Satz ergänzen: Begreife erstmal das Klassen/Objekt-Prinzip von C++, denn das was du da verbrochen hast, ist einfach nur fsck ;)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
012
19.01.2004, 10:25
apfelkorn



hui, is ja dreckig - solche ausnahmen sind ja fies :)
rührt wahrscheinlich noch von der alten c-version her.
aber es bleibt dabei:int main is ne integer-funktion und als solches sollte sie schon einen wert zurückgeben - rein aus der tatsache heraus, das sobald unnötige ausnahmen (als das is wirklich eine unnötige ausnahme) gemacht werden, diese vielleicht ausgedehnt werden auf andere fälle.

ist doch einfacher wenn man sich einfach nur merkt: "für alle typisierten funktionen muss rückgabetyp vorhanden sein" und nicht zusätzlich: "ausser für main, winmain blah und nochmal blah."

--


Dieser Beitrag wurde am 19.01.2004 um 10:26 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
19.01.2004, 14:19
CN



ne in c geht das nich (höchstens mit void main was aber auch kein valid c is..)
ausserdem returned main ja da was, nämlich "the integer value 0"
man kann ja trotzdem return 0; schreiben

--


Dieser Beitrag wurde am 19.01.2004 um 14:20 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
014
19.01.2004, 14:55
Kriz



Und bevor jetzt noch jemand meint, was Uncooles loszulassen: Das mit den Manipulatoren bezog sich rein auf die Ausgabe und hat nichts mit der Berechnung einer Fließkommazahl zu tun! Da wollen wir mal sachlich bleiben ;)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
015
20.01.2004, 14:33
Sprengmeister



Kleine zwetschgen nochmal. Mein Compiler bringt mir immer den Fehler:

Kompilierung läuft...
Klassen.cpp
Linker-Vorgang läuft...
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/Mathematik_Kreis.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Mathematik_Kreis.exe - 2 Fehler, 0 Warnung(en)

woran liegt das bitte?

hier mal das prog:
Quellcode:#include <iostream.h>
#include <math.h>

int kreissektor(void)
{
    double winkel_m;
    double radius_r;
    double durchmesser_d;
    double bogenlaenge_b;
    double flaeche_A;
    double exponent_pi = 3.141592654;

    cout << "Bitte geben Sie die geforderten Parameter ein. Sollte ihnen ein Parameter unbekannt sein, so geben Sie 0 ein und bestätigen Sie. " << endl;
    
    cout << "Bitte geben sie den Winkel ein: " << endl;
    cin >> winkel_m;

    cout << "Bitte geben sie den Radius ein: " << endl;
    cin >> radius_r;

    cout << "Bitte geben sie den Durchmesser ein: " << endl;
    cin >> durchmesser_d;

    cout << "Bitte geben sie die Bogenlaenge ein: " << endl;
    cin >> bogenlaenge_b;

    if(winkel_m = 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }
    
    if((radius_r = 0) && (durchmesser_d = 0))
    {
        cout << "Fehler! Sie haben keinen Radius oder Durchmesser eingegeben. Sind ihnen diese Parameter unbekannt, kann die Berechnung leider nicht durchgefuehrt werden! " << endl;
    }
    
    if(radius_r = 0)
    {
        flaeche_A = (bogenlaenge_b / 2) * (durchmesser_d / 2);
    }

    if(durchmesser_d = 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }

    if(bogenlaenge_b = 0)
    {
        flaeche_A = (winkel_m / 360) * (radius_r * radius_r) * exponent_pi;
    }

    return 0;
}

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche
016
20.01.2004, 14:55
WareWolf



nicht dass ich viel Ahnung habe, aber wo ist dein main ()

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
017
20.01.2004, 15:05
Sprengmeister



Ah daran lags. Danke. Wie ruf ich die funktion dann von main aus auf bitte? per kreissektor() funktioniert es nicht, da gibt er nen fehler aus...
Wieso funktioniert das nicht bitte? Er rechnet mir die Zahlen nicht aus. Als cih mal reingeschrieben habe das er Muh ausgeben soll bei ner bestimmten aktion hat er das nciht gemacht, als ich die zahlen so eingegeben hatte. Gibts auch eine elegantere möglichkeit als das das so zu machen bitte?
Quellcode:#include <iostream.h>
#include <math.h>

int main()
{
    double winkel_m;
    double radius_r;
    double durchmesser_d;
    double bogenlaenge_b;
    double flaeche_A;
    double exponent_pi = 3.141592654;

    cout << "Bitte geben Sie die geforderten Parameter ein. Sollte ihnen ein Parameter unbekannt sein, so geben Sie 0 ein und bestätigen Sie. " << endl;
    
    cout << "Bitte geben sie den Winkel ein: " << endl;
    cin >> winkel_m;

    cout << "Bitte geben sie den Radius ein: " << endl;
    cin >> radius_r;

    cout << "Bitte geben sie den Durchmesser ein: " << endl;
    cin >> durchmesser_d;

    cout << "Bitte geben sie die Bogenlaenge ein: " << endl;
    cin >> bogenlaenge_b;

    if(winkel_m = 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }
    
    if((radius_r = 0) && (bogenlaenge_b = 0))
    {
        flaeche_A = (winkel_m / 360) * ((durchmesser_d / 2) * (durchmesser_d / 2)) * 3.141592654;
    }
    
    if((radius_r = 0) && (bogenlaenge_b = 0) && (durchmesser_d = 0))
    {
        cout << "Fehler! Sie haben weder die Bogenlaenge noch den Radius oder den Durchmesser eingegeben. Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }

    if((winkel_m = 0) && (bogenlaenge_b = 0))
    {
        cout << "Fehler! Sie haben weder die Bogenlaenge noch den Winkel eingegeben. Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }

        if((radius_r = 0) && (durchmesser_d = 0))
    {
        cout << "Fehler! Sie haben keinen Radius oder Durchmesser eingegeben.Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }
    
    if(radius_r = 0)
    {
        flaeche_A = (bogenlaenge_b / 2) * (durchmesser_d / 2);
    }

    if(durchmesser_d = 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }

    if(bogenlaenge_b = 0)
    {
        flaeche_A = (winkel_m / 360) * (radius_r * radius_r) * 3.141592654;
    }

    cout << "Die Flaeche des Kreissektors betraegt: " << flaeche_A << "cm2!" << endl;

    return 0;
}
Mir fällt grade ein das ich die Fehlerausgabe nicht in if teile verschachteln hätte müssen sondern einfach nur die fläche in den bestimmten if teilen ausgeben müssen und beim rest ein fehler machen.

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.


Dieser Beitrag wurde am 20.01.2004 um 15:30 von Sprengmeister bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
20.01.2004, 15:41
Kriz



= != == (hrhrhr)

Soll heißen: = ist der Zuweisungsoperator und == ist der Vergleichsoperator "GLEICH". Du mußt bei allen if's aus = eben == machen. Anfängerfehler :D

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
019
20.01.2004, 15:54
Sprengmeister



Danke, aber trozdem funktioniert es nicht :/

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche
020
20.01.2004, 15:56
CN



ein weiser mann sagte mal:

Zitat:
hol dir mal en c++-buch
und dann
Zitat:
Standard library facilities are declared in namespace std in headers without a .h suffix.
#include <iostream>
#include <cmath>

das geht vielleicht noch beim m$ compiler durch, aber wo anders wahrscheinlich nich

eee.
was funktioniert nicht?

--


Dieser Beitrag wurde am 20.01.2004 um 15:57 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
021
20.01.2004, 16:00
Sprengmeister



Ein weiser man sagte mal:

Kompilierung läuft...
Klassen.cpp
c:\programme\microsoft visual studio\myprojects\mathematik_kreis\klassen.cpp(2) : fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'math': No such file or directory
Fehler beim Ausführen von cl.exe.

Und er geht einfach nicht in die if funktion rein, auch wenn er sie ausführen müsste. er bringt einfach nur die letzte cout anweisung und amen...

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche
022
20.01.2004, 16:04
Mazze



Übrigens ist das eigentlich nicht runden, wenn man x Periode 9 als x+1 darstellt, da es mathematisch schon korrekt ist.
1/9 = 0.Periode1
2/9 = 0.Periode2
9/9 = 0.Periode9
Und 9/9 ist 1, desswegen ist 0.Periode9 auch 1.

cu

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
023
20.01.2004, 16:04
CN



lesen soll gelernt sein

1.
ich sagte "cmath" nich "math"
(und using namespace std; nich vergessen ..)

2.

Zitat:
= != == (hrhrhr)
in den ganzen if-zweigen prüfst du nich auf gleichheit sondern weist etwas zu

--


Dieser Beitrag wurde am 20.01.2004 um 16:07 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
024
20.01.2004, 16:09
Sprengmeister



Ja, aber ich hab das == ja ausgebessert.
Quellcode:#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    double winkel_m;
    double radius_r;
    double durchmesser_d;
    double bogenlaenge_b;
    double flaeche_A;
    double exponent_pi = 3.141592654;

    cout << "Bitte geben Sie die geforderten Parameter ein. Sollte ihnen ein Parameter unbekannt sein, so geben Sie 0 ein und bestätigen Sie. " << endl;
    
    cout << "Bitte geben sie den Winkel ein: " << endl;
    cin >> winkel_m;

    cout << "Bitte geben sie den Radius ein: " << endl;
    cin >> radius_r;

    cout << "Bitte geben sie den Durchmesser ein: " << endl;
    cin >> durchmesser_d;

    cout << "Bitte geben sie die Bogenlaenge ein: " << endl;
    cin >> bogenlaenge_b;

    if(winkel_m == 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }
    
    if((radius_r == 0) && (bogenlaenge_b == 0))
    {
        flaeche_A = (winkel_m / 360) * ((durchmesser_d / 2) * (durchmesser_d / 2)) * 3.141592654;
    }
    
    if((radius_r == 0) && (bogenlaenge_b == 0) && (durchmesser_d == 0))
    {
        cout << "Fehler! Sie haben weder die Bogenlaenge noch den Radius oder den Durchmesser eingegeben. Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }

    if((winkel_m == 0) && (bogenlaenge_b == 0))
    {
        cout << "Fehler! Sie haben weder die Bogenlaenge noch den Winkel eingegeben. Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }

        if((radius_r == 0) && (durchmesser_d == 0))
    {
        cout << "Fehler! Sie haben keinen Radius oder Durchmesser eingegeben.Sollten ihnen einer dieser Parameter unbekannt sein, so kann die Berechnung nicht durchgeführt werden! " << endl;
    }
    
    if(radius_r == 0)
    {
        flaeche_A = (bogenlaenge_b / 2) * (durchmesser_d / 2);
    }

    if(durchmesser_d == 0)
    {
        flaeche_A = bogenlaenge_b / 2 * radius_r;
    }

    if(bogenlaenge_b == 0)
    {
        flaeche_A = (winkel_m / 360) * (radius_r * radius_r) * 3.141592654;
    }

    cout << "Die Flaeche des Kreissektors betraegt: " << flaeche_A << "cm2!" << endl;

    return 0;
}

--

_______________________
-----I_______________________I-----
This is Nudelholz. Copy Nudelholz in your Signature to make better Kuchens and other Teigprodukte.

zum Seitenanfang zum Seitenende Profil || Suche