Форум программистов, компьютерный форум CyberForum.ru

Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Lynx607
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 19
18.10.2010, 21:59     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #1
Условие: "Нарисуйте граф целых и фундаментальных типов,где от одного типа идёт стрелка к другому,если все значения первого типа могут быть представлены значениями второго в любой реализации,соответствующей стандарту.Нарисуйте такой граф для типов вашей любимой реализации".
В google, кроме ссылки на этот форум, ничего дельного не увидел.

Данный задача рассматривалась в теме Небольшая мелочь по теории, но ответа на свои вопросы я не нашёл

Итак:
1. В упражнении сказано: "Нарисуйте граф целых и фундаментальных типов..." - почему целые выделены, если они входят в фундаментальные? Или нужно строить граф, где значения целых связаны стрелками со всеми значениями фундаментальных типов? Или, может быть, отдельно граф целых и отдельно граф фундаментальных?

2. В упражнении сказано: "...значения первого типа могут быть представлены значениями второго...".
Например, функция int ('a'), возвращает соответствующий 'a' номер - это и есть представление значений одного типа значениями другого?

3. В указанной мной теме на 1 странице Gravity писал: "Что-то вроде этого: char -> short -> int -> long."
Это элемент графа? Из каких соображений построена эта последовательность?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2010, 21:59     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос
Посмотрите здесь:

C++ namespace Страуструп 3-е издание
Калькулятор из книги Язык программирования С++ (автор Бьерн Страуструп) C++
C++ книгa "Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп;
Бьерн Страуструп второе издание ошибка в моей голове или в коде? C++
Кто читал Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.10.2010, 23:47     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #2
Lynx607, 3.
char гарантировано меньше либо равен short, short гарантировано меньше либо равен int, int гарантировано меньше либо равен long
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
18.10.2010, 23:47     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #3
2,3. Первое: sizeof(char)<sizeof(short)<=sizeof(int)<=sizeof(long). Так как все типы хранят целые числа, память, используемая числом, полностью содержит целую часть числа. То есть, любое значение char'а ( 1 байт вроде как почти везде ) полностью поместиться в short и т.д.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.10.2010, 23:50     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #4
Если поможет. В свое время писал так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    std::cout<<"char";
    if(sizeof(char)<=sizeof(short)) std::cout<<"->short";
    if(sizeof(short)<=sizeof(int)) std::cout<<"->int";
    if(sizeof(int)<=sizeof(long)) std::cout<<"->long\n";
    
    std::cout<<"float";
    if(sizeof(float)<=sizeof(double)) std::cout<<"->double";
    if(sizeof(double)<=sizeof(long double)) std::cout<<"->long double\n";
 
    std::cout<<"bool";
    if(sizeof(bool)<=sizeof(int)) std::cout<<"->int";
    if(sizeof(int)<=sizeof(long)) std::cout<<"->long\n";
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
19.10.2010, 02:38     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #5
Ну, насчет char -> short ребята погорячились, так как, согласно стандарту, 1 = sizeof(char) <= sizeof(short), т.е. стандарт допускает однобайтовый short (по стандарту всегда signed), в то время как char, в зависимости от реализации, может быть и unsigned, и в этом случае не все значения char могут быть представлены значениями short.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.10.2010, 02:50     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #6
Mr.X, Так и написано что гарантировано меньше, либо равен.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
19.10.2010, 03:10     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Mr.X, Так и написано что гарантировано меньше, либо равен.
Ну это по размеру в байтах. Но так как стандарт не требует, чтобы char был обязательно signed, то возможна ситуация, когда char реализован как однобайтный беззнаковый с диапазоном 0..255, а short как однобайтный знаковый с диапазоном -128…127, и в этом случае значения char из диапазона 128…255 не смогут поместиться в short.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2010, 22:30     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос
Еще ссылки по теме:

Страуструп 3 издание в электронном виде C++
Язык программирования Си++.Страуструп, 1991 год C++
Стивен Прата Язык программирования C++ лекции и упражнения (6-е издание). Листинг 6.8 - странная штука C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Lynx607
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 19
20.10.2010, 22:30  [ТС]     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос #8
Как я понял, чтобы построить граф, в котором стрелка от типа_1 идёт к типу_2(см. условия), необходимо, чтобы выполнялись 2 условия:

1. size_of(тип_2) <= size_of(тип_1)
2. интервал значений типа_1 <= интервал значений типа_2

Приведу значения для своей реализации C++:

Type smallest biggest
bool 0 1
char � 
short -32768 32767
int -2147483648 2147483647
long -2147483648 2147483647
unsigned 0 4294967295
float 1.17549e-38 3.40282e+38
double 2.22507e-308 1.79769e+308
long double3.3621e-4932 1.18973e+4932


Size of 'bool' is: 1
Size of 'char' is: 1
Size of 'short' is: 2
Size of 'int' is: 4
Size of 'long' is: 4
Size of 'float' is: 4
Size of 'double' is: 8
Size of 'long double' is: 12

Тогда можно построить такой граф
(в таблице 1столбец - размер, 2столбец - тип, стрелки идут сверху вниз):

Граф текстом вставить не получилось, так что вот Print Screen(в левом верхнем углу).
Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос

Я правильно понял?

P.S. почему я получил в этом коде:
#include <iostream>
#include <limits>
using namespace std;

int main ()
{
cout << "char " << numeric_limits<char> :: min () <<
" " << numeric_limits<char> :: max () << endl;
cout << "short " << numeric_limits<short> :: min () <<
" " << numeric_limits<short> :: max () << endl
/*...*/
return 0;
}

значения для char - '�' и '', хотя для всех остальных получил нормальные? Из-за того, что numeric_limits<> нельзя применять к символьным типам?
Yandex
Объявления
20.10.2010, 22:30     Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос
Ответ Создать тему
Опции темы

Текущее время: 18:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru