Auswahl Aktion im Forum Suche Kontakt Für Mitglieder Mathematisch für Anfänger Wer ist Online | |
| Autor |
C++: do while Schleife |
|
eagle05
Neu  Dabei seit: 13.07.2012 Mitteilungen: 3
Aus:
 |     Themenstart: 2012-07-13 18:18
|
Hallo ihr lieben. Ich habe eine Frage bzgl der do-while Schleife. Ich versuche mittels dieser Schleife die Extremstelle einer Funktion in einem bestimmten Intervall zu bestimmen.
Dazu bestimme ich die Steigung der Tagente und fordere, dass die schleife aufhört, wenn die Steigung das Vorzeichen ändern.
Ich habe als Bsp f(x)=x² genommen.
Hier mein Code
C++ #include<iostream>
#include<math.h>
#include<fstream>
#include<cmath>
#include<stdio.h>
using namespace std;
int main ()
{
const double l=1.0E-7;
double i=0, k=3;
double y;
do
{
k=k-l;
y=pow(k-l,2)-pow(k,2);
cout <<k<<";"<<y<< endl;
}
while (y<0);
cin.get();
} |
Der letzte y-Wert sollte also negativ sein. Das problem ist, dass der letzte Wert positiv ist (y=0.0001)
Was mache ich falsch?
Für eure Hilfe wäre ich sehr dankbar
[Edit: matph] Quelltextbereich eingefügt. [/Edit]
[ Nachricht wurde editiert von matph am 13.07.2012 19:34:04 ]
|
Profil
Quote
Link |
Chris311
Aktiv  Dabei seit: 23.01.2008 Mitteilungen: 6500
Aus: Trier
 |     Beitrag No.1, eingetragen 2012-07-13 18:28
|
 
\ Hallo eagle05 und herzlich Wilkommen auf dem Matheplaneten. Das Problem ist sicher, dass du dein y in der Schleife ausgeben lässt. Da du die while-Schleife reversiv aufgebaut hast, wird erst am Ende der Schleife geprüft, ob dein y <0 ist. In der letzten Iteration ist es positiv und wird vor der Prüfung ausgegeben. Liebe Grüße Chris
----------------- Ich höre, und vergesse.
Ich sehe, und erinnere.
Ich handle, und verstehe.
Konfuzius
|
Profil
Quote
Link |
eagle05
Neu  Dabei seit: 13.07.2012 Mitteilungen: 3
Aus:
 |     Beitrag No.2, vom Themenstarter, eingetragen 2012-07-13 18:40
|
hallo und danke für die schnelle Antwort.
Aber so richtig verstehe ich deine Antwort nicht. Also wenn ich y aus der Schleife rausnehme, dann kommt was falsches raus
|
Profil
Quote
Link |
Chris311
Aktiv  Dabei seit: 23.01.2008 Mitteilungen: 6500
Aus: Trier
 |     Beitrag No.3, eingetragen 2012-07-13 18:59
|
Ich meine ja auch nur, dass du die Ausgabe rausnimmst.
----------------- Ich höre, und vergesse.
Ich sehe, und erinnere.
Ich handle, und verstehe.
Konfuzius
|
Profil
Quote
Link |
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 21549
Aus: Hessen
 |     Beitrag No.4, eingetragen 2012-07-13 19:44
|
Hi eagle05
Willkommen auf dem Planeten
Mit der Ausgabe hat das nix zu tun, die verändert das y ja nicht.
Es fängt schon damit an, daß du dich mir der unpassenden Wahl deiner Variablennamen selbst austrickst.
Wozu ist das i gut?
Warum k und nicht x?
Warum l und nicht deltax?
Du berechnest nicht y, sondern deltay.
Aber Namen sind ja nur Schall und Rauch. Du kannst sie frei wählen. Aber besser ist ist immer ein Name, dem man entnehmen kann, wofür er steht.
Dann zur Schleife:
Du berechnest zunächst Δy. Aber falsch. Denn bei positiven x sollte die Steigung ja auch positiv sein. Aber gut, du rechnest andersrum.
Dann gibst du dieses Δy aus.
Zum Schluß wird geprüft, ob es immer noch <0 ist, und dann geht es in die nächste Runde.
Natürlich muß zum Schluß das erste Δy ausgegeben werden, das positiv ist, denn genau dann wird die Schleife ja erst verlassen.
Was stört dich daran?
Anmerkung
Mathematisch genau genommen berechnest du ja gar nicht die Steigung. Sondern nur den y-Unterschied (eben das Δy) zweier benachbarter x-Werte.
Gruß vom ¼
-----------------
[ Nachricht wurde editiert von viertel am 13.07.2012 19:47:24 ]
|
Profil
Quote
Link |
Chris311
Aktiv  Dabei seit: 23.01.2008 Mitteilungen: 6500
Aus: Trier
 |     Beitrag No.5, eingetragen 2012-07-13 19:57
|
2012-07-13 19:44 - viertel in Beitrag No. 4 schreibt:
Mit der Ausgabe hat das nix zu tun, die verändert das y ja nicht.
Mit seiner Ausgabe auf dem Bildschirm schon, und das stört ihn ja.
----------------- Ich höre, und vergesse.
Ich sehe, und erinnere.
Ich handle, und verstehe.
Konfuzius
|
Profil
Quote
Link |
eagle05
Neu  Dabei seit: 13.07.2012 Mitteilungen: 3
Aus:
 |     Beitrag No.6, vom Themenstarter, eingetragen 2012-07-13 20:43
|
Erstmal danke für die Antworten :)
@Chris wenn ich ehrlich bin verstehe ich noch immer nicht, was ich falsch gemacht habe. Wie müsste ich den Code manipulieren, damit es doch klappt?
@Vietel
Ich habe mich etwas unglücklich ausgedrückt. Wie man aber die Begriffe wählt ist ja egal. Ob delta x anstatt l oder delta y anstatt y ist ja egal, solange der User selber weiß, was sache ist :)
Auch wenn ich die Steigung berechne und nicht y so kommt das gleiche raus..
|
Profil
Quote
Link | | Folgende Antworten hat der Fragesteller vermutlich noch nicht gesehen. |
Knaaxx
Senior  Dabei seit: 06.05.2006 Mitteilungen: 2544
Aus:
 |     Beitrag No.7, eingetragen 2012-07-13 21:58
|
Hallo,
wenn das "letzte" negative y erreicht ist, ist die Bedingung y<0 noch erfüllt und die Rechnung steigt in den nächsten Schleifendurchlauf ein. Hier wird nun erstmals y >=0 und nochmal ausgegeben (Deine Ausgabe steht vor der nächsten Schleifenabfrage).
Was ist schlimm daran?
Der Letzte Wert (y>=0, k= ...) ist NICHT richtiger als der Vorletzte! Der gesuchte Punkt liegt dazwischen.
|
Profil
Quote
Link |
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 21549
Aus: Hessen
 |     Beitrag No.8, eingetragen 2012-07-13 23:18
|
2012-07-13 20:43 - eagle05 in Beitrag No. 6 schreibt:
@Chris wenn ich ehrlich bin verstehe ich noch immer nicht, was ich falsch gemacht habe. Wie müsste ich den Code manipulieren, damit es doch klappt? Dazu müßte man wissen, was genau du erreichen willst.
eagle05 schreibt:
@Vietel
Ich habe mich etwas unglücklich ausgedrückt. Wie man aber die Begriffe wählt ist ja egal. Ob delta x anstatt l oder delta y anstatt y ist ja egal, solange der User selber weiß, was sache ist :)
Aber einem potentiellen Helfer erschwerst oder verleidest ihm gar die Hilfe. Denn man muß sich mühsam durch den Code kämpfen um zu verstehen (manchmal auch erahnen), was da passiert bzw. passieren soll. So auch hier. Du schreibst von Tangentensteigung und der Funktion f(x)=x2, und nirgends taucht eine Ableitung oder Tangentenberechnung auf. In der Tat würdest du so eh nur die Sekantensteigung berechnen.
eagle05 schreibt:
Auch wenn ich die Steigung berechne und nicht y so kommt das gleiche raus..
Das Gleiche schon mal gar nicht. Nur ein vergleichbares Ergebnis, da das Δx konstant ist.
Mathematik und Programmieren sind keine Disziplinen, wo man lasch etwas hinschludern kann. Beides verlangt exaktes Arbeiten. Und je eher du daran arbeitest, umso erfolgreicher kannst du dabei werden (sofern du das überhaupt willst).
Weder Mathematik noch Programmieren verzeihen Fehler. Ein Programm wird immer das machen, was du aufgeschrieben (=codiert) hast – und das ist halt nicht immer das, was du beabsichtigt hast.
|
Profil
Quote
Link |
Chris311
Aktiv  Dabei seit: 23.01.2008 Mitteilungen: 6500
Aus: Trier
 |     Beitrag No.9, eingetragen 2012-07-14 17:13
|
Ich meinte zum Beispiel so:
C++ #include<iostream>
#include<math.h>
#include<fstream>
#include<cmath>
#include<stdio.h>
using namespace std;
int main ()
{
const double l=1.0E-7;
double i=0, k=3;
double y=pow(k,2);
do
{
cout <<k<<";"<<y<< endl;
k=k-l;
y=pow(k-l,2)-pow(k,2);
}
while (y<0);
cin.get();
} |
Liebe Grüße
Chris
----------------- Ich höre, und vergesse.
Ich sehe, und erinnere.
Ich handle, und verstehe.
Konfuzius
[ Nachricht wurde editiert von Chris311 am 14.07.2012 17:14:21 ]
|
Profil
Quote
Link |
|