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

Поле чисел от 0 до N - C++

Восстановить пароль Регистрация
 
kiborg_18
4 / 4 / 0
Регистрация: 21.02.2011
Сообщений: 61
19.04.2011, 18:37     Поле чисел от 0 до N #1
Как в С++ или в С создать поле чисел, которое включает в себя все числа от 0 до N?
Напрмер поле чисел 0_3, включает в себя 0,1,2. 2+1 должно давать 0, 1+2 должно давать 0. кто-нибудь может помочь? Буду очень признателен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 18:37     Поле чисел от 0 до N
Посмотрите здесь:

C++ [C++]Поле шахматной доски определяется парой натуральных целых чисел, каждое из которых не превосходит восьми:
Поле first - целое число, длительность телефонного разговора в минутах; поле second - дробное число, стоимость одной минуты в гривнах C++
C++ Дано целое число N и набор из N целых чисел. Определить номера тех чисел наборе, которые меньше своего правого соседа, и количество К таких чисел.
Определить сможет ли белый слон расположенный на поле (a,b),одним ходом пойти на поле (e,f),не попав при этом под удар чёрного коня нах.(c,d) C++
C++ Поле шахматной доски определяется парой натуральных чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
19.04.2011, 19:21     Поле чисел от 0 до N #2
Создаешь свой класс, пишешь операторы. Cложение будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
...
int n;
int value;
pole operator+=(pole b)
{
    value = (value + b.value)%n;
    return *this;
}
...
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
19.04.2011, 22:04     Поле чисел от 0 до N #3
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/////////////////////////////////////////////////////////////////////////////////////////
//Как в С++ или в С создать поле чисел, которое включает в себя все числа от 0 до N?
//Напрмер поле чисел 0_3, включает в себя 0,1,2. 2+1 должно давать 0, 1+2 должно давать 0.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
template<int  characteristic>
class  T_field
{    
    int  val_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_field(int  int_val) : val_(normalize(int_val))
    {
        if(!is_prime(characteristic))
        {
            std::cout << "Характеристика поля "
                      << characteristic
                      << " не является простым числом."
                      << std::endl;
 
            throw(0);
        }
    }
    //-----------------------------------------------------------------------------------
    T_field  operator- ()
    {
        return  -val_;    
    }
    //-----------------------------------------------------------------------------------
    friend T_field  operator+ (T_field  f,  T_field  g)
    {
        return  f.val_ + g.val_;
    }
    //-----------------------------------------------------------------------------------
    friend T_field  operator- (T_field  f,  T_field  g)
    {
        return  operator+ (f, -g);
    }
    //-----------------------------------------------------------------------------------
    friend T_field  operator* (T_field  f,  T_field  g)
    {
        return  f.val_ * g.val_;
    }
    //-----------------------------------------------------------------------------------
    friend T_field  operator/ (T_field  f,  T_field  g)
    {
        if(g.val_ == 0)
        {
            std::cout << "Деление на ноль."
                      << std::endl;
            throw(0);
            return  0;
        }
        while(f.val_ % g.val_ != 0)
        {
            f.val_ += characteristic;
        }
        return  f.val_ / g.val_;
    }
    //-----------------------------------------------------------------------------------
    friend  std::ostream&  operator<< (std::ostream&  ostr, T_field  f)
    {
        ostr << f.val_;
        return  ostr;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    int  normalize(int  n)
    {
        while(n < 0)
        {
            n += characteristic;
        }
        return  n % characteristic;
    }
    //-----------------------------------------------------------------------------------
    bool  is_prime(int  n)
    {
        for(int  i = 2; i * i <= n; ++i)
        {
            if(n % i == 0)  return  false;
        }
        return  true;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    //typedef  T_field<6>  T_field_6;
    //T_field_6  g(7);
 
    typedef  T_field<5>  T_field_5;
    T_field_5  f_7 = 7;
    std::cout << "f_7 = "
              << f_7
              << std::endl;
 
    T_field_5  f_11(11);
    std::cout << "f_11 = "
              << f_11
              << std::endl;
 
    T_field_5  f_3_1(3);
    T_field_5  f_3 = f_3_1;
    T_field_5  f_4(4);
 
    std::cout << "f_3 * f_4 = "
              << f_3 * f_4
              << std::endl;
 
    std::cout << "f_3 * 4 = "
              << f_3 * 4
              << std::endl;
 
 
    std::cout << "3 * f_4 = "
              << 3 * f_4
              << std::endl;
 
 
    std::cout << "f_3 / f_4 = "
              << f_3 / f_4
              << std::endl;
 
    std::cout << "f_3 - f_4 = "
              << f_3 - f_4
              << std::endl;
 
    std::cout << "-f_3 = "
              << -f_3
              << std::endl;
 
    T_field_5  f_1(1);
    std::cout << "f_1 / f_3 = "
              << f_1 / f_3
              << std::endl;
 
    std::cout << "1 / f_3 = "
              << 1 / f_3
              << std::endl;
 
    std::cout << "997 / f_3 = "
              << 997 / f_3
              << std::endl;
 
    std::cout << "(f_3 + f_4) * f_3 = "
              << (f_3 + f_4) * f_3
              << std::endl;
 
    std::cout << "f_4 / (f_3 - f_3) = "
              //<< f_4 / (f_3 - f_3)
              << std::endl;
}
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
19.04.2011, 22:17     Поле чисел от 0 до N #4
Mr.X, а почему характеристика поля должно быть простым числом??
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
19.04.2011, 22:31     Поле чисел от 0 до N #5
Цитата Сообщение от Overmind024 Посмотреть сообщение
Mr.X, а почему характеристика поля должно быть простым числом??
Согласно теории, характеристика конечного поля является простым числом.
Число элементов любого конечного поля есть его характеристика в натуральной степени: |Fq| = q = p^n.
Я взял простейший случай n = 1.
Yandex
Объявления
19.04.2011, 22:31     Поле чисел от 0 до N
Ответ Создать тему
Опции темы

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