array richtig ausgeben
-
Hallo zusammen,
ich bin neu in der objektorientierten Programmierung und habe da so meine Schwierigkeiten.
Ich möchte ein Code schreiben, der einen Linearen Term und einen Quadratischen Term einließt, ausgibt, Nullstellen berechnet sowie Schnittstellen und die Eingabe auf Richtigkeit überprüft(zur Zahleneingabe korrekt).
Ich habe auch soweit Programmiert.
Nun würde ich gerne zwei arrays anlegen und diese mit meinem LinearTerm bzw. meinem QuadratTErm füllen und dann anders herum ausgeben, also array[erste Stelle] = array[Letzte Stelle]unw.
Ich bekomme leider immer sehr verwirrende Ausgaben und weiß nicht mehr weiter.
Ich würde mich über hilfe sehr freuen aber bitte verurteilt mich nicht wenn Code zu viel da ist oder sowas.
Mit freundlichen Grüßen,
Tomica[#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>#define l 1
#define q 2using namespace std;
struct Linear{ //Struktur zum speichern eines linearen Terms
double m;
double b;
} LinearTerm;struct Quadrat{ //Struktur zum speichern eines quadratischen Terms
double a, b, c;
}QuadratTerm;void valuesOfLinear (){
cout << "\nLinearterm:" << LinearTerm.m << "x ";
if(LinearTerm.b >= 0){
cout << "+" <<LinearTerm.b;
}else
cout << LinearTerm.b;
}
void valuesOfQuadrat (){
cout << "\nQuadratterm:"<< QuadratTerm.a << "x^2 ";
if(QuadratTerm.b >= 0 && QuadratTerm.c >= 0){
cout << "+" << QuadratTerm.b;
cout << "x " << "+" << QuadratTerm.c;}
else
cout << QuadratTerm.b <<"x" << QuadratTerm.c;
}
void PQ(double, double, double){
double x1;
double x2;
double Wurzel;
cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c;
if(QuadratTerm.a == 1){
Wurzel = sqrt((QuadratTerm.b / 2)*(QuadratTerm.b / 2) - QuadratTerm.c);
if(Wurzel >= 0){
x1 = -(QuadratTerm.b / 2) + Wurzel;
x2 = -(QuadratTerm.b / 2) - Wurzel;
cout << "\nx1=" << x1 << "\nx2=" << x2;
}else
cout << "\nnegativer Wert unter der Wurzel!";}else if(QuadratTerm.a != 1){
cout << "\nErgebniss nach Umformung:";
QuadratTerm.b = QuadratTerm.b / QuadratTerm.a;
QuadratTerm.c = QuadratTerm.c / QuadratTerm.a;
Wurzel = sqrt((QuadratTerm.b / 2)*(QuadratTerm.b / 2) - QuadratTerm.c);
if(Wurzel >= 0){
x1 = -(QuadratTerm.b / 2) + Wurzel;
x2 = -(QuadratTerm.b / 2) - Wurzel;
cout << "\nx1=" << x1 << "\nx2=" << x2;
}else
cout << "\nnegativer Wert unter der Wurzel!";
}
}void intersection(){
cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c;
double s1, s2, Wurzel, x1, x2;
s1 = QuadratTerm.b - (LinearTerm.m *(-1));
s2 = QuadratTerm.c - (LinearTerm.b (-1));
if(QuadratTerm.a == 1){
Wurzel = sqrt((s1 / 2)(s1 / 2) - s2);
if(Wurzel >= 0){
x1 = -(s1 / 2) + Wurzel;
x2 = -(s1 / 2) - Wurzel;
cout << "\ns1=" << x1 << "\ns2=" << x2;
}else
cout << "\nnegativer Wert unter der Wurzel!";}else if(QuadratTerm.a != 1){
cout << "\nErgebniss nach Umformung:";
s1 = s1 / QuadratTerm.a;
s2 = s2 / QuadratTerm.a;
Wurzel = sqrt((s1 / 2)*(s1 / 2) - s2);
if(Wurzel >= 0){
x1 = -(s1 / 2) + Wurzel;
x2 = -(s1 / 2) - Wurzel;
cout << "\ns1=" << x1 << "\ns2=" << x2;
}else
cout << "\nnegativer Wert unter der Wurzel!";
}}
int inputValidation(double){
if(!(cin != false))
{
std::cin.clear();
std::cin.ignore(1000, '\n');
cout << "\nEingabe fehlerhaft! Bitte nur double Werte eingeben!";
}
}//void reserve(){
//}
int main() {
cout << "Eingabe von zwei double Werten des Linearterms:";
cin >> LinearTerm.m;
inputValidation(LinearTerm.m);
cin >> LinearTerm.b;
inputValidation(LinearTerm.b);cout << "\nEingabe von drei double Werten des Quadratterms:";
cin >> QuadratTerm.a;
inputValidation(QuadratTerm.a);
cin >> QuadratTerm.b;
inputValidation(QuadratTerm.b);
cin >> QuadratTerm.c;
inputValidation(QuadratTerm.c);valuesOfLinear ();
valuesOfQuadrat();
PQ(QuadratTerm.a, QuadratTerm.b, QuadratTerm.c);
intersection();
//int Linear[l];
//int Quadrat[q];
Linear arrayl[l] = {LinearTerm.m, LinearTerm.b};
Quadrat arrayq[q] = {QuadratTerm.a, QuadratTerm.b, QuadratTerm.c};
// arrayl[0].m = LinearTerm.m;
// arrayl[1].b = LinearTerm.b;
// arrayq[0].a = QuadratTerm.a;
// arrayq[1].b = QuadratTerm.b;
// arrayq[2].c = QuadratTerm.c;
cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c;
cout << "\n\t" << arrayl[0].m << "\t" << arrayl[1].b << "\t" << arrayq[0].a << "\t" << arrayq[1].b << "\t" << arrayq[2].c;
cout << "\n\t" << l << q;
// cout << "\n" << arrayl[0] << "\t" << arrayl[1];
// cout << "\n" << arrayq[0] << "\t" << arrayq[1] << "\t" <<arrayq[2];// for(int i=0; i < l; i++)
// {
// cout << "\n"<< Linear[i];
// }
// for(int k=0; k < 2; k++)
// {
// cout << "\n" << Quadrat[k];
// }// reserve();
}="cpp"]
-
-
Hallo Tomica2351,
wie du merkst, bekommst du keine sehr große Resonanz auf deine Frage. Das liegt an mehreren Dingen:
-Du stellst keine klare Frage. Irgendwas ist für dich verwirrend. Aha. Dann ist für Außenstehende ja alles klar
.
-Die Form deines Beitrags ist offensichtlich vollkommen unlesbar. Benutze die Vorschau um zu sehen, ob du die Codetags richtig benutzt hast. Man braucht auch nicht jeden Satz mit einem Zeilenumbruch abschließen.
-Dein Code ist vermutlich viel zu lang. Reduziere ihn auf das Wesentliche, das dein Problem ausmacht.Hier dein Code in lesbarer Formatierung (Naja. Nicht wirklich gut lesbar. Sagen wir eher: "in der Formatierung, die du beabsichtigt hast"):
#include <iostream> #include <string> #include <math.h> #include <stdio.h> #define l 1 #define q 2 using namespace std; struct Linear{ //Struktur zum speichern eines linearen Terms double m; double b; } LinearTerm; struct Quadrat{ //Struktur zum speichern eines quadratischen Terms double a, b, c; }QuadratTerm; void valuesOfLinear (){ cout << "\nLinearterm:" << LinearTerm.m << "x "; if(LinearTerm.b >= 0){ cout << "+" <<LinearTerm.b; }else cout << LinearTerm.b; } void valuesOfQuadrat (){ cout << "\nQuadratterm:"<< QuadratTerm.a << "x^2 "; if(QuadratTerm.b >= 0 && QuadratTerm.c >= 0){ cout << "+" << QuadratTerm.b; cout << "x " << "+" << QuadratTerm.c;} else cout << QuadratTerm.b <<"x" << QuadratTerm.c; } void PQ(double, double, double){ double x1; double x2; double Wurzel; cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c; if(QuadratTerm.a == 1){ Wurzel = sqrt((QuadratTerm.b / 2)*(QuadratTerm.b / 2) - QuadratTerm.c); if(Wurzel >= 0){ x1 = -(QuadratTerm.b / 2) + Wurzel; x2 = -(QuadratTerm.b / 2) - Wurzel; cout << "\nx1=" << x1 << "\nx2=" << x2; }else cout << "\nnegativer Wert unter der Wurzel!"; }else if(QuadratTerm.a != 1){ cout << "\nErgebniss nach Umformung:"; QuadratTerm.b = QuadratTerm.b / QuadratTerm.a; QuadratTerm.c = QuadratTerm.c / QuadratTerm.a; Wurzel = sqrt((QuadratTerm.b / 2)*(QuadratTerm.b / 2) - QuadratTerm.c); if(Wurzel >= 0){ x1 = -(QuadratTerm.b / 2) + Wurzel; x2 = -(QuadratTerm.b / 2) - Wurzel; cout << "\nx1=" << x1 << "\nx2=" << x2; }else cout << "\nnegativer Wert unter der Wurzel!"; } } void intersection(){ cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c; double s1, s2, Wurzel, x1, x2; s1 = QuadratTerm.b - (LinearTerm.m *(-1)); s2 = QuadratTerm.c - (LinearTerm.b *(-1)); if(QuadratTerm.a == 1){ Wurzel = sqrt((s1 / 2)*(s1 / 2) - s2); if(Wurzel >= 0){ x1 = -(s1 / 2) + Wurzel; x2 = -(s1 / 2) - Wurzel; cout << "\ns1=" << x1 << "\ns2=" << x2; }else cout << "\nnegativer Wert unter der Wurzel!"; }else if(QuadratTerm.a != 1){ cout << "\nErgebniss nach Umformung:"; s1 = s1 / QuadratTerm.a; s2 = s2 / QuadratTerm.a; Wurzel = sqrt((s1 / 2)*(s1 / 2) - s2); if(Wurzel >= 0){ x1 = -(s1 / 2) + Wurzel; x2 = -(s1 / 2) - Wurzel; cout << "\ns1=" << x1 << "\ns2=" << x2; }else cout << "\nnegativer Wert unter der Wurzel!"; } } int inputValidation(double){ if(!(cin != false)) { std::cin.clear(); std::cin.ignore(1000, '\n'); cout << "\nEingabe fehlerhaft! Bitte nur double Werte eingeben!"; } } //void reserve(){ //} int main() { cout << "Eingabe von zwei double Werten des Linearterms:"; cin >> LinearTerm.m; inputValidation(LinearTerm.m); cin >> LinearTerm.b; inputValidation(LinearTerm.b); cout << "\nEingabe von drei double Werten des Quadratterms:"; cin >> QuadratTerm.a; inputValidation(QuadratTerm.a); cin >> QuadratTerm.b; inputValidation(QuadratTerm.b); cin >> QuadratTerm.c; inputValidation(QuadratTerm.c); valuesOfLinear (); valuesOfQuadrat(); PQ(QuadratTerm.a, QuadratTerm.b, QuadratTerm.c); intersection(); //int Linear[l]; //int Quadrat[q]; Linear arrayl[l] = {LinearTerm.m, LinearTerm.b}; Quadrat arrayq[q] = {QuadratTerm.a, QuadratTerm.b, QuadratTerm.c}; // arrayl[0].m = LinearTerm.m; // arrayl[1].b = LinearTerm.b; // arrayq[0].a = QuadratTerm.a; // arrayq[1].b = QuadratTerm.b; // arrayq[2].c = QuadratTerm.c; cout << "\n\t" << LinearTerm.m << "\t" << LinearTerm.b << "\t" << QuadratTerm.a << "\t" << QuadratTerm.b << "\t" << QuadratTerm.c; cout << "\n\t" << arrayl[0].m << "\t" << arrayl[1].b << "\t" << arrayq[0].a << "\t" << arrayq[1].b << "\t" << arrayq[2].c; cout << "\n\t" << l << q; // cout << "\n" << arrayl[0] << "\t" << arrayl[1]; // cout << "\n" << arrayq[0] << "\t" << arrayq[1] << "\t" <<arrayq[2]; // for(int i=0; i < l; i++) // { // cout << "\n"<< Linear[i]; // } // for(int k=0; k < 2; k++) // { // cout << "\n" << Quadrat[k]; // } // reserve(); }Ein paar Dinge, die sofort auffallen, ohne dein Problem zu kennen:
-globale Variablen. Todsünde. Macht außerdem eine Fehlersuche schwierig.
-defines. Noch dazu mit Bezeichnern wie "l" und "q" ein Schlamassel.
-Es soll sich wohl um C++ handeln, sieht aber aus wie C mit cout.
-Ausdrücke mit dreifacher(!) Verneinung. Compiliertcin != falseüberhaupt? Das sieht einfach falsch aus.
-Funktionen mit vielen ungenutzten Parametern. Lässt erhebliche Zweifel aufkommen, ob diese korrekt programmiert wurden. Verschiedene Teile des Codes scheinen nicht recht zusammen zu passen.Und hier noch, was mein Compiler dazu zu sagen hat:
test.cpp: In function ‘int inputValidation(double)’: test.cc:94:13: warning: converting ‘false’ to pointer type ‘void*’ [-Wconversion-null] if(!(cin != false)) ^ test.cpp:100:1: warning: no return statement in function returning non-void [-Wreturn-type] } ^Was dann auch die Frage nach der Compilierbarkeit von
cin != falsebeantwortet, mit einem klaren "Ja, aber..."
-
Compiliert
cin != falseüberhaupt?iosüberlädt dochoperator bool. Edit: Ups, der ist jaexplicit. Ist also ill-formed, seit C++11.