Neuer Fehler: rechtwinkelige Dreiecke, Anfänger fehler



  • Hallo, ich schreibe gerade ein kleines Programm (eher zum üben), wie auch immer, ich möchte, dass man am Anfang eingeben soll welche beiden Variablen man hat (z.b. Seite a und b) und dann die jeweilige if Funktion ausführen sollum den rest zu berechnen. Egal was ich eingebe, er geht immer gleich in die erste if Funktion hinein:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main () {
    
        float a, b, c, h, alpha, beta, A, U, R;
        const float pi = 3.14159265359;
        char e='e',z='z';
        cin >> e >> z;
    
        if ('a' && 'b') {
           cout << "bitte zuerst den Wert fuer a, dann den Wert fuer b eingeben \n";
              cin >> a >> b;
              c = sqrt (a*a+b*b);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
    
              cout << "\n gegebene Werte: a= " << a << " ,b= " << b << endl << "\n Die Seite c= " << c << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;  
              }
    
        if ('b' && 'c') {
                cout << "Bitte zuerst den Wert fuer b und dann fuer c eingeben" << endl;}
    
        system ("Pause");
        return 0;
    }
    

    Hoffe ihr könnt mir da weiterhelfen... 😕

    Edit Jester: Code-Tags eingefügt.



  • Dieser Thread wurde von Moderator/in Jester aus dem Forum Mathematik und Physik in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wenn Du den Benutzer in e und z etwas eingeben lässt, dann solltest Du auch e und/oder z in den if -Bedingungen mit irgendwas vergleichen.

    Im Moment prüfst Du dort 'a' && 'b' , was wegen

    'a' ist ungleich 0 , ist true
    'b' ist ungleich 0 , ist true
    true && true ist true

    immer true , also Wahr ist.

    btw: warum initialisierst Du e mit 'e' und z mit 'z' ? Hat das irgendeinen tieferen Sinn?



  • Einen tiefen Sinn hat das mit e und z nicht, ich kann aber die Chars nicht nur so integrieren.
    Wie kann ich das mit den true && true ändern, sodass es unterschieden wird und das ganze funktioniert?



  • Indem du den Inhalt der Variablen mit dem gewünschten Wert vergleichst.



  • Danke, aber ich bin echt noch ein Anfänger auf diesem Gebiet, wie kann ich das machen?



  • Hast du denn kein Buch, nach dem du lernst? Stichwort: Vergleichsoperatoren, s. z.B. Kontrollstrukturen: if/else



  • stehlo schrieb:

    Danke, aber ich bin echt noch ein Anfänger auf diesem Gebiet, wie kann ich das machen?

    if(e=='a')
    {
    ...
    }



  • Hat funktioniert, vielen Dank ihr seid super



  • Hallo nochmal, ich melde mich mit einem neuem Problem zurück:
    und zwar habe ich jetzt einiges geändert, und hinzugefüügt, ich stehe jetzt abr vor einem neuen Problem, und zwar wenn ich das so habe (s. unten) dann nimmt er zwar jeweils wenn ich a,b und b,c eingebe, aber er nimmt es nicht, wenn ich a,c eingebe.
    Hoffe es kann mir wieder jmd. helfen

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main () {
    
        float a, b, c, h, alpha, beta, A, U, R;
        const float pi = 3.14159265359;
        string e,z;
        cin >> e >> z;
    
        if (e=="a" && z=="b") {
              cout << "bitte zuerst den Wert fuer a, dann den Wert fuer b eingeben \n";
              cin >> a >> b;
              c = sqrt (a*a+b*b);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: a= " << a << " ,b= " << b << endl << "\n Die Seite c= " << c << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;  
              }
    
        if (e=="b" && z=="c") {
              cout << "Bitte zuerst den Wert fuer b und dann fuer c eingeben" << endl;
              cin >> b >> c;
              a = sqrt (c*c-b*b);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: b= " << b << " ,c= " << c << endl << "\n Die Seite a= " << a << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;}
    
       if (e=="a" && z=="c") {
              cout << "Bitte zuerst den Wert fuer a und dann fuer c eingeben" << endl;
              cin >> a >> c;
              a = sqrt (c*c-a*a);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: a= " << a << " ,c= " << c << endl << "\n Die Seite b= " << b << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;}    
    
        system ("Pause");
        return 0;
    }
    

    bei letzten if befehl geht irgendetwas nicht


  • Mod



  • Also bei mir geht das (für "compiliert, wenn ich system auskommentiere" und "läuft durch, gibt aber nicht unbedingt das richtige aus"):

    `

    ~/test % ./cpp

    a c

    Bitte zuerst den Wert fuer a und dann fuer c eingeben

    5 7

    gegebene Werte: a= 4.89898 ,c= 7

    Die Seite b= 8.82691e-39

    Die Hoehe= 6.17755e-39

    Der Flaechninhalt= 2.16214e-38

    Der Umfang = 11.899

    Der Umkreisradius= 3.5

    Der Winkel Alpha= 44.4153

    Der Winkel Beta = 45.5847

    `

    Man sieht schon, ich habe 5 für a eingegeben und das Programm behauptet, ich hätte 4.89 eingegeben...



  • Hast recht, wenn man irgendwelche Buchstaben eingibt (z.B. k und L) und anschließend werte eingibt spuckt er immer deine Werte aus.

    weiß jemand woran das liegen kann?



  • Mein Lieblingsfehler: vergessen zu kompilieren. Hast du kompiliert?

    Oder hast du ggf was anderes als "a c" (oder a(Enter) c(Enter)) eingegeben?



  • Wenn man k l eingibt, erfolgt überhaupt keine Ausgabe. Verstehe nicht, warum du da etwas ausgegeben bekommen solltest.



  • Ja kompiliert habe ich und ich gebe auch immer a (enter), c(enter) ein, aber so ist das auch programmiert. Was ich nicht verstehe ist , dass er immer die Werte ausgibt, auch wenn man Buchstaben eingibt, die garnicht im Programmcode vorkommen.



  • Ja er gibt da noch nichts aus, erst wenn du danach noch einen Wert für die beiden eingibst wirft er sinnlose Zahlen heraus.?



  • Nein, das Programm beendet sich, wenn du "falsche" Buchstaben eingibst.

    Hier:
    `

    ~/test % ./cpp

    k l

    ~/test %

    `

    Wie zu erwarten. Nix da.

    Du benutzt wohl ein anderes Programm bei dir als das, was du hier gepostet hast.



  • es sollte das selbe Programm sein:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main () {
    
        float a, b, c, h, alpha, beta, A, U, R;
        const float pi = 3.14159265359;
        string e,z;
        cin >> e >> z;
    
        if (e=="a" && z=="b") {
              cout << "bitte zuerst den Wert fuer a, dann den Wert fuer b eingeben \n";
              cin >> a >> b;
              c = sqrt (a*a+b*b);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: a= " << a << " ,b= " << b << endl << "\n Die Seite c= " << c << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;  
              }
    
        if (e=="b" && z=="c") {
              cout << "Bitte zuerst den Wert fuer b und dann fuer c eingeben" << endl;
              cin >> b >> c;
              a = sqrt (c*c-b*b);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: b= " << b << " ,c= " << c << endl << "\n Die Seite a= " << a << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;}
    
       if (e=="a" && z=="c") {
              cout << "Bitte zuerst den Wert fuer a und dann fuer c eingeben" << endl;
              cin >> a >> c;
              a = sqrt (c*c-a*a);
              A = a*b/2;
              h = 2*A/c;
              U = a+b+c;
              R = c/2;
              alpha = (asin (a/c))*(360/(2*pi));
              beta = 90 - alpha;
              cout << "\n gegebene Werte: a= " << a << " ,c= " << c << endl << "\n Die Seite b= " << b << "\n Die Hoehe= " << h << "\n Der Flaechninhalt= "<< A << "\n Der Umfang = " << U <<
              "\n Der Umkreisradius= " << R<< "\n Der Winkel Alpha= " << alpha<< "\n Der Winkel Beta = " << beta << endl;}    
    
        system ("Pause");
        return 0;
    }
    


  • Letzte Chance: kompilierst du auch die richtige Datei?

    Bau doch ganz oben mal ein:

    cout << "Bitte die Seiten des Dreiecks eingeben (z.B. 'a c'): ";
    

    und stelle sicher, dass diese Ausgabe auch erscheint.

    Ansonsten gibt es nur noch die Möglichkeit, dass du ein Programm namens "Pause" hast, das nicht tut, was du denkst (ich habe hier kein "Pause" und habe die Zeile daher auskommentiert, ansonsten aber nichts geändert und kann deine Aussagen nicht nachvollziehen).


Anmelden zum Antworten