probleme mit den Schleifen



  • Hallo,

    ich hab ein Problem ich möchte ein Teilprogramm so schreiben, dass es jeweils zwei Zahlen untersucht ob sie gleich sind. Wenn das nicht der Fall ist soll das Programm weiter springen. Das wäre meine Idee aber sie funktioniert nicht ganz.

    if(auf[0]==Auf[0])
    if(auf[1]==Auf[1])
    if(auf[2]==Auf[2])
    {cout<<"Die Geraden sind genau gleich.";}
    else
    {cout<<"Die Geraden sind Parallel";}

    Das Programm sollte, wenn die ersten 3 Bedingungen richtig sind(d.h. jeweils zwei Zahlen gleich) "Die Geraden sind genau gleich." anzeigen.

    Aber falls nur eine Bedingung nicht stimmt sollte das Programm "Die Geraden sind Parallel" anzeigen.

    Wäre nett, wenn mir jemand helfen könnte. Schon mal im voraus Danke.
    Gruß Benny



  • Dein else bezieht sich auf das letzte if, um den gwünschten Effekt zu erreichen muß Du klammern:

    if(auf[0]==Auf[0]) 
    {
      if(auf[1]==Auf[1]) 
        if(auf[2]==Auf[2]) 
          {cout<<"Die Geraden sind genau gleich.";} 
    }
    else 
      {cout<<"Die Geraden sind Parallel";}
    

    Was hat das eigentlich mit Mathematik zu tun? Ich verschieb Dich mal nach C++.
    Schreibe ins Mathe-Forum, wenn Du Fragen und Probleme mit mathematischen Dingen hast. Für Programmierprobleme etc. gibt es genügend andere Foren in denen sich die Leute besser auskennen.

    Btw.: Mathematisch gesehen ist obiges Programm sinnlos. Was Du meinst ist die Geraden sind nicht gleich parametriert. Sie sind aber dennoch völlig identisch. Eine Gerade ist eine Menge von Punkten und die erste der beiden Geraden enthält alle Punkte der zweiten und umgekehrt ebenfalls und zwei Mengen, die sich gegenseitig enthalten sind per Definition gleich.

    MfG Jester



  • Warum nicht

    if(auf[0]==Auf[0] && auf[1]==Auf[1] && auf[2]==Auf[2])
    {
      cout<<"Die Geraden sind genau gleich.";
    }
    else
    {
      cout<<"Die Geraden sind Parallel";
    }
    

    ?
    Hab aber noch nicht verstanden, was das bewirken soll 😕



  • Hallo,
    Ihr wollt wissen was das bringt.
    Tja ich benötige dieses Teilprogramm für diese Programm.
    Es ist leider noch nicht ganz fertig. Aber ich hab jetzt echt so ein KOPF.
    Denn bei den dofen Geraden gibt es leider sehr viele Ausnahmen.
    Vielleicht weis ja jemand einen Rat wie man das ganze vereinfachen könnte und was noch zu machen ist?
    Hab auch noch ein anderes Problem, denn wenn ich das Programm laufen lasse habe ich immer zwei Warnungen die ich ums Vereggen nicht weg bekomme. Vielleicht weis auch da jemand ein Rat?

    Danke für jeden Rat
    Gruß Benny

    #include <iostream.h>
    #include <conio.h>
    void main()
    {
    int i,a;
    float f,z,t,x,y,b,b1,b2,c1,c2,c3,g1,g2,g3,Auf[3],Richt[3],auf[3],richt[3];
    char ende;
    const char esc=27;

    while(esc!=ende)
    {
    cout << "Das Programm berechnet den Schnittpunkt von zwei Geraden.\n";

    cout <<"\nGeben Sie die erste Gerade in Parameterform ein.\n\n";
    cout <<"\n";
    for(i=0;i<3;i++)
    {cout <<"Geben Sie den Aufpunkt 1."<<(i+1)<<" ein: "; cin >> Auf[i];}
    cout <<"\n";
    for(a=0;a<3;a++)
    {cout <<"Geben Sie den Richtungsvektor 1."<<(a+1)<<" ein: "; cin >> Richt[a];}

    cout <<"\nGeben Sie die zweite Gerade in Parameterform ein.\n\n";
    cout <<"\n";
    for(i=0;i<3;i++)
    {cout <<"Geben Sie den Aufpunkt 2."<<(i+1)<<" ein: "; cin >> auf[i];}
    cout <<"\n";
    for(a=0;a<3;a++)
    {cout <<"Geben Sie den Richtungsvektor 2."<<(a+1)<<" ein: "; cin >> richt[a];}

    if(Richt[0]==richt[0] && Richt[1]==richt[1]&& Richt[2]==richt[2])
    {if(auf[0]==Auf[0] && auf[1]==Auf[1] && auf[2]==Auf[2])

    {cout<<"Die Geraden sind genau gleich.";}

    else

    {cout<<"Die Geraden sind Parallel";}}

    else

    {if(Richt[1]!=0)
    {f=(-richt[2])-Richt[2]/Richt[1](-richt[1]);
    z=((auf[2]-Auf[2])-(Richt[2]/Richt[1]
    (auf[1]-Auf[1])))/f;
    t=((auf[0]-Auf[0])-(-richt[0]*z))/Richt[0];
    x=Richt[1]*t-richt[1]*z;
    y=auf[1]-Auf[1];

    if(x==y)
    {g1=zricht[0]+auf[0];
    g2=z
    richt[1]+auf[1];
    g3=z*richt[2]+auf[2];
    cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")";}
    else
    {cout<<"Die Geraden sind windschief.";}}

    else
    {b=(auf[1]-Auf[1])/(-richt[1]);
    b1=((auf[0]-Auf[0])-(-richt[0]*b))/Richt[0];
    b2=((auf[2]-Auf[2])-(-richt[2]*b))/Richt[2];

    if (b1==b2)
    {c1=bricht[0]+auf[0];
    c2=b
    richt[1]+auf[1];
    c3=b*richt[2]+auf[2];
    cout<<"Schnittpunkt("<<c1<<"/"<<c2<<"/"<<c3<<")";}
    else
    {cout<<"Die Geraden sind windschief.";}}}

    cout << "\n\n\n\nAbbruch: <esc> Wiederhohlen: <beliebige Taste>";
    ende=getch();
    clrscr();
    }
    }



  • Tipp:

    Beim Posten (vorallem von langen Quelltextstücken) gibts bei den vielen weissen Knöpfen unterhalb des Textfeldes eins in dem
    C/C++ steht. Damit erzeugst Du Codetags. Damit wird der Quelltext lesbar 🤡 :xmas2:



  • Was sind "Codetags", weiß nicht was du damit sagen willst.



  • Hi,
    Codetags machen deinen Code lesbar und übersichtlich, da er auf weißem Hintergrund dargestellt wird.(Siehe dem Beitrag von fubar)
    C++ Codetags stellen die Schlüsselwörte aus C++ grafisch in einer anderen Farbe dar, wodurch dein Code noch lesbarer werden sollte.

    z.B.

    int main
    

    cu max



  • Er meint Du sollst Deinen Code in

    [cpp] und [/cpp]
    

    einschliessen. Als Besipiel:

    int main ()
    {
        // Ich bin ein Kommentar
        char UndIchEineCharVariable
    
        UndIchEineCharVariable='B'
    
        return (int)UndIchEineCharVariable
    }
    /*Ausserdem bin ich absolut Sinnfrei*/
    


  • und ohne die Warnungen zu sagen, ist das auch gut...

    Auf den ersten Blick: Dumme Variablenbezeichnungen... da weiß ja keiner, was was ist...

    Auf den 2. Blick:
    du benutzt ende ohne Initialisierung beim ersten Schleifendurchlauf... Könnte eine Warnung ausgeben...
    Besser Deklaration mit Initialisierung
    char ende = '\0';

    Dann solltest du dringend an deinem Programmierstil arbeiten... Das kann ja kein Mensch mehr ertragen... Wird auch der Grund, weswegen ihn dir wohl niemand durchschauen wird... ich habe zumindest nach den ersten 3 cout-Zeilen aufgehört...



  • Bei mir kommen beim kompilieren keine Warnungen, beim kompilieren, aber:
    1. Benutze iostream.h
    2. int main()
    4. du benötigst

    using namespace std;
    

    für cout.
    3. Benutze niemals eine Variable die nicht initialisiert ist. hier hat er deswegen zur Laufzeit unterbrochen:

    while(esc!=ende)
    

    Code-Hacker



  • Code-Hacker schrieb:

    1. Benutze iostream.h

    Du meinst sicher <iostream>. 🙂



  • cd9000 schrieb:

    Code-Hacker schrieb:

    1. Benutze iostream.h

    Du meinst sicher <iostream>. 🙂

    er hat sicher gemeint benutze nicht <iostream.h> sondern <iostream> sonst hätte ja das

    using namespace std;
    

    keinen Sinn gehabt.


Anmelden zum Antworten