Tworzenie tabeli typów zmienntych

0

Witam wszystkich, dostałem polecenia napisania prostego programu, Polecenie brzmi: Napisz program, który utworzy tabelę zawierającą informacje o poszczególnych typach zmiennych.
W pierwszym wierszu tabeli mają znaleźć się etykiety kolejnych kolumn (Nazwa typu, Rozmiar, Wartosc minimalna, Wartosc maksymalna).
W kolejnych wierszach program wypisze powyższe parametry wszystkich znanych Ci typów zmiennych.
Da radę to zrobić w jakiś elegancki sposób ?

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    cout << "Nazwa typu:     Rozmiar:       Minimalna liczba:                   Maksymalna liczba:         " << endl;
    cout << "int                "<<sizeof(int)<<"            "<<INT_MIN<<"                          "<<INT_MAX<<endl;
    cout << "long               "<<sizeof(long)*8<<"             "<<LONG_MIN<<"                                 "<<LONG_MAX<<endl;
    cout << "long long          "<<sizeof(long)*8<<"            "<<LONG_LONG_MIN<<"                          "<<LONG_LONG_MAX<<endl;
    cout << "unsigned short     "<<sizeof(unsigned)/2<<"            "<<SHORT_MIN<<"                          "<<SHORT_MAX<<endl;
    cout << "unsigned int       "<<sizeof(unsigned)<<"                ";



    return 0;
}

Nie mam kompletnie pomysłu, tym bardziej że nie wiem jak zastosować sizeof'a dla short'a, Wiem że jest to czasochłonne ale jest jakaś opcja, która to może usprawnić ? Abym nie wpisywał wartości ,,z palca" ?

0

zdalne nauczanie w liceach?

2

Stwarzasz jakieś sztuczne problemy. Albo analizujesz je na oślep. jeśli masz jakieś błędy, to nie kop się z koniem, tylko podaj na forum.

  1. sizeof(shot unsigned) ślicznie działa
  2. skąd wymyślanie stałych na oślep? Pisze się je inaczej
    http://www.cplusplus.com/reference/climits/
  3. Co strzeliło do głowy, aby "ulepszać" sizeofy mnożeniem / dzieleniem?

Kod z korektami


#include <iostream>
#include <climits>

using namespace std;

int main()
{
	cout << "Nazwa typu:     Rozmiar:       Minimalna liczba:                   Maksymalna liczba:         " << endl;
	cout << "int                " << sizeof(int) << "            " << INT_MIN << "                          " << INT_MAX << endl;
	cout << "long               " << sizeof(long)  << "             " << LONG_MIN << "                                 " << LONG_MAX << endl;
	cout << "long long          " << sizeof(long long)  << "            " << LLONG_MIN << "                          " << LLONG_MAX << endl;
	cout << "unsigned short     " << sizeof(unsigned short)  << "            " << SHRT_MIN << "                          " << SHRT_MIN << endl;
	cout << "unsigned int       " << sizeof(unsigned int) << "                ";

	return 0;
}

Wynik wersji 32 bitowej i 64 są na Visual studio takie same
Nazwa typu: Rozmiar: Minimalna liczba: Maksymalna liczba:
int 4 -2147483648 2147483647
long 4 -2147483648 2147483647
long long 8 -9223372036854775808 9223372036854775807
unsigned short 2 -32768 -32768
unsigned int 4

0

Czy taka tabelka jest poprawnie zrobiona ?
Tabelka

2
mikko napisał(a):

Da radę to zrobić w jakiś elegancki sposób ?

Da się. Z pomocą std::numeric_limits i szablów i type_info

template<typename T>
std::string type_name()
{
     return type_info(typeid(T)).name();
}

// specjalizacja jest potrzebna bo domyślne nazwy mogą być dla ciebie dziwne
template<>
std::string type_name<int>()
{
     return "int";
}

...

template <typename T>
void print_type_description(std::ostream &out)
{
      out << type_name<T>() << .... ; // kombinuj sam
}

template<typename... Ts>
void print_descrition_for_types(std::ostream &out)
{
     int dummy[] { 0, ( print_type_description<Ts>(out),0 ), ... };
     (void*)dummy;
}

int main()
{
     print_descrition_for_types<int, char, long int, long long int>(std::cout);
}

Chyba, że możesz używać boost wtedy możne pewne rzeczy zrobić na skróty.

0

W C++17 można trochę uprościć fold expression.

template<typename ...Ts>
void print_description_for_types(std::ostream &out)
{
    out << "Nazwa typu: Rozmiar:     Minimalna liczba:    Maksymalna liczba:\n";
    (print_type_description<Ts>(out), ...);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1