Programmieren c++



  • Wie soll ich denn die eingabedateien reel machen?



  • ...



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        float ai;
    
        float bi;
    
        int a1,a2,a3,b1,b2,b3;
    
        cout << " Geben sie die erste Zahl ein !" << endl;
    
        cin >> ai;
    
        cout << "Geben sie die zweite Zahl ein!" << endl;
    
        cin >> bi;
    
        int Nennerdeterminante;
    
        Nennerdeterminante = (a1*b2) - (a2*b1);
    
        int Zaehlerdetdx;
    
        Zaehlerdetdx = (b2*a3) - (a2*b3);
    
        int Zaehlerdetdy;
    
         Zaehlerdetdy = (a1*b3) - (b1*a3);
    
        int x;
    
        int y;
    
        x =  Zaehlerdetdx / Nennerdeterminante;
    
        y = Zaehlerdetdy / Nennerdeterminante;
    
        if( ai == 0 && bi == 0 ) {
    
            cout << " kein 2*2 System " << endl;
    
        }
    
        if( Nennerdeterminante != 0 ){
    
            cout << x && y << endl;
        }
    
        if( Nennerdeterminante == 0 && Zaehlerdetdx != 0 && Zaehlerdetdy != 0){
    
            cout << " Es gibt keine Loesung ! " << endl;
        }
    
    }
    

    Irgendwas stimmt mit dieser Zeile nicht leute.

    cout << x && y << endl;

    Warum wird hier mir ein Fehler angezeigt?

    Ich hoffe das jetzt meine eigelesenen dateien durch das float jetzt reel sind.

    Muss ich jetzt eigentlich auch das a1,a2,a3 usw. auch einlesen?

    Das ist mir nicht so ganz klar.



  • Chaz schrieb:

    Warum wird hier mir ein Fehler angezeigt?

    weil "&&" ein "logisches und" ist:

    if ( a>0 && b < 42)
    

    Chaz schrieb:

    Muss ich jetzt eigentlich auch das a1,a2,a3 usw. auch einlesen

    wofür benötigst du ai und bi? Kann es sein, dass diese Werte garnicht so direkt im Code auftauchen sollen? Schau dir doch nochmal die Aufgabenstellung an.



  • Eingabedaten: ai, bi : reell

    Steht ja in der AUfgabenstellung .

    EHrlich gesagt ist mir das aus der Aufgabenstellung auch nicht so richtig klar geworden.

    Vielleicht hast du einen tipp für mich?

    weil "&&" ein "logisches und" ist

    Oh ja stimmt das war auch eigentlich blöd von mir .

    Könnte ich anstatt dem && zeichen das || zeichen nehmen?



  • Chaz schrieb:

    Eingabedaten: ai, bi : reell

    Steht ja in der Aufgabenstellung .

    Ja, das steht da so. Kommst du vielleicht drauf, wenn ich dir sage, dass das "i" gemäß der mathematischen Konventionen eigentlich tiefgestellt sein müsste?

    Chaz schrieb:

    Könnte ich anstatt dem && zeichen das || zeichen nehmen?

    Dann hast du ein "logisches oder".

    bool a = true;
    bool b = false;
    
    bool logical_and = a && b; // false
    bool logical_or = a || b;  // true
    

  • Mod

    Chaz schrieb:

    Eingabedaten: ai, bi : reell

    Steht ja in der AUfgabenstellung .

    EHrlich gesagt ist mir das aus der Aufgabenstellung auch nicht so richtig klar geworden.

    Ausführlich: Eingabedaten {a_i,b_ii{1,2,3}}\left\{a\_i, b\_i | i \in \{1,2,3\}\right\}reell.

    Könnte ich anstatt dem && zeichen das || zeichen nehmen?

    Du sollst denken, nicht raten! Was möchtest du an der Stelle ausdrücken, logisch formuliert?



  • Chaz schrieb:

    [code="cpp"]#include <iostream>

    float ai;

    float bi;

    int a1,a2,a3,b1,b2,b3;

    cout << " Geben sie die erste Zahl ein !" << endl;

    cin >> ai;

    cout << "Geben sie die zweite Zahl ein!" << endl;

    cin >> bi;

    int Nennerdeterminante;

    Nennerdeterminante = (a1*b2) - (a2*b1);

    int Zaehlerdetdx;

    Zaehlerdetdx = (b2*a3) - (a2*b3);

    int Zaehlerdetdy;

    Zaehlerdetdy = (a1*b3) - (b1*a3);

    Schau dir mal bitte den Anfang an, du legst hier ne menge Variablen an. Diese haben keine werte. Kann nichts dabei rauskommen.

    Ich denke das "ai" in diesem Fall a 1-3 bedeutet, da du sonst diese Gleichungen nicht lösen kannst

    Sagen wir mal so.

    6 Äpfel und 12 Birnen kosten 30 €
    3 Äpfel und 3 Birnen kosten 9 €

    Die gleichungen

    6x + 12y = 30
    3x + 3y = 9

    Eingabe von 6, 12, 30 und 3,3,9



  • Ich verstehe immer noch nicht so genau . Was soll ich genau mit dem ai und bi machen ?



  • Chaz schrieb:

    Was soll ich genau mit dem ai und bi machen ?

    es nicht verwenden. Wie schon mehrfach gesagt wurde, handelt es sich um eine Kurzschreibweise für a1,a2,a3,b1,b2,b3



  • Also nochmal nehmen wir das Bsp.

    Sagen wir mal so.

    6 Äpfel und 12 Birnen kosten 30 €
    3 Äpfel und 3 Birnen kosten 9 €

    Die gleichungen

    6x + 12y = 30
    3x + 3y = 9

    Somit ergibt sich diese Tabelle

    a1 + a2 = a3
    6  + 12 = 30
    
    b1 + b2 = b3
    3  +  3 = 9
    

    setzen wir das nun ein und entnehmen die Werte der Tabelle oben

    Nenner-Determinante 😨
    ( a1 * b2 ) - ( a2 * b1 )
    ( 6 * 3 ) - ( 12 * 3 ) = -18*-1 = 18
    Zähler-Determinante Dx:
    ( b2 * a3 ) - ( a2 * b3 )
    ( 3 * 30 ) - ( 12 * 9 ) = -18*-1 = 18
    Zähler-Determinante Dy:
    ( a1 * b3 ) - ( b1 * a3 )
    ( 6 * 9 ) - ( 3 * 30 ) = -36*-1 = 36

    x = Dx/D = 18/18 = 1
    y = Dy/D = 36/18 = 2

    Einsetzten in die gleichung

    6 * 1 + 12 * 2 = 30

    6 + 24 = 30

    3 * 1 + 3 *2 = 9

    3 + 6 = 9

    Stimmt also 🙂



  • ai == 0 && bi == 0

    Für diese Zeile habe ich immer noch keine Lösung gefunden , daher ist der fehler immer noch im code.

    Aber ich wollt euch fragen ob jetzt der Anfang des Codes stimmt?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        int a1,a2,a3,b1,b2,b3;
    
        cout << " Geben sie die erste Zahl ein !" << endl;
    
        cin >> a1;
    
        cout << "Geben sie die zweite Zahl ein!" << endl;
    
        cin >> a2;
    
        cout << " Geben sie die dritte Zahl ein !" << endl;
    
        cin >> a3;
    
        cout << " Geben sie die dritte Zahl ein !" << endl;
    
        cin >> b1;
    
        cout << " Geben sie die dritte Zahl ein !" << endl;
    
        cin >> b2;
    
        cout << " Geben sie die dritte Zahl ein !" << endl;
    
        cin >> b3;
    
        int Nennerdeterminante;
    
        Nennerdeterminante = (a1*b2) - (a2*b1);
    
        int Zaehlerdetdx;
    
        Zaehlerdetdx = (b2*a3) - (a2*b3);
    
        int Zaehlerdetdy;
    
         Zaehlerdetdy = (a1*b3) - (b1*a3);
    
        int x;
    
        int y;
    
        x =  Zaehlerdetdx / Nennerdeterminante;
    
        y = Zaehlerdetdy / Nennerdeterminante;
    
        if( ai == 0 && bi == 0 ) {
    
            cout << " kein 2*2 System " << endl;
    
        }
    
        if( Nennerdeterminante != 0 ){
    
            cout << x && y << endl;
        }
    
        if( Nennerdeterminante == 0 && Zaehlerdetdx != 0 && Zaehlerdetdy != 0){
    
            cout << " Es gibt keine Loesung ! " << endl;
        }
    
    }
    


  • Chaz schrieb:

    ai == 0 && bi == 0

    was willst du hier überhaupt erreichen? ai und bi hast du doch inzwischen rausgeschmissen.


  • Mod

    Aber ich wollt euch fragen ob jetzt der Anfang des Codes stimmt?

    - Werte nicht reell.
    - Offensichtliche Copy&Paste Programmierung 👎 . Dadurch Fehler eingefangen. Guck dir nochmal alles genau an, was du mittels C&P "programmiert" hast.

    • cout << x && y << endl; Offensichtlicher Unsinn, den man selbst ohne Erfahrung schon bei einem einzigen Testlauf sofort entdeckt hätte. ➡ Du hast das Programm nie getestet 👎 .
      - Berechnung der Lösung an der falschen Stelle, bevor festgestellt wurde, ob es überhaupt eine Lösung gibt. (Hier mit int sogar besonders ungünstig, da dadurch das Programm abstürzen kann. Wäre ebenfalls bei einem einfachen Testlauf sofort aufgefallen.)

    ai == 0 && bi == 0

    Für diese Zeile habe ich immer noch keine Lösung gefunden , daher ist der fehler immer noch im code.

    Erinnere dich doch noch mal an deine Schulzeit, was die durch

    1. Eine oder beide Unbekannten sind nicht vorhanden (z.B. a1 = b1 = 0)
    Ausgabe eines entsprechenden Textes ?kein 2*2-System?

    beschriebene Bedingung für den Wert der Determinante bedeutet.



  • #include <iostream>
    #include <cstdlib>
    #include <string>
    
    float getValue(const std::string& ausgabe)
    {
       float input = 0;
       do 
       {
          std::cout << ausgabe << std::endl;
          std::cin >> input;
    
          if (input == 0)
          {
             std::cout << "kein 2*2-System! Enter druecken um erneut wert eingeben zu koennen" << std::endl << std::endl;
             system("PAUSE");
             system("cls");
          }
    
       } while (input == 0);
    
       return input;
    }
    
    int main()
    {
    
       float a1, a2, a3, b1, b2, b3;
    
       a1 = getValue("Geben sie bitte den Wert fuer a1 ein");
       a2 = getValue("Geben sie bitte den Wert fuer a2 ein");
       a3 = getValue("Geben sie bitte den Wert fuer a3 ein");
    
       b1 = getValue("Geben sie bitte den Wert fuer b1 ein");
       b2 = getValue("Geben sie bitte den Wert fuer b2 ein");
       b3 = getValue("Geben sie bitte den Wert fuer b3 ein");
    
       float D = ((a1*b2) - (a2*b1))*-1;
       float Dx = ((b2*a3) - (a2*b3))*-1;
       float Dy = ((a1*b3) - (b1*a3))*-1;
    
       float x = Dx/D;
       float y = Dy/D;
    
       std::cout << "Der Wert fur x = " << x << std::endl
                 << "Der Wert fur y = " << y << std::endl;
    
    	return 0;
    }
    

  • Mod

    CodeBase, du hast auch nicht verstanden, wozu die Bedingungen überhaupt da sind.

    \begin{align*} 0x + 1y &= 0 \\ 1x + 0y &= 0 \end{align*}

    ist ein astreines 2x2 Gleichungssystem.

    Und wozu sollen die -1 gut sein?



  • Ja sry war mein Fehler hab ich übersehen. Die sind dafür da, das wir keine division durch 0 erhalten. Dachte deshalb minus 1 damit wir positive Zahlen bekommen


  • Mod

    CodeBase schrieb:

    Ja sry war mein Fehler hab ich übersehen. Die sind dafür da, das wir keine division durch 0 erhalten. Dachte deshalb minus 1 damit wir positive Zahlen bekommen

    Nein, das war nicht gemeint (das ist aber auch ein Grund für die Abfragen). Ich habe in meinen vorherigen Beitrag noch eine Erläuterung reineditiert, während du schon geantwortet hast.



  • Hallo leute ich bins wieder hab ein wenig an meinem code gearbeitet.

    Kann sein das es noch inhaltliche Fehler hat aber ich poste es mal:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        int a1,a2,a3,b1,b2,b3;
    
        cout << " Geben sie die erste Zahl ein !" << endl;
    
        cin >> a1;
    
        cout << "Geben sie die zweite Zahl ein!" << endl;
    
        cin >> a2;
    
        cout << " Geben sie die dritte Zahl ein !" << endl;
    
        cin >> a3;
    
        cout << " Geben sie die 4 Zahl ein !" << endl;
    
        cin >> b1;
    
        cout << " Geben sie die 5 Zahl ein !" << endl;
    
        cin >> b2;
    
        cout << " Geben sie die 6 Zahl ein !" << endl;
    
        cin >> b3;
    
        int Nennerdeterminante;
    
        Nennerdeterminante = (a1*b2) - (a2*b1);
    
        int Zaehlerdetdx;
    
        Zaehlerdetdx = (b2*a3) - (a2*b3);
    
        int Zaehlerdetdy;
    
         Zaehlerdetdy = (a1*b3) - (b1*a3);
    
        int x;
    
        int y;
    
        x =  Zaehlerdetdx / Nennerdeterminante;
    
        y = Zaehlerdetdy / Nennerdeterminante;
    
        a1 = b1;
    
        if( a1 == 0 ) {
    
            cout << " kein 2*2 System " << endl;
    
        }
    
        if( Nennerdeterminante != 0 ){
    
            cout << x << " "  << y  << endl;
        }
    
        if( Nennerdeterminante == 0 && Zaehlerdetdx != 0 && Zaehlerdetdy != 0){
    
            cout << " Es gibt keine Loesung ! " << endl;
        }
    
        if( Nennerdeterminante == 0 && Zaehlerdetdx == 0 && Zaehlerdetdy == 0){
    
           cout << " Beliebige viele Lösungen "  <<  x  << y << endl;
    
        }
    
    }
    

    Ich hoffe die inhaltlichen Fehler halten sich in Grenzen?


  • Mod

    Chaz schrieb:

    Ich hoffe die inhaltlichen Fehler halten sich in Grenzen?

    Nein, tun sie nicht. Hat sich an dem Programm überhaupt etwas geändert, außer ein paar Korrekturen an Zeichenkettenliteralen?

    Der Code sieht fast noch genau so aus, wie auf Seite 1.

    Oh, ich sehe einen Unterschied:

    a1 = b1;
    
        if( a1 == 0 ) {
    

    😮

    Mal ehrlich: Kannst du C++? Wenn du das ganze Semester/Schuljahr/Kurs über nicht aufgepasst hast, dann brauchst du jetzt nicht zu jammern, wenn du es nicht verstehst. Sag es uns am besten gleich. Dann kann man hilfreicher antworten, zum Beispiel mit Links zu guten Büchern, anstatt hier zu versuchen, Tipps zu geben, die du nicht verstehst. Du hast ja nicht einmal die allereinfachsten Tipps (Werte reell, Zuweisung bei Initialisierung) befolgt. Von den fortgeschrittenen Hinweisen ganz zu schweigen.

    Ich habe jedenfalls den Eindruck, mit einer Wand zu reden, die per Copy&Paste zufällige Variationen von Code produziert und hofft, zufällig irgendwann einmal ins Schwarze zu treffen. Diese Vorgehensweise wird nicht funktionieren. Man wird niemals durch Ausprobieren ein funktionierendes, richtiges Programm erzeugen.


Anmelden zum Antworten