C++ Sägezahnschwinnung mit der Periode 1

Stephan Liebig

Erfahrenes Mitglied
Also ich habe heute wieder eine neue Aufgabe zu bewältigen.

1.1) Es ist eine Funktion double u(double t) zu programmieren, welche eine periodische
„Sägezahnschwingung“ mit der Periode 1 darstellt:

Speziell im Intervall [0,1) ist u(t) = t ;
für andere t ist u entsprechend zu bestimmen.
Verwenden Sie dazu einen geeigneten Cast-
Operator, um double in int „umzuwandeln“.


Ich habe mir jetzt überlegt, diese Funktion muss linear sein. Also u(t) = t wie oben genannt. Da sie periodisch ist, kann ich ja sagen, dass sie bei t = 1 wieder bei t = 0 anfangen soll, oder?
 
Meine würde jetzt so aussehen:

C++:
t = t + 0.01;
if(t == 1)
  t = 0;

Welche Schleife verwendet man für sowas?

[edit]
Bzw. wenn ich es so mache, dass man das t manuell eingibt. Dieser gibt jetzt z.b. 4,3 ein. Wie kann ich automatisch den ganzzahligen Teil rausfinden, damit er diesen dann davon subtrahiert um 0,3 raus zu bekommen?
 
Zuletzt bearbeitet von einem Moderator:
Bzw. wenn ich es so mache, dass man das t manuell eingibt. Dieser gibt jetzt z.b. 4,3 ein. Wie kann ich automatisch den ganzzahligen Teil rausfinden, damit er diesen dann davon subtrahiert um 0,3 raus zu bekommen?

Die Frage wird bereits in der Aufgabenstellung beantwortet!

Verwenden Sie dazu einen geeigneten Cast-
Operator, um double in int „umzuwandeln“.

Wenn du double in int konvertierst, werden automatisch die Nachkommastellen abgeschnitten:

Code:
double u (double t)
{    return t - (int)t; }
 
C++:
        ...
        double t(0);
	int u(0);
        ...
	cout << "   Praktikum 4.1" << endl;
	cout << "----------------------------------------------------------" << endl;
	cout << "   Bitte geben Sie ein t ein: ";
	cin >> t;
	
	u = t;
	u = t - u;

	if(u == 0)
		u = 1;
	cout << endl << "An der Stelle " << t << "Betraegt u(t) = " << u;

Aber ich beikomme bei der Eingabe von 5.6 als Ergebnis 5
 
Zuletzt bearbeitet von einem Moderator:
Wie jetzt?!
Du machst auch kein Cast. Das Casten ist das '(int)'. So sollte es aussehen:
Code:
u = t - (int)t;
 
Hi.
Wie jetzt?!
Du machst auch kein Cast. Das Casten ist das '(int)'. So sollte es aussehen:
Code:
u = t - (int)t;
Doch, er macht einen impliziten Cast, da u ein int ist.

Allerdings kann selbst dann nicht 5 herauskommen.

Es macht vor allem keinen Sinn das Resultat der Subtraktion wieder an u zuzuweisen, da u ein int ist, aber eigentlich ein Wert im Intervall [0, 1) herauskommen soll. Außerdem sollte man in C++ immer die neuen Cast Operatoren verwenden:

C++:
double res = t - static_cast<int>(t);
Gruß
 
Zuletzt bearbeitet:
Zurück