Speicherbedarf elementarer Datentypen



  • Guten Tag liebe Programmierfreunde,

    Folgende Aufgabe :
    Schreiben Sie ein C++-Programm, das für jeden der elementaren Datentyp char, short, int, long, float, double und long double die Größe des benötigten Speicherplatzes sowie die Untergrenze und Obergrenze seines Wertebereichs auf dem Bildschirm ausgibt. Die Ausgabe soll dabei folgendes Format haben:
    <Datentyp>
    Größe: <Größe>
    Untergrenze: <Untergrenze>
    Obergrenze: <Obergrenze>

    Naja, ich habe mir überlegt man kann ja den gewünschten Datentyp eingeben und dann gibt er die Sachen dafür aus, damit man nicht für jeden Datentyp jeden Schritt machen muss. Allerdings krieg ich das nicht hin, hier mein Versuch:

    #include <iostream>
    #include <climits>
    
    int main()
    {
            char Datentyp;
            std::cin >> Datentyp;
            std::cout << Datentyp   
                              << "\n " << sizeof(Datentyp)
                              << "\n" << Datentyp_MIN<< " ... " << Datentyp_MAX
                              << std::endl;
            std::cin.get();
            getchar();
            return 0;
    }
    


  • du lest datentyp vom typ char ein. char nimmt aber nur ein zeichen auf (außer du wolltest ein char array machen?). so wie du das machst müsstest du mit dem einen buchstaben if bedingungen oder einen case-statement aufstellen und jeweils die spezifische ausgabe machen.
    aus der angabe kann ich nicht herauslesen, dass du das mit cin machen musst.
    also ich hätte daher gesagt, du machst alles im main mit cout.

    cout <<"<int>\n";
    cout <<"Größe: " <<sizeof(int) <<"\n";
    cout <<"Untere Grenze: " <<INT_MIN <<"\n";
    cout <<"Obere Grenze: " <<INT_MIN <<"\n";
    
    und für die restlichen datentypen,...
    


  • Danke für die Antwort!



  • Nun habe ich für jeden Datentypen das so geschrieben, mit Verzweigungen.
    Was muss allerdings jetzt für eine Bedingung in die Verzweigung?
    So habe ich es versucht, er gibt aber mit jeder Eingabe nur das vom int aus.
    Es soll eigentlich sein , dass wenn ich eine 1 eingebe int kommt , eine 2 eingebe double usw.

    #include <iostream>
    #include <climits>
    
    int main()
    {
    	int Datentyp;
    	std::cin >> Datentyp;
    	if(Datentyp = 1)
    	{
    	std::cout <<"<int>\n"
    			  << "Größe: " << sizeof(int) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	else 
    	if(Datentyp = 2)
    	{
    	std::cout <<"<char>\n"
    			  << "Größe: " << sizeof(char) <<"\n"
    			  <<"Untere Grenze: " <<CHAR_MIN <<"\n" 
    			  <<"Obere Grenze: " <<CHAR_MAX <<"\n" << std::endl;
    	}
    	else
    	if(Datentyp = 3)
    	{
    	std::cout <<"<short>\n"
    			  << "Größe: " << sizeof(short) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	else
    	if(Datentyp = 4)
    	{
    	std::cout <<"<long>\n"
    			  << "Größe: " << sizeof(long) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	else
    	if(Datentyp = 5)
    	{
    	std::cout <<"<float>\n"
    			  << "Größe: " << sizeof(float) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	else
    	if(Datentyp = 6)
    	{
    	std::cout <<"<double>\n"
    			  << "Größe: " << sizeof(double) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	else
    	if(Datentyp = 1)
    	{
    	std::cout <<"<long double>\n"
    			  << "Größe: " << sizeof(long double) <<"\n"
    			  <<"Untere Grenze: " <<INT_MIN <<"\n" 
    			  <<"Obere Grenze: " <<INT_MAX <<"\n" << std::endl;
    	}
    	std::cin.get();
    	getchar();
    	return 0;
    }
    


  • Das in der Klammer bei if(Datentyp = 1) ist eine Zuweisung. Ein Vergleich sieht anders aus.



  • Problem gelöst, ich musste lediglich ein == schreiben! Jetzt klappt es!



  • Hmmm... INT_MIN INT_MAX für double usw.????

    Vorschlag:

    #include <iostream>
    #include<limits>           // hier sind die Bereichsinformationen
    
    using namespace std;
    
    int main() {
       cout << "Grenzwerte für Float-Zahl-Typen:" << endl;
       cout  << "Float-Min: " << numeric_limits<float>::min() << endl;
       cout  << "Float-Max: " << numeric_limits<float>::max() << endl;
       cout  << "Double-Min: " << numeric_limits<double>::min() << endl;
       cout  << "Double-Max: " << numeric_limits<double>::max() << endl;
       cout  << "Long-Double-Min: " << numeric_limits<long double>::min() << endl;
       cout  << "Long-Double-Max: " << numeric_limits<long double>::max() << endl;
    

    usw. usw.


  • Mod

    Vorschlag:

    numeric_limits ist hier nur umständlicher. Es lohnt sich aber, wenn man ein Funktionstemplate nutzt, um das ganze abzukürzen:

    #include <iostream>
    #include <limits>
    
    template<typename T>
    void dump_info(char const* name)
    {
    	std::cout << name << " min: " << std::numeric_limits<T>::min() << '\n'
    	          << name << " max: " << std::numeric_limits<T>::max() << '\n';
    }
    #define dump_info(T) dump_info<T>(#T)
    
    int main()
    {
    	dump_info(float);
    	dump_info(int);
    	dump_info(bool);
    }
    


  • Arcoth schrieb:

    numeric_limits ist hier nur umständlicher. Es lohnt sich aber, wenn man ein Funktionstemplate nutzt, um das ganze abzukürzen:

    Man muss nicht wissen, wie das passende Makro heißt.


Log in to reply