Versteh das nicht!!!



  • Immer das gleiche Problem. 🙄

    define quad(x) x*x
    

    :p



  • Ganz von den anderen Kommentaren abgesehen werden deine defines wohl zudem als Integer interpretiert (0.0 => double, 0 => int) und du hast daher eine Ganzzahlrechnung.

    Da du auch mit speziellen Geräten arbeitest, würde mich mal der Wertebereich des int auf dieser Plattform interessieren

    cu André



  • Wenn ich das so:

    #define CYC    1000000000/(FCY)
    

    schreibe, gehts. 😉

    Genau den gleichen Streit habe ich auch immer mit meinem Taschenrechner.. 😉



  • Um das Prinzip verständlicher zu machen:
    Die Präprozessor-Direktive #define führt lediglich eine Textersetzung durch.
    Wenn du also schreibst:

    #define FCY             XTFREQ*PLLMODE/4
    

    , dann setzt der Compiler für FCY an den Zielcode auch nur das ein, und setzt nicht automatisch Klammern.

    #define CYC        1000000000/FCY   // so hast du CYC definiert
    
    // CYC hat den Wert 
    1000000000/XTFREQ*PLLMODE/4    // keine Klammern!
    

    Ich bin mir allerdings nicht ganz sicher, eventuell wird für CYC auch der bereits ausgerechnete Wert eingesetzt. In diesem Falle wird an der bereits erwähnten Integer-Division liegen, die du aber sowieso beseitigen musst, wenn du genaue Werte willst.

    Noch was: Treffende Titel sind sehr nützlich; viele Leute, die hier posten haben wohl etwas, das sie nicht verstehen.



  • Du solltst Dich vielleicht einfach von den Defines (wieso Defines?!?!) trennen und Konstanten verwenden.



  • das problem ist das er prüfen soll ob wirklich ein richtiges rechenzeichen eingegeben wird wenn er ein falsches erkennt soll er so lange abfragen bis er ein richtiges bekommt und dann die rechnung ausgeben. das funktioniert aber er geht dann in eine endlos schleife guckt mal vielleicht erkennt ihr das problem.
    oder sagt mir vielleicht auch wie man das ganz anders schreiben könnte.

    //---------------------------------------------------------------------------

    #pragma hdrstop
    #include <iostream.h>
    //---------------------------------------------------------------------------

    #pragma argsused
    int main()
    {

    double zahl1, zahl2, ergebnis;
    char coperator, auswahl='j';

    while (auswahl=='j' || auswahl=='J')
    {

    cout<<"--------Taschenrechner-------\n";
    cout<<"-----------------------------\n";

    cout<<"zahl eingeben \n";
    cin>>zahl1;

    cout<<"operator eingeben \n";
    cin>>coperator;

    cout<<"zahl eingeben \n";
    cin>>zahl2;

    //--Vergleich der Operatoren mit Rechnung---------
    while (coperator !='/' || coperator != '*' || coperator != '+'||coperator !='-')
    {

    switch(coperator)
    {

    case '': ergebnis=zahl1zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl;

    break;

    case '/': ergebnis=zahl1/zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl;

    break;

    case '+': ergebnis=zahl1+zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl;

    break;

    case '-': ergebnis=zahl1-zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl;

    break;

    default: cout<<"neues rechenzeichen eingeben\n";cin>>coperator;

    }
    }
    cout<<"nochmal";
    cin>>auswahl;

    system ("Pause");
    }

    getchar();
    return 0;
    }



  • programmnoob schrieb:

    das problem ist das er prüfen soll ob wirklich ein richtiges rechenzeichen eingegeben wird

    Nein, das Problem ist Klammersetzung. Wenn Du ein eigenes Problem haben möchtest, mach doch bitte Deinen eigenen Thread auf, danke.



  • weiß nicht selbst wenn es klammer setzung ist wisst ihr wie das geht



  • Was er Dir sagen wollte, war, das Deine Frage nichts mit dem Thema dieses Threads (Klammersetzung) zu tun hat und Du gefälligst einen eigenen Thread aufmachen sollst.
    Und benutze dann auch bitte gleich das Syntaxhighlighting...



  • char coperator, auswahl='j';
    
    while (auswahl=='j' || auswahl=='J')
    .....
    }
    

    ???

    //--Vergleich der Operatoren mit Rechnung---------
    while (coperator !='/' || coperator != '*' || coperator != '+'||coperator !='-')
    

    ???

    Da fehlt aber noch ein wenig was oder?
    Lese mal bitte ein Buch über C++, und es gibt auch Leerzeichen, das ist ja furchtbar.



  • Dein Programm ist voll von Logikfehlern, mal abgesehen vom schlechten Stil und dass es überhaupt nicht funktioniert. Du erwartest doch nicht, dass hier jemand deinen Code neu schreibt? Ich war trotzdem so nett, einige Dinge zu kommentieren, vielleicht fällt dir selber noch etwas auf 😉

    programmnoob schrieb:

    //--------------------------------------------------------------------------- 
    
    #pragma hdrstop 
    #include <iostream.h>  // iostream.h ist veraltet. Benutze iostream
    //--------------------------------------------------------------------------- 
    
    #pragma argsused // bist du sicher, dass du diese Pragmas brauchst? Kennst du deren Auswirkungen überhaupt?
    int main() 
    { 
    
    double zahl1, zahl2, ergebnis; 
    char coperator, auswahl='j'; 
    
    while (auswahl=='j' || auswahl=='J') // sag mir einen Fall, in dem auswahl != 'j' ist.
    { 
    
    cout<<"--------Taschenrechner-------\n"; 
    cout<<"-----------------------------\n"; 
    
    cout<<"zahl eingeben \n"; 
    cin>>zahl1; 
    
    cout<<"operator eingeben \n"; 
    cin>>coperator; 
    
    cout<<"zahl eingeben \n"; 
    cin>>zahl2; 
    
    //--Vergleich der Operatoren mit Rechnung--------- 
    // Die while-Schleife wird so lange ausgeführt, wie coperator keines der vier Zeichen ist.
    while (coperator !='/' || coperator != '*' || coperator != '+'||coperator !='-') { 
    
    switch(coperator) 
    { 
    
    case '*': ergebnis=zahl1*zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl; 
    
    break; 
    
    case '/': ergebnis=zahl1/zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl; 
    
    break; 
    
    case '+': ergebnis=zahl1+zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl; 
    
    break; 
    
    case '-': ergebnis=zahl1-zahl2; cout<<zahl1<<" "<<coperator<<" "<<zahl2<<" = " << ergebnis<<endl<<endl; 
    
    break; 
    
    default: cout<<"neues rechenzeichen eingeben\n";cin>>coperator; 
    
    } 
    } 
    cout<<"nochmal"; 
    cin>>auswahl; 
    
    system ("Pause"); 
    } 
    
    getchar(); // was soll den das? Du hast ja bereits system("Pause").
    return 0; // überflüssig, du befindest dich am Ende von main()
    }
    

    Zum schlechten Stil noch: Benutze in Zukunft [ cpp ]-Tags. Die Strukturierung deines Codes ist zudem grauenhaft (Einrückung, Zeilenabstände, Blöcke, etc.). Die cout-Anweisungen im switch-Block könntest du zu einer zusammenfassen. Benutze using namespace std; oder schreibe std:: vor alle cout und cin, sonst wird das nicht gehen.

    BTW: Dein Name spricht für sich. Es bringt wohl am meisten, wenn du zuerst ordentlich C++ lernst und dann noch einmal neu mit deinem Programm beginnst. So kommst du nämlich nicht weit.


Anmelden zum Antworten