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

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

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

Студворк — интернет-сервис помощи студентам
Пишу кодер Рида-Соломона.
Дано следующее:
* 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2012, 02:35
Ответы с готовыми решениями:

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

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

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

39
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 14:20
Студворк — интернет-сервис помощи студентам
В принципе, можно просто вызывать пушбеки. Но тогда может получится ситуация, что вектор будет слишком часто выделять себе новую память. Чтобы этого избежать рекомендуется вначале вызывать 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
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 20:34  [ТС]
Аааа, помогите!!! Программа не хочет правильно умножать многочлены
Пишу такой код:
Кликните здесь для просмотра всего текста
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
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:09
Цитата Сообщение от 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
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 21:14  [ТС]
использовать отладчик
я не знаю, что это Можете мне рассказать, где это в МС ВС 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
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:30
Цитата Сообщение от vlad_light Посмотреть сообщение
А с инсерт нужно использовать резерв или рисайз?
Инсерт, по-моему, сам озаботится о выделении памяти. И выделит ее один раз, если нужно. Поэтому можно просто вызывать инсерт.
Да, так нормально.
Отладчик? Нажимайте не F5, а F10 и начнете двигаться в программе по шагам. Если нажать F11, То провалитесь внутрь метода, если F10, то пройдете его, не заходя внутрь.
По-моему, среди прочих кнопок у VS по умолчанию вынесены кнопки для отладки. Хотя в этом уже не уверен)
1
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 19:11  [ТС]
Благодарствую:-) будем пробовать...

Добавлено через 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
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 19:47
Цитата Сообщение от 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
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 20:44  [ТС]
Лучше заменить на связку 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
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 21:36
Если убрать надо с конца, то тот же код будет выглядеть так:
Кликните здесь для просмотра всего текста
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
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 03:54  [ТС]
Помогите, а то шо-то голова не варит Написал такой код:
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
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 10:38
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
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 21:19  [ТС]
Меня вот ругают за то, что я использую MS VS 2010 Express. Не подскажите, на каких условиях я его использую (поскольку лицензионное соглашение не читал и найти не могу). В вики написано, что
«Express»-редакции предлагают отлаженную, простую в обучении и использовании среду разработки пользователям, не являющимся профессиональными разработчиками ПО, — любителям и студентам.
Также там написано, что
С апреля 2009 года Microsoft прекратила поддержку всех предыдущих версий Visual Studio Express.
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
12.11.2012, 22:55
Цитата Сообщение от vlad_light Посмотреть сообщение
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
с какого это перепуга? Твоя цитата лишь означает, что если ты найдёшь баг в MSVS2008экспресс, техподдержка MS может пальцем не шевелить в ответ. Разве я не прав?
0
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 02:23  [ТС]
Возможно Вы и правы, я не знаю. Просто, если компания прекращает поддержку продукта, то она, тем самым, автоматически разрывает договор с покупателями и, ввиду того, что данный продукт уже купить нельзя, он становиться полностью бесплатным (хотя бы потому, что за него никто ни копейки ни даст). Естественно, сам продукт продавать нельзя, поскольку он запатнетован как продукт. Но использовать его для личного пользования никто не запрещает.
Мне известен такой пример: когда компания близард выпустила варкрафт3, для игры по всемирной сети нужно было ежемесечно вносить некоторую плату. Но, по истечении времени, проект перестал приносить достаточно прибыли и близарды прекратили финансирование проекта и сделали его абсолютно бесплатным.

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

Не по теме:

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru