# C++ Rechnen #IND ?



## Stephan Liebig (14. November 2007)

Hallo, ich habe ein kleines Problem. Ich möchte in C++ die pq-Formel realisieren. Allerdings gibt er mir für x1 und x2 immer *-1.#IND.*

Woran liegt das?

Variablen:

```
//Variablen fuer die pq-Formel
	float p(0), q(0), wurzel_erg(0), nwurzel_erg(0), x0(0), a0(0);
	float x1(0), x2(0);
	bool pq_wiederholen;
```



```
do {
			cout << "  Bitte geben Sie die Zahlen fuer p und q ein.\n";
			cout << "  p = ";
			cin >> p;
			cout << endl;
			cout << "  q = ";
			cin >> q;
			nwurzel_erg = (p/2)*(-1);
			wurzel_erg = ((p/2)*(p/2)) - q;
			if(wurzel_erg < 0)
				{
				cout << "SYSTEM: Der Wurzelausdruck wurde negativ! \n";
				cout << "Erneute eingabe? Ja = 1 / Nein = 0 \n";
				cout << "Ihre Eingabe: ";
				cin >> pq_wiederholen;
				}
			else
				{
				wurzel_erg = x0;
				x0 = a0;
				do 
					{
					x0=x0-(x0*x0-a0)/(2*x0);
					}
				while ( abs (x0*x0-a0)>genauigkeit );
				x1 = nwurzel_erg + x0;
				x2 = nwurzel_erg - x0;
				cout << "Die Nullstellen von x^2 + " << p <<"x + " << q << " = 0 ist:\n";
				cout << "nwurzel_erg = " << nwurzel_erg << endl;
				cout << "wurzel_erg = " << wurzel_erg << endl;
				cout << "x1 = " << x1 << endl;
				cout << "x2 = " << x2 << endl;
				cout << endl;
			        cout << "Programm wiederholen?";
			        cin >> pq_wiederholen;
                                }
			}
			while(pq_wiederholen == true);
```

Dabei sollte ich vielleicht kurz sagen, wass passiert.
Als erstes gibt man eine Zahl für p und q ein, damit eine Gleichung ensteht.
Ich habe die Formel x1/2 = -(p/2) +- wurzel( (p/2)² - q ) aufgeteilt in 3 Teile.
Einmal das -(p/2), das ergebnis wird in nwurzel_erg gespeichert. Dann wird das unter der Wurzel berechnet. Sprich (p/2)²-q. Das Ergebnis wird in wurzel_erg gespeichert. Das speichere ich nun auch in x0 um damit die Wurzel aus diesem Ergebnis zu berechnen.


----------



## deepthroat (14. November 2007)

Hi.

Du hast nicht dein vollständiges Programm vorgestellt, also evtl. passiert da ja noch was anderes. Aber wie es aussieht dividierst du durch 0:
	
	
	



```
x0 = a0; // a0 ist 0, d.h. x0 auch
do 
{
   x0=x0-(x0*x0-a0)/(2*x0); // Fehler: x0 ist 0
```
Gruß


----------

