В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

namespace

14.11.2010, 04:39. Показов 1572. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Адекватно-ли использовать в таком случае пространство имен?
Лучший-ли это выход из ситуации?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
 
namespace consts
{
    const std::string cm="cm";
    const std::string in="in";
    const std::string ft="ft";
    const std::string m="m";
 
    const int cmtom=100;
    const double cmtoin=2.54;
    const int intoft=12;
}
 
bool isCorrVal(const std::string& s)
{
    if(s==consts::cm || s==consts::in || s==consts::ft || s==consts::m)
        return true;
    return false;
}
 
double valtom(std::string& s, double val)
{
    using namespace consts;
 
    if(s==cm)
        val/=cmtom;
    else if(s==in)
        val*=cmtoin/cmtom;
    else if(s==ft)
        val*=intoft*cmtoin/cmtom;
    else
        ;
    s=m;
    return val;
}
 
int main()
{
    std::locale().global(std::locale(""));
    double d=0, min=100500, max=0;
    std::string str;
    double sum=0;
    while(std::cin>>d)
    {
        std::cin>>str;
        std::cout<<d;
        if(isCorrVal(str))
            std::cout<<str<<'\n';
        else
        {
            std::cout<<"Ошибка. Нет такой длины "<< str <<'\n';
            continue;
        }
        
        d=valtom(str, d);
        sum+=d;
        std::cout<<"Now "<< d << str <<'\n';
        if(d<min)
        {
            min=d;
            std::cout<<"Наименьшее среди ранее введенных\n";
        }
        else if(d>max)
        {
            max=d;
            std::cout<<"Наибольшее среди ранее введенных\n";
        }
    }
    sum-=(min+max);
    std::cout<<"Сумма в метрах: "<< sum <<'\n';
    std::cout<<"Наименьшее в метрах: "<< min 
        <<'\n'<<"Наибольшее в метрах: "<< max <<'\n';
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2010, 04:39
Ответы с готовыми решениями:

namespace
Сколько читаю форумы и прочее, видел только namespace std. какие еще бывают и зачем они нужны?

Namespace
Мне посоветовали использовать функцию &quot;using namespace std;&quot;. За что это строчка отвечает? Может есть еще какие-то функции, которые можно...

namespace
Не могу понять суть пространства имен. Точнее ,в общих чертах , я понял что это,но зачем это нужно?В частности: 1)А зачем они...

6
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
14.11.2010, 06:08
Я бы использовал enum
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.11.2010, 06:12  [ТС]
Nameless One, enum хотел сначала использовать. Но не совсем дошло как совместить строки с перечислением в данном случае.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
14.11.2010, 07:14
Цитата Сообщение от ForEveR Посмотреть сообщение
Но не совсем дошло как совместить строки с перечислением в данном случае.
Ну хотя бы так, к примеру (на оптимальность не претендую, тут уж каждый делает так, как ему нравится):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
enum units
{
    cm, in, ft, m
};
 
const double u_in_meter[4] =
{
    .01, .0254, .3048, 1
};
 
enum units strtounit(const char* str)
{
    if(strcmp(str, "cm") == 0)
        return cm;
    if(strcmp(str, "in") == 0)
        return in;
    if(strcmp(str, "ft") == 0)
        return ft;
    if(strcmp(str, "m") == 0)
        return m;
    fprintf(stderr, "Ошибка - неизвестная единица \"%s\"\n", str);
    exit(EXIT_FAILURE);
}
 
double tometers(enum units unit, double val)
{
    return val * u_in_meter[unit];
}
    
int main()
{
    enum units unit;
    char str[3];
    double val;
    printf("Введите длину с указанием единицы измерения\n");
    printf("Формат: ЧИСЛО cm | in | ft | m\n");
    scanf("%lf %s", &val, str);
    printf("%.2f %s = %.2f m\n", val, str, tometers(strtounit(str), val));
    return EXIT_SUCCESS;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.11.2010, 07:21  [ТС]
Nameless One, Красиво.
0
Заблокирован
14.11.2010, 08:45
Лучший ответ Сообщение было отмечено ForEveR как решение

Решение

Цитата Сообщение от ForEveR Посмотреть сообщение
Лучший-ли это выход из ситуации?
Я бы как-нить так сделал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <exception>
 
typedef std::map<std::string, float> MAP;
 
class Units
{
private:
    MAP _units;
 
    Units() 
    { 
        _units["cm"] = 0.01f;
        _units["in"] = 0.0254f;
        _units["ft"] = 0.3048f;
        _units["m"] = 1.0f;
    }
public:
    static Units& getInstance()
    {
        static Units instance;
        return instance;
    }
 
    float convertToMeters(std::string units, float value)
    {
        MAP::iterator it = _units.find(units);
        if (it == _units.end())
            throw std::exception("Unknown units");
        return value * (*it).second;
    }
};
 
class Length
{
private:
    float _value;
public:
    friend std::istream& operator>>(std::istream& is, Length& length)
    {
        std::string units;
        float x;
        is >> x >> units;
        length._value = Units::getInstance().convertToMeters(units, x);
        return is;
    }
 
    friend std::ostream& operator<<(std::ostream& os, Length& length)
    {
        os << std::setiosflags(std::ios::fixed) << std::setprecision(2)
           << length._value << " m" << std::endl;
        return os;
    }
};
 
int main()
{
    Length length;
    std::cin >> length;
    std::cout << length;
    return 0;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.11.2010, 23:33  [ТС]
NightmareZ, Силен. Интересный вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2010, 23:33
Помогаю со студенческими работами здесь

namespace std
Добрый день. Вычитал что могу использовать любой namespace. Но в другом месте написано что если не использовать std, то не сможет...

Friend NameSpace
Привет! Допустим есть такое: namespace X { static const int a = 1; static const int b = 2; } class SuperClass { ...

Using namespace std
В чем отличие, если один cout (или что-то другое) будет в std, а другой stdd, для чего вообще using namespace? Уже везде где только можно...

подскажите с using namespace
все что ниже написано - это части класса myclass struct marked_area { long double L; int t; int num; // кол-во...

using namespace std
Обьясните пожалуйста понятным языком, что такое пространство имен, и зачем нужна эта команда или std::


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru