gerade und ungerade Zahlen



  • #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>

    int main()
    {
    float y1,y2,y3;
    int x;
    printf("Bitte geben Sie den Wert fuer x an:\n");
    scanf_s("%i",&x);
    if(x<0) {
    y2=1.0/x;
    if(x%2==0) printf("x ist eine negative gerade Zahl. Der Kehrwert lautet %2.2f.\n",y2);
    else
    printf("x ist eine ungerade negative Zahl. Der Kehrwert lautet %2.2f.\n",y2);
    }
    else
    if(x==0) {
    y1=sqrtf(x);
    printf("x hat den Wert 0. Die Wurzel aus x ist %2.2f.\n",y1);
    }
    else
    if(x>0) {
    y1=sqrtf(x);
    y2=1.0/x;
    y3=logf(x);
    if(x%2==0) printf("x ist eine positive gerade Zahl. Die Wurzel aus x ist %2.2f, der Kehrwert %2.2f und der Logarithmus %2.2f.\n",y1,y2,y3);
    else
    printf("x ist eine postive ungerade Zahl. Die Wurzel aus x ist %2.2f, der Kehrwert %2.2f und der Logarithmus %2.2f.\n",y1,y2,y3);
    }
    return 0;
    }

    zumindest funktioniert es. und die aufgabenstellung is erfüllt. verbesserungswürdig ist es warscheinlich auch noch. aber für heut geb ich mich damit zufrieden und geh zur nächsten aufgabe über.



  • ok, wenn ich diese cout und cin befehle benutze, wie kann ich dann einen wert damit wieder ausgeben?

    float p;
    cout <<"Bitte geben Sie die Endpunktezahl der Klausur an!\n";
    cin >> p;

    cout <<"Die Punktezahl ist %p\n";

    oder wie?



  • also das, was du lernst ist aber definitiv C (auch die Header sind C-Header)...

    ich hätte es anders gemacht...

    float x;
    std::cin >> x;
    //überprüfung der eingabe (per std::cin.good())
    
    if(x == int(x))
    {
      int x2 = x;
      std::cout << "x ist ";
      if (x2%2)
       std::cout << "un";
      std::cout << "gerade" << std::endl;
    }
    else
    {
      std::cout << "x ist keine ganze Zahl und somit ist die gerade/ungerade nicht definiert" << std::endl;
    }
    
    std::cout << "1/x = ";
    if(x != 0)
    {
      std::cout << 1/x << std::endl;
    }
    else
    {
      std::cout << "NaN" << std::endl;
    }
    
    //und so weiter... in etwa so
    if (x > 0)
    {
      std::cout << log(x) << std::endl;
    } //else....
    
    if (x >= 0)
    {
      std::cout << sqrt(x) << std::endl;
    }
    

    in C natürlich die entsprechnenden Pendants zu std::cout und std::cin

    bb

    edit:

    #include <iostream> //damit std::cout und std::cin vorhanden sind
    
    using namespace std; //damit du nicht mehr std::cout und std::cin etc sondern nur noch cout und cin usw schreiben musst - das könnte man auch so umgehen:
    using std::cout;
    using std::cin;
    using std::endl;
    //oder man lässt es einfach weg und schreibt nen std:: davor
    
    int main()
    {
      int x;
      std::cin >> x;
      if (std::cin.bad())
      {
        std::cout << "falsche Eingabe" << std::endl;
      }
      float y;
      std::cin >> y;
    
      //etc.
    }
    

    das soll dir nur Zeigen, dass der operator >> und << immer richtig überladen wird... Denkbar wäre auch so etwas:
    std::cin >> x >> y >> usw >> usf

    Dafür musst du nur mal nach streams suchen... sollte auch iwo in der FAQ stehen oder so ^^

    bb



  • ok, wenn du sagst, dass das c++ is, fühl ich mich grad von der uni n bissl....naja, egal.
    uns wurde auf jedenfall gesagt, dass es c++ wäre. und da ich vorher nu gar keine ahnung hatte, hab ich es nich besser gewusst.

    komisch

    sry, rechtschreibfehler



  • stotty schrieb:

    ok, wenn du sagst, dass das c is, fühl ich mich grad von der uni n bissl....naja, egal.
    uns wurde auf jedenfall gesagt, dass es c++ wäre.

    In dem von dir geposteten Code ist nichts, das nicht C wäre. Man kann das aus Kompatibilitätsgründen vielleicht durch einen C++ Compiler jagen (sofern er noch die alten C-Header erlaubt, was viele noch tun), aber mit C++ hat das dennoch nichts, aber auch garnichts zu tun.

    cu André



  • @stotty
    Du solltest deine Aufgaben besser nicht zusammenfassen. Das hier

    if(x==0) {
    y1=sqrtf(x);
    printf("x hat den Wert 0. Die Wurzel aus x ist %2.2f.\n",y1);
    }
    

    ist ziemlich unsinnig da die Wurzel aus 0 ja immer 0 ist.



  • is mir klar. aber es ist definiert. und wir sollen die werte nur dann nicht angeben, wenn sie nciht definiert sind.



  • stotty schrieb:

    is mir klar. aber es ist definiert. und wir sollen die werte nur dann nicht angeben, wenn sie nciht definiert sind.

    Wieso dann noch die mühsame Behandlung des Spezialfalls 0, wenn du die Wurzel sowieso noch einmal errechnest?



  • is zu übungszwecken. so seh ich, dass ich das richtige eingegeben hab. ist klar. dass es nehr arbeit ist. aber es soll letzendlich ne übung sein



  • Dann hoffe ich mal, dass deine Übung zu Erkenntnisgewinn führt. 🙂



  • Trotzdem ist es wahrscheinlich nicht schlecht, wenn du dir bereits in Übungen gute Dinge angewöhnst. 😉

    Ich meine ja hauptsächlich, dass bei 0 noch einmal die Wurzel ausgerechnet und die Variable einzeln ausgegeben wird. Das ist unnötig und braucht mehr Zeit. Klar macht es bei diesem Beispiel nicht viel aus, aber dann wirst du es bei kritischeren Dingen auch wissen. 🙂


Anmelden zum Antworten