Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
1

Многочлены над GF(2^m)

06.11.2012, 02:35. Показов 4226. Ответов 39
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу кодер Рида-Соломона.
Дано следующее:
* https://www.cyberforum.ru/cgi-bin/latex.cgi?m - количество битов в одном символе (читай, элементов поля https://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m));
* https://www.cyberforum.ru/cgi-bin/latex.cgi?n - длина кода (в символах);
* https://www.cyberforum.ru/cgi-bin/latex.cgi?k - длина сообщения (в символах);
* https://www.cyberforum.ru/cgi-bin/latex.cgi?g(x) - неприводимый многочлен степени https://www.cyberforum.ru/cgi-bin/latex.cgi?n-k над https://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m)
* https://www.cyberforum.ru/cgi-bin/latex.cgi?\overline m - сообщение из 0 и 1 конечной длины.
* https://www.cyberforum.ru/cgi-bin/latex.cgi?u - сообщение, полученное из https://www.cyberforum.ru/cgi-bin/latex.cgi?\overline m путём выделения блоков длины https://www.cyberforum.ru/cgi-bin/latex.cgi?m;
* А также естественное отображение https://www.cyberforum.ru/cgi-bin/latex.cgi?A:GF^n(2^m)\to P_n(GF(2^m)); (\alpha _0\alpha _1...\alpha _{n-1})\mapsto \alpha _0+\alpha _1x+...+\alpha _{n-1}x^{n-1}
На выходе нужно получить РС-код:
* https://www.cyberforum.ru/cgi-bin/latex.cgi?v - код длины https://www.cyberforum.ru/cgi-bin/latex.cgi?n (в символах), по формуле: https://www.cyberforum.ru/cgi-bin/latex.cgi?v=A^{-1}(x^{n-k}(Au)(x)+(x^{n-k}(Au)(x) \mathrm{mod} g(x)))
https://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m)=\{0,\alpha ^0, \alpha ^1,...,\alpha ^{2^m-2}\}, где https://www.cyberforum.ru/cgi-bin/latex.cgi?g(\alpha )=0.
По теории вроди бы всё, сейчас попробую описать прототип реализации.

Добавлено через 2 часа 17 минут
Посмотрите, пожалуйста!
Кликните здесь для просмотра всего текста
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
#ifndef RS_encoder.h
 
#include <vector>
 
const int GROUP_DEGREE = 0; // = m -- порядок группы GF(2^m)
const std::vector<int> PRIMITIVE_POLYNOMIAL (0); // примитивный полином в GF(2^m)
 
class GF 
{
private:
    int alpha_power; // представление в виде степени альфа
    std::vector<int> alpha_vector; // представление в виде вектора
    bool null; // индикатор того, что вектор нулевой
 
    void power_to_vector ();
    void vector_to_power ();
 
public:
    GF ();
    GF (int power); // используем power_to_vector
    GF (std::vector<int> vector); // используем vector_to_power
    ~GF ();
 
    GF operator+ (GF right_hand_side); // сложение
    GF operator* (GF right_hand_side); // умножение
 
    void show_alpha_vector (); //вывод на экран вектора
};
 
#endif

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef GF_polynom.h
 
#include "GF.h"
 
class GF_polynom
{
private:
    std::vector<GF> polynom; // вектор из коэфициентов полинома,
                             // которые принадлежат GF(2^m)
public:
    GF_polynom ();
    GF_polynom (std::vector<GF> coefficients);
    ~GF_polynom ();
 
    GF_polynom operator+ (GF_polynom right_hand_side); // сложение 
    GF_polynom operator* (GF_polynom right_hand_side); // умножение
    GF_polynom operator% (GF_polynom right_hand_side); // остаток от деления
};
 
#endif

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef RS_encoder.h
 
#include "GF_polynom.h"
#include <string>
 
const int CODE_LENGTH = 0; // длина кода
const int MESSAGE_LENGTH = 0; // длина сообщения
 
std::vector<int> str_to_int (std::string str_message); // строку в вектор
std::vector<GF> message_to_GF_message (std::vector<int> message); // вектор из 0 и 1 в 
                                                                  // вектор из элементов GF(2^m)
std::vector<GF> encode (std::vector<GF> GF_message, int n = CODE_LENGTH, int k = MESSAGE_LENGTH); // кодирование сообщения
 
#endif

Я пока не использовал ссылки и модификатор const. Завтра всё доделаю и буду приступать к написанию самих функций. Прокомментируйте, пожалуйста. Спасибо!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2012, 02:35
Ответы с готовыми решениями:

Найти все неприводимые многочлены второй степени над полем Z5, у которых коэффициент при x^2 равен 1 или 2
найти все неприводимые многочлены второй степени над полем Z5, что коэффициент при x^2 равен 1 или 2

Выразить через основные симметрические многочлены моногенные многочлены
Здравствуйте. помогите пожалуйста понять как делать следующее задание &quot;Выразить через основные...

Многочлены
http://s003.***********/i202/1001/dc/6e8447711438.png

Многочлены
решите(

39
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 14:20 21
Author24 — интернет-сервис помощи студентам
В принципе, можно просто вызывать пушбеки. Но тогда может получится ситуация, что вектор будет слишком часто выделять себе новую память. Чтобы этого избежать рекомендуется вначале вызывать reserve. Тогда вектор выделит себе заданное кол-во памяти и в пушбекам не будет выделять дополнительную.
resize нужен тогда, когда требуется создать вектор определенного размера со значениями по умолчанию. т.е. запись std::vector<my_class> vector_name(100); означает, что создается вектор на 100 элементов, у каждого из которых будет вызван конструктор. собственно, если вам эти значения по умолчанию не нужны, то лучше пушбеком пользоваться. Например, тут resize бесполезен:
C++
1
2
3
4
std::vector<my_class> v;
v.resize(100);
for (int i = 0; i < v.size(); ++i)
   v[i] = my_class(i);
0
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 20:34  [ТС] 22
Аааа, помогите!!! Программа не хочет правильно умножать многочлены
Пишу такой код:
Кликните здесь для просмотра всего текста
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
/* * * * * * * * * * * * * * * * * * * * * * *
                main.cpp
* * * * * * * * * * * * * * * * * * * * * * */
 
#include <iostream>
#include "RS_encoder.h"
 
int main()
{
    std::string str_mess1, str_mess2;
 
    std::cout << "IT'S POLYNOM TEST" << std::endl << std::endl;
    std::cout << "Group degree = " << GROUP_DEGREE << std::endl;
    std::cout << "Maximum message length = " << MESSAGE_LENGTH * GROUP_DEGREE << " bits" << std::endl;
    std::cout << "Maximum number of errors = " << MAX_ERRORS << " symbols" << std::endl;
    std::cout << "--------------------------------------------" << std::endl;
 
    std::cout << "input 1st message: ";
    std::cin >> str_mess1;
    GF_polynom polynom1 (message_to_GF_message (str_to_int (str_mess1)));
 
    std::cout << std::endl << "input 2nd message: ";
    std::cin >> str_mess2;
    GF_polynom polynom2 (message_to_GF_message (str_to_int (str_mess2)));
 
    std::cout << std::endl << "------------------------------------------" << std::endl;
 
    std::vector<GF> temp_GF_vec (polynom1.return_coefficients());
    
    std::cout << "1st messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    int temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    
    temp_GF_vec = polynom2.return_coefficients();
    
    std::cout << "2nd messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    GF_polynom polynom3 = polynom1 * polynom2;
 
    temp_GF_vec = polynom3.return_coefficients();
    
    std::cout << "Product of polynom1 and polynom2:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    std::cin.get();
    std::cin.get();
}

а оно мне неправильно считает. Например:
https://www.cyberforum.ru/cgi-bin/latex.cgi?m=2 и примитивный полином https://www.cyberforum.ru/cgi-bin/latex.cgi?g(x)=x^2+x+1. Тогда, если https://www.cyberforum.ru/cgi-bin/latex.cgi?g(\alpha )=0, то https://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^2)=\{0,\alpha ^0,\alpha ^1,\alpha ^2\}=\{0,1,\alpha ,1+\alpha \}=\{00,10,01,11\} и https://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^3=\alpha ^0. Допустим, наш код не умеет исправлять ошибки (т.е. умеет только их выявлять): https://www.cyberforum.ru/cgi-bin/latex.cgi?t=0, len(M)=2\cdot (2^2-1-2\cdot 0)=2\cdot 3=6. Вводим два сообщения:
https://www.cyberforum.ru/cgi-bin/latex.cgi?M_1=101011=\alpha ^0\alpha ^0\alpha ^2, M_1(x)=\alpha ^0+\alpha ^0x+\alpha ^2 x^2
https://www.cyberforum.ru/cgi-bin/latex.cgi?M_2=110110=\alpha ^2\alpha ^1\alpha ^0, M_2(x)=\alpha ^2 +\alpha ^1x+\alpha ^0x^2
Тогда
https://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^0\cdot \alpha ^2 + (\alpha ^0\cdot \alpha ^1 +\alpha ^0\cdot \alpha ^2)x+(\alpha ^0\cdot \alpha ^0+\alpha ^0\cdot\alpha ^1+\alpha ^2\cdot \alpha ^2)x^2+(\alpha ^0\cdot\alpha ^0+\alpha ^2\cdot\alpha ^1)x^3+\alpha ^2\cdot\alpha ^0 x^4=
https://www.cyberforum.ru/cgi-bin/latex.cgi?=\alpha ^2+(\alpha ^1+\alpha ^2)x+(\alpha ^0+\alpha ^1+\alpha ^4)x^2+(\alpha ^0+\alpha ^3)x^3+\alpha ^2x^4=
Найдём https://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^4=\alpha ^{1+3}=\alpha ^1\cdot\alpha ^3=\alpha ^1\cdot\alpha ^0=\alpha ^{1+0}=\alpha ^ 1 и заменим все альфы векторами:
https://www.cyberforum.ru/cgi-bin/latex.cgi?=11+(01+11)x+(10+01+01)x^2+(10+10)x^3+11x^4=11+10x+10x^2+00x^3+11x^4=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4
Т.е.
https://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4, M_1\cdot M_2=1110100011,
а программа выдаёт
https://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^2x+\alpha ^1x^2+\alpha ^0 x^3+\alpha ^2x^4, M_1\cdot M_2=1111011011
Помогите, пожалуйста!

Добавлено через 10 минут
И ещё вопрос: как вставить в начало массива N нулей. Я делал так:
реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:09 23
Цитата Сообщение от vlad_light Посмотреть сообщение
И ещё вопрос: как вставить в начало массива N нулей. Я делал так:
реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
А в массиве уже есть элементы? думаю, что да. можно использовать метод insert
http://www.cplusplus.com/refer... or/insert/
точнее, вот такую его реализацию:
C++
1
void insert ( iterator position, size_type n, const T& x );
А по первому вопросу. Могу предложить использовать отладчик и пройти по коду по шагам.
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 21:14  [ТС] 24
использовать отладчик
я не знаю, что это Можете мне рассказать, где это в МС ВС 2010 есть?
А с инсерт нужно использовать резерв или рисайз?

Добавлено через 2 минуты
C++
1
2
3
4
5
void GF_polynom::shift (const int shift_value)
{
    polynom.reserve (polynom.size() + shift_value);
    polynom.insert (polynom.begin(), shift_value, null_vector);
}
вот так нормально?
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:30 25
Цитата Сообщение от vlad_light Посмотреть сообщение
А с инсерт нужно использовать резерв или рисайз?
Инсерт, по-моему, сам озаботится о выделении памяти. И выделит ее один раз, если нужно. Поэтому можно просто вызывать инсерт.
Да, так нормально.
Отладчик? Нажимайте не F5, а F10 и начнете двигаться в программе по шагам. Если нажать F11, То провалитесь внутрь метода, если F10, то пройдете его, не заходя внутрь.
По-моему, среди прочих кнопок у VS по умолчанию вынесены кнопки для отладки. Хотя в этом уже не уверен)
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 19:11  [ТС] 26
Благодарствую:-) будем пробовать...

Добавлено через 21 час 40 минут
Исправил умножение. Сложность была в том, что было сложно разобраться с длинами массивов: массив длины N - это многочлен длины N-1, причём на месте N-2 стоит коэффициент при степени N-1. Короче очень запутано всё получается В итоге надо было в одном месте прибавить, а в другом -- отнять еденичку. Также добавил возможность удалять нули перед умножением, чтоб не делать лишние операции. Умножает вроди как правильно, проверьте граммотность кода, пожалуйста.
Кликните здесь для просмотра всего текста
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
GF_polynom GF_polynom::operator* (const GF_polynom& right_hand_side) const
{   
    GF_polynom left_multiplier (*this);
    GF_polynom right_multiplier (right_hand_side);
 
    while (left_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
        left_multiplier.polynom.pop_back();
 
    while (right_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
        right_multiplier.polynom.pop_back();
 
    GF_polynom prod;
    prod.polynom.reserve (left_multiplier.polynom.size() + right_multiplier.polynom.size() - 1);
 
    for (int k = 0; k < left_multiplier.polynom.size() + right_multiplier.polynom.size() - 1; ++k)
    {
        GF sum (null_vector);
 
        for (int i = std::max (0, k - (int) right_multiplier.polynom.size() + 1); 
                            i <= std::min (k, (int) left_multiplier.polynom.size() - 1); ++i)
            sum = sum + (left_multiplier.polynom.at(i) * right_multiplier.polynom.at(k - i));
 
        prod.polynom.push_back (sum);
    }
 
    return prod;
}

Пошёл разбираться с делением.

Не по теме:

Скажите, а это нормально, что я такого рода код пишу уже целую неделю или это ооочень медленно?

0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 19:47 27
Цитата Сообщение от vlad_light Посмотреть сообщение
C++
1
2
3
4
while (left_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
* * * * left_multiplier.polynom.pop_back();
while (right_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
* * * * right_multiplier.polynom.pop_back();
Лучше заменить на связку find + erase
Вот накидал вам пример: http://liveworkspace.org/code/... 2b0eeb0bae
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
 
template <typename TContent>
void erase_start_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
   auto it = std::find_if(i_vector.begin(), i_vector.end(), [&](const TContent& i){ return i!=null_element; });
   i_vector.erase(i_vector.begin(), it);
}
 
int main()
{
   std::array<int, 5> arr = {{0, 0, 0, 42, 7}};
   std::vector<int> data(arr.cbegin(), arr.cend());
   
   erase_start_nulls(data, 0);
      
   for (int i : data)
      std::cout << i << " ";
   return 0;
}

Собственно, шаблона не пугайтесь) Более того, вы можете взять его в свою программу.

По поводу длительности - ничего в этом плохого нет. Вы параллельно осваиваете математику и язык. Это же непросто

Добавлено через 1 минуту
Цитата Сообщение от vlad_light Посмотреть сообщение
C++
1
i <= std::min (k, (int) left_multiplier.polynom.size() - 1);
Ах да, забыл сказать. Это лучше вытащить в отдельную переменную. Компилятор, конечно, может быть это и оптимизирует, но не факт. Тут же ваши типы данных.
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 20:44  [ТС] 28
Лучше заменить на связку find + erase
я, если честно, не очень понял, что оно делает Что-то типа: ищем в массиве ноль, фиксируем итератор, а затем удаляем все элементы до этого итератора? Мне нужно с конца нули убрать, тогда оно будет выглядеть:
C++
1
2
3
4
5
auto iter = std::find_if (polynom.rbegin(), polinom.rend(), /*не понял что это*/)
{
  return i != null_vector;
}
polynom.erase (iter, polynom.end());
Вон тот последний параметр -- это, как я понял элемент, который мы ищем, а потом ставим итератор на место найденного элемента, так? И в последней строке нужно писать iter или ++iter ?
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 21:36 29
Если убрать надо с конца, то тот же код будет выглядеть так:
Кликните здесь для просмотра всего текста
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
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
 
template <typename TContent>
void erase_end_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
   auto rit = std::find_if(i_vector.rbegin(), i_vector.rend(), [&](const TContent& i){ return i!=null_element; });
   if (rit != i_vector.rend())
   {
      i_vector.erase(rit.base(), i_vector.end());
   }
}
 
int main()
{
   std::array<int, 5> arr = {{42, 7, 0, 0, 0}};
   std::vector<int> data(arr.cbegin(), arr.cend());
   
   erase_end_nulls(data, 0);
      
   for (int i : data)
      std::cout << i << " ";
   return 0;
}

Да, идея тут такая - мы находим первый итератор, указывающей не на ноль, а затем удаляем все элементы от/до этого итератора.
можете заменить find_if на обычный цикл, который вам будет гораздо понятнее.
например
C++
1
2
3
4
5
6
7
8
for (auto rit = v.rbegin(); rit != v.rend(); ++rit)
{
   if (*rit != null_element)
   {
      v.erase(rit.base(), v.end());
      break;
   }
}
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 03:54  [ТС] 30
Помогите, а то шо-то голова не варит Написал такой код:
C++
1
2
3
4
5
6
7
8
for (auto iter = polynom.rbegin(); iter != polynom.rend(); ++iter)
    {
        if (iter->return_alpha_vector() != null_vector)
        {
            polynom.erase (iter.base(), polynom.end());
            break;
        }
    }
но, если там все нули, то он ничего не делает. Как по-быстренькому сделать так, чтоб он мне все нули, кроме первого удалял?
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 10:38 31
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename TContent>
void erase_end_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
    if (i_vector.empty())return;
    
    for (auto rit = i_vector.rbegin(); rit != i_vector.rend(); ++rit)
    {
        if (*rit != null_element)
        {
            i_vector.erase(rit.base(), i_vector.end());
            return;
        }
    }
    i_vector.erase(std::next(i_vector.begin()), i_vector.end());
}
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 21:19  [ТС] 32
Меня вот ругают за то, что я использую MS VS 2010 Express. Не подскажите, на каких условиях я его использую (поскольку лицензионное соглашение не читал и найти не могу). В вики написано, что
«Express»-редакции предлагают отлаженную, простую в обучении и использовании среду разработки пользователям, не являющимся профессиональными разработчиками ПО, — любителям и студентам.
Также там написано, что
С апреля 2009 года Microsoft прекратила поддержку всех предыдущих версий Visual Studio Express.
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,494
Записей в блоге: 1
12.11.2012, 22:55 33
Цитата Сообщение от vlad_light Посмотреть сообщение
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
с какого это перепуга? Твоя цитата лишь означает, что если ты найдёшь баг в MSVS2008экспресс, техподдержка MS может пальцем не шевелить в ответ. Разве я не прав?
0
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 02:23  [ТС] 34
Возможно Вы и правы, я не знаю. Просто, если компания прекращает поддержку продукта, то она, тем самым, автоматически разрывает договор с покупателями и, ввиду того, что данный продукт уже купить нельзя, он становиться полностью бесплатным (хотя бы потому, что за него никто ни копейки ни даст). Естественно, сам продукт продавать нельзя, поскольку он запатнетован как продукт. Но использовать его для личного пользования никто не запрещает.
Мне известен такой пример: когда компания близард выпустила варкрафт3, для игры по всемирной сети нужно было ежемесечно вносить некоторую плату. Но, по истечении времени, проект перестал приносить достаточно прибыли и близарды прекратили финансирование проекта и сделали его абсолютно бесплатным.

Добавлено через 2 часа 58 минут
Пожалуйста, посоветуйте IDE, максимально похожую на MS VS. Я с этой eclipse уже замучался: нажимаешь 1 раз -- не работает, 2-ой раз -- работает, потом опять ошибки выдаёт и т.п.
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.11.2012, 02:55 35
vlad_light, а зачем менять иде? почему вас ругают за vs?
0
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 02:59  [ТС] 36
Ну, я в этих делах не спец, но говорят, что разрабатывать "коммерческое ПО" на вс просто так нельзя. Так вот меня интересует, допускает ли express версия это или нет? Мне сказали, что нет, а я читаю-читаю и вроди как да. Вот хочу уточнить.
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.11.2012, 03:03 37
social.msdn.microsoft.com/Forums/ru/2171/thread/4222416b-91b2-42c6-9475-3f40395f76ed
использовать можно
1
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 03:38  [ТС] 38
Другое дело!

Не по теме:

А всё-таки, можете подсказать что-то похожее на всякий случай? Вы же примерно представляете, какого рода программы я буду писать, что для них подойдёт лучше всего?

0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 1
19.04.2013, 20:31 39
vlad_light, очень классный код! Вот только все очень сложно) ты не могу бы объяснить как устроена прога? какие и для чего классы? особенно интересно с точки зрения математики)
0
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
20.04.2013, 01:06  [ТС] 40
Говорю сразу, что это была первоначальная версия и после неё я весь код переписал заново. Писал уже давно, сейчас попробую вспомнить... По классам:
GF_Table - это табличка всех элементов поля GF(n), которая строится с помощью неприводимого многочлена, который мы задаем вручную для каждого n. На практике, как правило, применяется n=8.
GF - класс, представляющий элемент поля GF. Имеет два представления: векторная (через коэффициенты соответствующего полинома) и целочисленная (через соответствующую степень первообразного корня). Определены операции, позволяющие переходить от одной формы записи к другой. Обе формы нужны для операций +(векторная) и *(целочислнная).
Polynom - класс многочленов. Тут особо нечего рассказать...
RS_encoder - кодер Рида-Соломона. Все формулы лучше посмотреть в Б. Скляр - Цифровая связь, 2 глава, Коды Рида-Соломона.
Вообщем, это был мой первый опыт написания кода, поэтому тогда размышлял примерно так:
- написать класс для управлением элементами поля GF (операции +, *)
- написать класс для многочленов
- использовать предыдущие 2 класса для написания кодера/декодера
Как-то так... Если будут конкретные вопросы -- постараюсь ответить...
1
20.04.2013, 01:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2013, 01:06
Помогаю со студенческими работами здесь

Многочлены
На вход даётся два многочлена в математической форме, т.е. знаки операций могут быть пропущены,...

Многочлены
http://s44.***********/i106/1001/93/421c17bb2f28.png Прошу помочь решить\ или хоть популярно...

Многочлены
Как такое решать? Во 2-ом корни не могу найти (хотя, скорее всего, их не нужно находить), но и не...

Многочлены
Здравствуйте. Я хотела бы с вами посоветоваться. Мне нужно найти рациональные корни многочлена,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru