bsp: aus 2.1 wird 0.1; aus 4.234 wird 0.234
-
Hallo liebe leute.. erneut wende ich mich euch zu, weil ihr meine letzte hoffnung seit..

und zwar geht es um folgendes:
ich muss eine funktion schreiben,welche die Werte einer periodische „Sägezahnschwingung“ mit der Periode 1 für ein beliebiges t berechnet.Im Intervall [0,1) ist speziell u(t) = t. (also linear x = y).. aber bei 1 angekommen wird u(t) wieder 0.
so soll, wenn man t: 2.1 eingibt, u(t) den wert 0.1 haben.
oder t= -1.56, u(t)=0.56so sieht die funktion aus:
http://imageshack.us/photo/my-images/202/unbenanntpy.jpg/wie mache ich das blosssss, dass aus den zahlen vor dem komma immer eine 0 wird.. :S
unser prof hat uns einen hinweis gegeben:
"Verwenden Sie einen geeigneten Cast-Operator zur Umwandlung von
double nach int."
jedoch hilft mir das gerade irgendwie garnicht weiter..was ich bisher habe:
#include <iostream> #include <cmath> using namespace std; double u(double t); void main() { double y; cout<<"t: \n"<<endl; cout<<" "; cin>>y; double a = u (y); cout<<"\n\n Zum Zeitpunkt "<<y<<", u(t) = "<<a<<" !\n\n\n"<<endl; system ("PAUSE"); } double u(double t) { double x = t; return x; }könnt ihr mir vlt weiter helfen? wie ich das realisieren könnte.. wäre euch echt dankbar..

-
Dein Prof hat sich (vielleicht mit Absicht) etwas doppeldeutig ausgedrückt. Wenn du eine Flieskommazahl zu einer Ganzzahl umwandelst, dann erfolgt dies durch Abschneiden. 2.8 wird 2, -2.8 wird -2. Und das ist doch schon genau das was du brauchst. Den Rest solltest du hoffentlich alleine schaffen, sonst solltest du die Wahl deiner Vorlesung nochmal überdenken.
edit: Ach, im negativen ist die Funktion auch positiv. Dann brauchst du aus -2.8 eine -3, keine -2. Also floor.
-
xX.123.Xx schrieb:
oder t= -1.56, u(t)=0.56
Das passt nicht zum Bild. Schau z.B. bei t = -0.1, da ist u(t) = 0.9 und nicht 0.1.
-
SeppJ schrieb:
Dein Prof hat sich (vielleicht mit Absicht) etwas doppeldeutig ausgedrückt. Wenn du eine Flieskommazahl zu einer Ganzzahl umwandelst, dann erfolgt dies durch Abschneiden. 2.8 wird 2, -2.8 wird -2. Und das ist doch schon genau das was du brauchst. Den Rest solltest du hoffentlich alleine schaffen, sonst solltest du die Wahl deiner Vorlesung nochmal überdenken.
edit: Ach, im negativen ist die Funktion auch positiv. Dann brauchst du aus -2.8 eine -3, keine -2. Also floor.
hmm.. danke für den ansatz sepp... die sache ist die.. ich brauche ja die nachkommastellen.. also wenn ich 2.8 eingebe.. sollte da einfach nur 0.8..
ich hab da jetz folgende lösung gefunden (siehe funktion ab Zeile 14):
void main() { double y; cout<<"t: \n"<<endl; cout<<" "; cin>>y; double a = u (y); cout<<"\n\n Zum Zeitpunkt "<<y<<", u(t) = "<<a<<" !\n\n\n"<<endl; system ("PAUSE"); } double u(double t) { double x = t; x = x - (int)x; return x; }das klappt jetzt auch.. nur:
Michael E. schrieb:
xX.123.Xx schrieb:
oder t= -1.56, u(t)=0.56
Das passt nicht zum Bild. Schau z.B. bei t = -0.1, da ist u(t) = 0.9 und nicht 0.1.
diesen aspekt habe ich volkommen übersehen...
:(.. wie schaffe ich, dass bei eingabe einer negativen Zahl.
z.B t = -0.1, u(t) nicht 0.1 bleibt sondern 0.9
oder t= -1.8 und u(t) nicht 0,8 sondern = 0.2 wird.also für positive zahlen stimmts ja also
if (t>0)könnt ihr mir helfen / Tip geben?. :S
-
xX.123.Xx schrieb:
ich brauche ja die nachkommastellen..
Ja. Und? Gegeben ist die Zahl (mit Nachkommastellen). Sepp hat gezeigt, wie du die Zahl ohne Nachkommastellen bekommst. Ohne kann man auch als Minus interpretieren. Also quasi
Zahl ohne Nachkommastellen = Zahl - Nachkommastellen.
Nachkommastellen = ?(Löse die Gleichung auf...)
-
pumuckl schrieb:
xX.123.Xx schrieb:
ich brauche ja die nachkommastellen..
Ja. Und? Gegeben ist die Zahl (mit Nachkommastellen). Sepp hat gezeigt, wie du die Zahl ohne Nachkommastellen bekommst. Ohne kann man auch als Minus interpretieren. Also quasi
Zahl ohne Nachkommastellen = Zahl - Nachkommastellen.
Nachkommastellen = ?(Löse die Gleichung auf...)
danke.. ich habs auch so dann vorhin gemacht.. hast du vlt übersehen:
x = x - (int)x;
wie gesagt mein problem sind die negativen zahlen t = 0.15 soll den u(t) wert = 0.85 haben..
-
Ich habe dir doch schon gesagt, wie du an die nächstkleinere Zahl kommst. Reicht das nicht?
-
xX.123.Xx schrieb:
ich habs auch so dann vorhin gemacht.. [...]
wie gesagt mein problem sind die negativen zahlen
Siehst du den Widerspruch? Du hast es eben NICHT so gemacht - sonst hättest du keine Probleme mit den negativen Zahlen.
-
Was er braucht ist
x - floor(x).
Mit "nach int casten" wird er das nur hinbekommen, wenn er noch ein zusätzliches "if" einbaut.Sonst bekommt er nämlich bei -0.1 wieder -0.1 raus, und nicht die gewünschten +0.9.
-
Und genau das war die allererste Antwort.
-
SeppJ schrieb:
Den Rest solltest du hoffentlich alleine schaffen, sonst solltest du die Wahl deiner Vorlesung nochmal überdenken.
Spar Dir doch einfach mal solche Kommentare. Leider muss man sowas ständig von Dir lesen. Am Anfang tut sich jeder schwer, kein Grund direkt die Flügel zu strecken
-
pumuckl schrieb:
xX.123.Xx schrieb:
ich habs auch so dann vorhin gemacht.. [...]
wie gesagt mein problem sind die negativen zahlen
Siehst du den Widerspruch? Du hast es eben NICHT so gemacht - sonst hättest du keine Probleme mit den negativen Zahlen.
Oo...
____________naja. ich hatte es gestern dann doch noch geschafft.. ohne floor..

double u(double t) //FUNKTION { if (t<0) { double x = t; x = x - (int)x; x = 1 + x; return x; } else { double x = t; x = x - (int)x; return x; } }trotzdem danke für die Tips.