Hilfe bei einer Informatik Praktikumsaufgabe
-
Hallo zusammen,
ich brauche mal ein wenig Hilfe bei einer Aufgabe. Ich weiß einfach nicht, wie ich die Aufgabe angehen soll.
Aufgabe:
Es ist eine Funktion double u(double t) zu programmieren, welche eine periodische "Sägezahnschwingung" mit der Periode 1 darstellt:
Speziell im Intervall [O,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".
P.S. Ich bin noch C++ Anfänger, da ich erst seit einem Monat C++ programmiere.
Vielen Dank
Jet Force 221
-
Also von "Sägezahnschwingung" habe ich keine Ahnung aber casten kannst du so
double Double=123.456789; //Double==123.456789 int Integer=static_cast<int>(Double); //Integer==123Ich hoffe du weist was mit "Sägezahnschwingung" gemeint ist, wenns daran liegt dann eher Matheforum

-
JetForce221 schrieb:
Speziell im Intervall [O,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 denke es läuft darauf hinaus, dass du mit einem Cast nach int die Gaußsche Klammer darstellen kannst, also ungefähr t - int(t). Wobei ich eher sagen würde, dass das für negative t nicht hinhaut.
P.S. Ich bin noch C++ Anfänger, da ich erst seit einem Monat C++ programmiere.
Logisch, sonst wär die Aufgabe auch witzlos

-
#include <cmath> double u(double t) { return t - std::floor(t); }floor() liefert die nächstniedrigere ganze zehl
-
hallo,
ich les mir hier gerade mal so den Beitrag durch und dann sehe ich das hier:
double Double=123.456789; //Double==123.456789 int Integer=static_cast<int>(Double); //Integer==123bedeutet das das die double variable in eine int variable umgewandelt wird ?
-
Fast richtig - nicht die Variable wird umgewandelt (der Typ ist vorgegeben und in "Double" steht weiterhin der Wert 123.456789), sondern der übergebene Wert.
-
Bashar schrieb:
Wobei ich eher sagen würde, dass das für negative t nicht hinhaut.
Aber ist das selbe Prinzip:
double u( double t ) { return (t >= 0.0) ? t - int(t) : 1.0 + (t - int(t)); }
-
@finix das ist keine zägezahnschwingung, sondern es sind nur zwei geraden.

probiere es mal so:
double u(double t) { if (t<0) //klassiker aus der systemtheorie. return 0; //wir nehmen an, dass u(t)*sigma(t) gemeint war. if ((int(t)%2)==0) //wir wollen schließlich schwingen return 1-(t-int(t)); else return t-int(t); }oder wenn du sauber beide seiten hand haben willst, nimmst du die floor-funktion:
double u(double t) { if ((int(floor(t))%2)==0) //<- das floor ist da auch wichtig, //sonst klappt der übergang bei 0 nicht. //das int braucht man für den mod operator. return t-floor(t); else return 1-(t-floor(t)); }edit: jetzt hatte ich den zägezahn doch glatt flaschrum gebaut gehabt...
-
ghorst schrieb:
@finix das ist keine zägezahnschwingung, sondern es sind nur zwei geraden.

Wenn du nicht weißt wovon du sprichst, probier's lieber aus. Deine Vermutung mit den zwei Geraden ist ein Schuss in den Ofen.
Außerdem: ein Dreieck ist kein Sägezahn.
-
Vielen Dank an alle, ihr habt mir sehr geholfen.