Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Typumwandlungen C++ » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Typumwandlungen C++
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dragon_Fighter
Jungspund


Dabei seit: 10.04.2013
Beiträge: 11

Typumwandlungen C++ Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Formulieren Sie aus den folgenden Ausdrücken C++-Anweisungen:

[latex]w=(x-1)^2[/latex]

[latex]y=w+\frac{x-1}{x+1}[/latex]

[latex]f=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}[/latex]


Berechnen Sie den Wert der Ausdrücke für [latex]x=1[/latex].

Meine Ideen:
Also ich habe das so gemacht (bestimmt sehr umständlich, aber ich möchte ja für f auch die Dezimalzahl haben):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
#include <iostream>
using namespace std;

int x=1,w,y;
double f;

w=(x-1)*(x-1);

y=((x-1)/(x+1))+w;

f=1+(double)x+(((double)x*(double)x)/(double)2)+(((double)x*(double)x*(double)x)/((double)6))+(((double)x*(double)x*(double)x*(double)x)/((double)24));

cout << w << endl;
cout << y << endl;
cout << f << endl;


Nach dem Compilieren und der Ausführung ergibt sich

code:
1:
2:
3:
4:
5:
0
0
2.70833



Ist ja richtig, aber kann man das mit der expliziten Typumwandlung irgendwie praktischer/ kürzer machen?



Viele Grüße

Dragon_Fighter

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dragon_Fighter: 10.04.2013 22:48.

10.04.2013 22:33 Dragon_Fighter ist offline Beiträge von Dragon_Fighter suchen Nehmen Sie Dragon_Fighter in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja, das geht kürzer:
code:
1:
f=1 + x + x*x/2.0 + x*x*x/6.0 + x*x*x*x/24.0;

1. int + double = double
es reicht also, wenn eine der beiden Zahlen double ist, ebenso bei /
2. Zahlen kann man einfach mit .0 am Ende umwandeln, also z.B. 2.0 (die 0 brauchst du nicht unbedingt, 2. geht genauso)

__________________
Syntax Highlighting fürs Board (Link)
11.04.2013 08:06 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich würde die Zahlen einfach vorher schon konvertieren. Für ganzzahlige x muss bereits y eine Fließkommazahl sein (dass y für x=1 ganzzahlig ist, ist "Glück") und eigentlich lese ich in der Aufgabenstellung auch nichts davon, dass die Eingabe x unbedingt ganzzahlig ist.

Zitat:
also z.B. 2.0 (die 0 brauchst du nicht unbedingt, 2. geht genauso)


Bitte nicht!

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Airblader: 11.04.2013 08:26.

11.04.2013 08:26 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Dragon_Fighter
Jungspund


Dabei seit: 10.04.2013
Beiträge: 11

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo, Airblader.

Stimmt, eigentlich könnte man ja die Zahl x gleich vom Typ double auffassen.

Dann hätte ich dieses:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
#include <iostream>
using namespace std;

int main() {

double x=1,w,y,f;

w=(x-1)*(x-1);

y=((x-1)/(x+1))+w;

f=1+x+((x*x)/(double)2)+((x*x*x)/((double)6))+((x*x*x*x)/((double)24));

cout << w << endl;
cout << y << endl;
cout << f << endl;

}


Das sieht schon viel schöner aus - finde ich. Denn ich muss nur noch die Nenner in den Typ double umwandeln. Oder muss ich das gar nicht, weil es reicht, wenn der Zähler vom Typ double ist?

Ich habe das mal ausprobiert, also:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
#include <iostream>
using namespace std;

int main() {

double x=1,w,y,f;

w=(x-1)*(x-1);

y=((x-1)/(x+1))+w;

f=1+x+((x*x)/2)+((x*x*x)/(6))+((x*x*x*x)/(24));

cout << w << endl;
cout << y << endl;
cout << f << endl;

}


und tatsächlich, das liefert ebenfalls

code:
1:
2:
3:
0
0
2.70833
.


Also liege ich wohl richtig damit, dass es vollkommen ausreichend ist, dass der Zähler von diesem Typ ist.

Edit: Jetzt lese ich, dass eulerscheZahl das ja auch schon geschrieben hatte, sorry, total überlesen.

großes Grinsen

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Dragon_Fighter: 11.04.2013 11:56.

11.04.2013 11:49 Dragon_Fighter ist offline Beiträge von Dragon_Fighter suchen Nehmen Sie Dragon_Fighter in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Typumwandlungen C++