Werte merken
-
ups noch ein kleiner fehler, aber so oder?
while(1) { scanf("%d,&a_neu); //a einlesen b=(a_alt+a_neu)/2; //a_alt ist der Wert davor printf("%d,b); a_alt=a_neu }
-
Abgesehen vom vergessenen Semikolon... nochmal: welchen Wert hat a_alt im ersten Durchlauf?
-
_matze schrieb:
Acid69 schrieb:
lol... ist es wirklich so einfach??
while(1) { scanf("%d,&a_neu); //a einlesen b=(a_alt+a_neu)/2; //a_alt ist der Wert davor printf("%d,b); a_neu=a_alt; }Gegenfrage: funktioniert es denn (ich verstehe nicht, wieso du es nicht einfach ausprobierst)?
Ich gebe mal selbst die Antwort: nein, nicht ganz.
Noch eine Frage: was denkst du, bewirkt deine letzte Zeile?
Und noch eine: welchen Wert hat a_alt im ersten Schleifendurchlauf?Das Problem ist, ich will jetzt nicht das ganze Programm reinstellen, sondern mir geht es nur um diese eine "Funktion"
In meiner letzten Zeile soll einfach eine neue Variable deklariert werden, so dass ich mit dieser (+ dem neuen Wert) den Mittelwert errechnen kann?
Ja wegen dem ersten Schleifendurchlauf ist mir auch gerade aufgefallen.. muss ich mir noch schnell was überlegen ^^
-
_matze schrieb:
welchen Wert hat a_alt im ersten Durchlauf?
a_ganz_alt?
-
Belli schrieb:
_matze schrieb:
welchen Wert hat a_alt im ersten Durchlauf?
a_ganz_alt?
witzig

Ja ich könnte es mit einer Schleife machen, dass im ersten Durchlauf nur a_neu ausgegeben wird und dann eben b=(a_alt+a_neu)/2 .. oder gibt es eine etwas "schönere" Lösung?
-
Acid69 schrieb:
Das Problem ist, ich will jetzt nicht das ganze Programm reinstellen, sondern mir geht es nur um diese eine "Funktion"
Das ist ja schön und gut, aber selbst so ein einzelner Schnipsel muss in sich so stimmig sein, dass wir damit etwas anfangen können. Ist er das nicht, stellen wir eventuell Fehler fest, die gar keine sind (z.B. Initialwert von alt_a, falls du vor dem Schnipsel einen vergeben hättest).
Acid69 schrieb:
In meiner letzten Zeile soll einfach eine neue Variable deklariert werden, so dass ich mit dieser (+ dem neuen Wert) den Mittelwert errechnen kann?
Das musst du nicht mehr erklären, den Verdreher hast du ja direkt korrigiert.
Acid69 schrieb:
Ja wegen dem ersten Schleifendurchlauf ist mir auch gerade aufgefallen.. muss ich mir noch schnell was überlegen ^^
Dann überleg mal. :p
-
Also a_alt hat beim ersten durchlauf noch keinen Wert, deswegen wäre er 0
Aber mithilfe einer Schleife könnte ich ja sagen, dass er beim ersten mal nur a_neu nehmen soll und danach eben mit der formel b=(a_neu+a_alt)/2
oder gibt es eine "schönere" Lösung? ^^
Und vielen Dank für deine Hilfe

-
Acid69 schrieb:
Also a_alt hat beim ersten durchlauf noch keinen Wert, deswegen wäre er 0
Aber mithilfe einer Schleife könnte ich ja sagen, dass er beim ersten mal nur a_neu nehmen soll und danach eben mit der formel b=(a_neu+a_alt)/2
oder gibt es eine "schönere" Lösung? ^^
Und vielen Dank für deine Hilfe

Was heißt er wäre 0???
Du musst a_alt ja irgendwo deklarieren und auch initialisieren, sonst ist das Verhalten undefiniert. In den meisten Fällen hat dann die Variable den Wert, der vorher in dem Speicher den die Variable nun benutzt stand.Lg freeG
-
fr33g schrieb:
Acid69 schrieb:
Also a_alt hat beim ersten durchlauf noch keinen Wert, deswegen wäre er 0
Aber mithilfe einer Schleife könnte ich ja sagen, dass er beim ersten mal nur a_neu nehmen soll und danach eben mit der formel b=(a_neu+a_alt)/2
oder gibt es eine "schönere" Lösung? ^^
Und vielen Dank für deine Hilfe

Was heißt er wäre 0???
Du musst a_alt ja irgendwo deklarieren und auch initialisieren, sonst ist das Verhalten undefiniert. In den meisten Fällen hat dann die Variable den Wert, der vorher in dem Speicher den die Variable nun benutzt stand.Lg freeG
ja eben, dass mein ich ja.. er wird vorher noch nicht verwendet => Er ist 0, solange bis er halt beim ersten mal den Wert von a_alt bekommt!
Edit: Ist die Variante mit der Schleife für den ersten Durchlauf angebracht oder gibt es eine bessere Variante?
-
Acid69 schrieb:
Also a_alt hat beim ersten durchlauf noch keinen Wert, deswegen wäre er 0
Aber nur, wenn du auch mit 0 initialisierst! Sonst steht in der Variable irgendwas Zufälliges.
Was hältst du denn hiervon?
scanf("%d,&a_neu); //a einlesen a_alt=a_neu; while(1) { b=(a_alt+a_neu)/2; //a_alt ist der Wert davor printf("%d,b); a_alt=a_neu; scanf("%d,&a_neu); //a einlesen }
-
Acid69 schrieb:
ja eben, dass mein ich ja.. er wird vorher noch nicht verwendet => Er ist 0, solange bis er halt beim ersten mal den Wert von a_alt bekommt!
Nein, stimmt nicht. Probier es aus:
int test; printf("%d",test);Da steht höchstwahrscheinlich nicht 0.
Variablen ohne Initialisierung sind in C und C++ nicht automatisch 0, anders als in vielen anderen Sprachen.
-
Was du suchst ist ein Ringpuffer, der bis zu einer bestimmten Größe wächst und dann beim Einfügen eines neuen Elements das älteste entfernt. Der resultierende Wert ist dann der Mittelwert aller im Ringpuffer befindlichen Elemente. Sowas kann man sich mit std::vector oder std::list ziemlich einfach selber bauen, oder man sucht eine Ringbuffer oder circular_buffer im Netz.
-
Man könnte als Verbesserung auch einfach mal iostreams verwenden.
-
Acid69 schrieb:
fr33g schrieb:
Acid69 schrieb:
Also a_alt hat beim ersten durchlauf noch keinen Wert, deswegen wäre er 0
Aber mithilfe einer Schleife könnte ich ja sagen, dass er beim ersten mal nur a_neu nehmen soll und danach eben mit der formel b=(a_neu+a_alt)/2
oder gibt es eine "schönere" Lösung? ^^
Und vielen Dank für deine Hilfe

Was heißt er wäre 0???
Du musst a_alt ja irgendwo deklarieren und auch initialisieren, sonst ist das Verhalten undefiniert. In den meisten Fällen hat dann die Variable den Wert, der vorher in dem Speicher den die Variable nun benutzt stand.Lg freeG
ja eben, dass mein ich ja.. er wird vorher noch nicht verwendet => Er ist 0, solange bis er halt beim ersten mal den Wert von a_alt bekommt!
Edit: Ist die Variante mit der Schleife für den ersten Durchlauf angebracht oder gibt es eine bessere Variante?
Solange die Variable in einer Funktion deklariert wurde, kann ich dir zu 95% garantieren dass der Wert nicht 0 ist.
LG freeG
-
fr33g schrieb:
95%
Deutlich mehr.
