double wert aus int function zurückgeben



  • Hallo

    Ich habe ein Unterprogramm. z.B.:

    int bla(int a)
    {
      int ergebnis;
      ergebnis = a*a;
      return(ergebnis);
    }
    

    In meinem Hauptprogramm brauche ich aber einen double wert, da in der aufgabenstellung expliziete typecast gefordert sind.

    int main()
    {
      double ergebnis;
      int a;
      cin >> a;
      ergebnis = bla(a);
      cout << ergebnis;
    }
    

    In diesem fall würde ich ja im Hauptprogramm in Ergebnis (double) einen int Wert schreiben (return wert aus int bla()).

    Kann/darf ich folgendes machen?

    int bla(int a)
    {
      int ergebnis;
      ergebnis = a*a;
      return(double(ergebnis)); // <-- int wert in double umwandeln
    }
    


  • Wenn du in der Funktion einen double Wert zurückgeben willst dann musst du auch den Rückgabewert von int auf double abändern.

    Wenn ein expliziter Cast in der Aufgabenstellung gefordert ist würde ich sowas machen:

    ergebnis = static_cast<double>(bla(a));
    


  • Erstmal ein paar allgemeine Anmerkungen:

    voie main()
    

    Da wolltest du wohl

    void main()
    

    schreiben, allerdings sollte es besser so heißen:

    int main()
    

    Und dann beim return deiner Funktion kannst du die Klammern weglassen:

    return ergebnis;
    

    Und für dein Problem wäre es vielleicht ganz angebracht einfach ein static_cast an die richtige Stelle zu platzieren:

    //main.cpp
    #include <iostream>
    using std::cout;
    using std::cin;
    
    int bla(int a);
    
    int main() 
    { 
      double ergebnis; 
      int a; 
      cin >> a; 
      ergebnis = static_cast<double>(bla(a)); 
      cout << ergebnis; 
    
      return 0;
    }
    
    int bla(int a) 
    { 
      int ergebnis; 
      ergebnis = a*a; 
      return ergebnis; 
    }
    

    Edit: Hmmpf... zu langsam 😞



  • Mizar schrieb:

    Erstmal ein paar allgemeine Anmerkungen:

    voie main()
    

    Da wolltest du wohl

    void main()
    

    schreiben, allerdings sollte es besser so heißen:

    int main()
    

    Ja, sollte

    void main()
    

    heißen.

    static_cast kannte ich bisher noch nicht.

    Könnte man es nicht auch so machen?

    //main.cpp
    #include <iostream>
    using std::cout;
    using std::cin;
    
    int bla(int a);
    
    int main() 
    { 
      double ergebnis; 
      int a; 
      cin >> a; 
      ergebnis = double ((bla(a)); //<---
      cout << ergebnis; 
    
      return 0;
    }
    
    int bla(int a) 
    { 
      int ergebnis; 
      ergebnis = a*a; 
      return ergebnis; 
    }
    


  • Realseth schrieb:

    static_cast kannte ich bisher noch nicht.

    Könnte man es nicht auch so machen?

    ...
    ergebnis = double ((bla(a)); //<---
    ...
    

    Beides läuft auf das selbe hinaus. Aus static_cast geht etwas besser hervor, was genau da passiert, aber letzlich ist es Geschmacksache, welche von beiden Varianten man benutzt.



  • Ok.
    Danke euch allen. :xmas1: 👍



  • dooooomi schrieb:

    Beides läuft auf das selbe hinaus. Aus static_cast geht etwas besser hervor, was genau da passiert, aber letzlich ist es Geschmacksache, welche von beiden Varianten man benutzt.

    Hierbei ist noch anzumerken, dass static_cast nicht nur schneller zu erkennen ist, sondern auch einen genau definierten Aufgabenbereich besitzt (Standardkonvertierungen). Mit dem Klammern- oder Funktionsschreibweise-Cast kannst du beispielsweise schnell Zeiger zerschiessen, ohne dass du es merkst. Oder const wegcasten. In C++ wurde die Funktionalität genau aufgeteilt in static_cast , const_cast und reinterpret_cast , was viel mehr Sicherheit beim Programmieren verleiht.


Anmelden zum Antworten