Hey,
da fang ich doch gleich mal oben an!
Code:
#include <iostream.h> //C++ Standardheader bindet man ohne die Endung .h ein
#include <conio.h> //Nicht Teil des Standards + das brauchst du hier gar nicht
#include <math.h> //Brauchst du nicht, bindet iostream intern bereits ein und das ist ein alter C-Header. In C++ solltest du cmath nutzen
Warum ist diese Variable global? Das ist unnötig und unschön.
Abgesehen davon halte ich int nicht gerade für den richtigen Datentypen, um den User wählen zu lassen, ob das Programm weiterlaufen soll oder nicht.
Code:
int main(void){
while(beenden >= 1){
Einrücken ist wichtig, vorallem wenn du { ans Ende der Zeile packst!
Code:
cout << "Wert p: ";
All deine Ein- und Ausgaben werden nicht funktionieren, da weder cout, noch cin bekannt sind! Was du vor hattest ist std::cout, bzw. das Zeug über using bekannt zu machen.
cin ist nicht Idiotensicher! Wenn der User hier z.B. a123b-1 eingibt, dann ist dein Eingabestream nicht mehr so, wie du ihn zum arbeiten nutzt und das Programm landet in einer Endlosschleife.
Klüger wäre es, die gesamte eingegebene Zeile zu lesen und aus dieser dann die Daten zu extrahieren.
Code:
x1 = -(p/2)+sqrt(((p/2)*(p/2))-q);
Auch wenn es sich hierbei lediglich um die p-q-Formel handelt, dieser Ausdruck ist viel zu komplex für eine Zeile! Du solltest ihn aufbrechen und aufteilen, das macht ihn und zukünftige Algorithmen lesbarer. Außerdem solltest du dir sauberes spaceing angewöhnen. Nach, bzw. vor jedem Operatoren kommt ein Leerzeichen, das hilft dem Auge ungemein!
Abgesehen davon würde ich das Ganze noch in eine eigene Funktion packen, somit kannst du das später nochmal benutzen. Zusätzlich wären ein paar Abfragen, ob die eingegebenen Werte überhaupt gültig sind, nicht falsch.
Ich würde es also spontan so machen:
Code:
#include <iostream>
#include <string>
#include <sstream>
//was den Namen der Funktion betrifft bin ich mir noch
//nicht so sicher. Spontan fällt mir aber nichts besseres ein.
void pq(float p, float q, float& x1, float& x2)
{
auto pHalf = p/2;
auto root = sqrt(pHalf * pHalf - q);
x1 = -pHalf + root;
x2 = -pHalf - root;
}
int main(void)
{
std::string userInput;
const std::string yes = "ja";
do
{
float p = 0, q = 0, x1 = 0, x2 = 0;
std::cout << "Bitte geben sie die Werte in dem Format 'p <LEER> q' ein: ";
std::getline(std::cin, userInput);
//Hier könnte man vorher noch prüfen, ob das Format überhaupt richtig ist
std::stringstream sstream;
sstream << userInput;
sstream >> p;
sstream >> q;
pq(p, q, x1, x2);
std::cout << "--------------------------------------" << std::endl
<< "Wert x1: " << x1 << std::endl
<< "Wert x2: " << x2 << std::endl
<< "--------------------------------------" << std::endl
<< "Nochmal (ja/nein)?" << std::endl;
std::getline(std::cin, userInput);
system("cls");
} while(userInput == yes);
}
Falls du das ganze jetzt noch objektorientiert angehen willst:
Code:
#include <iostream>
#include <string>
#include <sstream>
struct MonicPolynom
{
float p;
float q;
float x1;
float x2;
void solve()
{
auto pHalf = p/2;
auto root = sqrt(pHalf * pHalf - q);
x1 = -pHalf + root;
x2 = -pHalf - root;
}
};
std::istream& operator >>(std::istream& in, MonicPolynom& monicPoly)
{
std::string userInput;
std::getline(in, userInput);
std::stringstream ss;
ss << userInput;
ss >> monicPoly.p;
ss >> monicPoly.q;
return in;
}
int main(void)
{
std::string userInput;
const std::string yes = "ja";
do
{
MonicPolynom polynom;
std::cout << "Bitte geben sie die Werte in dem Format 'p <LEER> q' ein: ";
std::cin >> polynom;
polynom.solve();
std::cout << "--------------------------------------" << std::endl
<< "Wert x1: " << polynom.x1 << std::endl
<< "Wert x2: " << polynom.x2 << std::endl
<< "--------------------------------------" << std::endl
<< "Nochmal (ja/nein)?" << std::endl;
std::getline(std::cin, userInput);
system("cls");
} while(std::cin.good());
}
Somit lässt sich das ganze dann auch noch relativ einfach erweitern. Als einfache Übung dazu kannst du den User die gesamte Funktion eingeben lassen!
Code:
Eingabe der Funktion f(x)=ax²+bx+c (a b c): 2 4 -16
X1: 2
X2: -4
Danach kannst du dann gleich einen ganzen Taschenrechner programmieren. Das ist eine gute Anfängerübung!