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

Как в С++ записываються промежутки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.86
rembosan
0 / 0 / 0
Регистрация: 11.03.2012
Сообщений: 17
26.05.2012, 23:48     Как в С++ записываються промежутки #1
Есть такая задача: сделать так что бы программа высчитывала знак зодиака. Как записать условие, как вообще задать промежуток?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 23:48     Как в С++ записываються промежутки
Посмотрите здесь:

C++ Промежутки
C++ На отрезке xє[-4; 4] выделить промежутки длиной h = 0.1, в которых есть действительные корни функции b = xtgx-e ^ (x-3)
Опишите промежутки чисел и символов при разных типах C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
27.05.2012, 00:10     Как в С++ записываються промежутки #2
Ну промежуток можно задать в стиле
C++
1
2
3
int x;
if(x>10 && x<20)//промежуток от 10 до 20
 doSomething();
Но ваша задача классически решается через switch-case.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.05.2012, 05:53     Как в С++ записываються промежутки #3
Цитата Сообщение от Gepar Посмотреть сообщение
Но ваша задача классически решается через switch-case.
365 case'ов? о_о
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
27.05.2012, 09:04     Как в С++ записываються промежутки #4
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
#include <iostream>
int main()
{
    using namespace std;
    cout << "Введите дату рождения\n";
    int day,mounth;
    cin >> day >> mounth;
    switch (mounth)
    {
        case 1: if (day<21) cout<<"Вы козерог ";
                else cout<<"Вы водолей "; break;
        case 2: if (day<21) cout<<"Вы водолей"; 
                else cout<<"Вы рыбы";break;
        case 3: if (day<21) cout<<"Вы рыбы";
                else cout<<"Вы овен: ";break;
        case 4: if (day<21) cout<<"Вы овен";
                else cout<<"Вы телец";break;
        case 5: if (day<21) cout<<"Вы телец";
                else cout<<"Вы близнецы";break;
        case 6: if (day<22) cout<<"Вы близнецы";
                else cout<<"Вы рак :)";break;
        case 7: if (day<23) cout<<"Вы рак :)" ;
                else cout<<"Вы лев";break;
        case 8: if (day<24) cout<<"Вы лев";
                else cout<<"Вы дева";break;
        case 9: if (day<24) cout<<"Вы дева";
                else cout<<"Вы весы";break;
        case 10:if (day<24) cout<<"Вы весы";
                else cout<<"Вы скорпион";break;
        case 11:if (day<23) cout<<"Вы скорпион";
                else cout<<"Вы стрелец";break;
        case 12:if (day<22) cout<<"Вы стрелец";
                else cout<<"Вы козерог";break;
    }
    return 0;
 
}
Правда не компилил, но выглядит примерно так..
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
27.05.2012, 10:45     Как в С++ записываються промежутки #5
Вообще-то знак зодиака определяется координатой (градусом) Солнца. А его положение совсем не соответствует приведенному вами алгоритму. Так, смена знака может произойти и в середине дня. И в разные моменты (и даже дни!) в разные годы
Одна моя знакомая утверждала, что она Водолей. С упорством Козерога. А до желанного Водолея ей не хватило всего-то четверть градуса.
Если известна долгота Солнца (lon) то задача решается так
C
1
2
3
4
char *znak[12] = { "Овен", "Телец", ..... };
double lon; int z;
z = (int)lon % 30;
cout<< "You is " << znak[z];
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.05.2012, 12:32     Как в С++ записываються промежутки #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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <string>
#include <stdexcept>
#include <list>
#include <utility>
#include <sstream>
 
class Date
{
public:
    Date() : pMD(1, 1){}
    explicit Date(std::string const& s)
    {
        std::istringstream iss(s);
        iss >> pMD.second;
        if(pMD.second < 1 || pMD.second > 31) throw std::out_of_range("day out of range");
        if('.' != iss.get()) throw std::invalid_argument("Incorrect date format");
        iss >> pMD.first;
        if(pMD.first < 1 || pMD.first > 12) throw std::out_of_range("month out of range");
        if(!iss.eof()) throw std::invalid_argument("Incorrect date format");
    }
    bool operator<=(Date const& d) const
    {
        return pMD <= d.pMD;
    }
    friend std::ostream& operator<<(std::ostream& o, Date const& d)
    {
        return o << d.pMD.second << '.' << d.pMD.first;
    }
private:
    std::pair<std::size_t, std::size_t> pMD;
};
 
class ZSign
{
public:
    explicit ZSign(std::size_t num)
    {
        switch(num)
        {
            case 1 : Init("Ram", Date("21.03"), Date("20.04")); break;
            case 2 : Init("Bull", Date("21.04"), Date("21.05")); break;
            case 3 : Init("Twins", Date("22.05"), Date("21.06")); break;
            case 4 : Init("Crab", Date("22.06"), Date("22.07")); break;
            case 5 : Init("Lion", Date("23.07"), Date("22.08")); break;
            case 6 : Init("Maiden", Date("23.08"), Date("23.09")); break;
            case 7 : Init("Scales", Date("24.09"), Date("23.10")); break;
            case 8 : Init("Scorpion", Date("24.10"), Date("22.11")); break;
            case 9 : Init("Archer", Date("23.11"), Date("21.12")); break;
            case 10 : Init("Sea-Goat", Date("22.12"), Date("20.1")); break;
            case 11 : Init("Water-Bearer", Date("21.01"), Date("19.02")); break;
            case 12 : Init("Fish", Date("20.02"), Date("20.03")); break;
            default : throw std::out_of_range("ZSign argument must belongs to an interval [1,12]");
        }
    }
    friend std::ostream& operator<< (std::ostream& o, ZSign const& zs)
    {
        return o << zs.name << '(' << zs.beg << '-' << zs.end << ')';
    }
    friend class ZYear;
private:
    void Init(std::string const& name_, Date const& begDate_, Date const& endDate_)
    {
        name = name_;
        beg = begDate_;
        end = endDate_;
    }
    Date beg, end;
    std::string name;
};
 
class ZYear
{
public:
    ZYear()
    {
        for(std::size_t i = 0; i < 12; l.emplace_back(++i));
    }
    ZSign GetSignByDate(Date const& d) const
    {
        for(auto const& val : l)
        {
            if(val.beg <= d && d <= val.end) return val;
        }
        auto it = l.begin();
        std::advance(it, 9);
        return *it;
    }
private:
    std::list<ZSign> l;
};
 
int main()
{
    ZYear y;
    std::cout << y.GetSignByDate(Date("22.07")) << std::endl;
    return 0;
}
Evg
27.05.2012, 15:07     Как в С++ записываються промежутки
  #7

Не по теме:

Чувствуется, дело закончится этим

Yandex
Объявления
27.05.2012, 15:07     Как в С++ записываються промежутки
Ответ Создать тему
Опции темы

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