Die Mathe-Redaktion - 19.05.2013 22:50
Auswahl
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]

Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter April 2013

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 416 Gäste und 30 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmiersprachen » C++: do while Schleife
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule C++: do while Schleife
eagle05
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.07.2012
Mitteilungen: 3
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
Chris311
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 6500
Aus: Trier
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2012-07-13 18:28


fed-Code einblenden



-----------------
Ich höre, und vergesse.
Ich sehe, und erinnere.
Ich handle, und verstehe.
Konfuzius



  Profil  Quote  Link auf diesen Beitrag Link
eagle05
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.07.2012
Mitteilungen: 3
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
Chris311
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 6500
Aus: Trier
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21549
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 ¼


-----------------
Bild
[ Nachricht wurde editiert von viertel am 13.07.2012 19:47:24 ]



  Profil  Quote  Link auf diesen Beitrag Link
Chris311
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 6500
Aus: Trier
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
eagle05
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.07.2012
Mitteilungen: 3
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
Folgende Antworten hat der Fragesteller vermutlich noch nicht gesehen.
Knaaxx
Senior Letzter Besuch: im letzten Monat
Dabei seit: 06.05.2006
Mitteilungen: 2544
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 21549
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
Chris311
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 6500
Aus: Trier
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 auf diesen Beitrag Link
Bewerte diesen Thread:
[Was sonst bewertet wurde]
 Neues Thema [Neues Thema]

 Antworten [Antworten]   

 Druckversion [Druckversion]


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2013 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]