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 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();
    }="cpp"]




  • Mod

    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. Compiliert cin != 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 != false beantwortet, mit einem klaren "Ja, aber..." 😉


  • Mod

    Compiliert cin != false überhaupt?

    ios überlädt doch operator bool . Edit: Ups, der ist ja explicit . Ist also ill-formed, seit C++11.


Anmelden zum Antworten