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

Реализовать поле Галуа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Необходимо создать аналог БД http://www.cyberforum.ru/cpp-beginners/thread1076892.html
Всем доброго времени суток! Вопрос вот в чем: мне необходимо создать такой себе аналог БД, где есть определенное число сотрудников и определенное число вакансий; при этом каждый сотрудник на каждой вакансии должен получать определенный уровень з\п, являющийся уникальным для каждого конкретного случая. На выходе я должна получить полный список вакансий и для каждой вакансии нужно выбрать такого...
C++ Дано три числа. Среди отрицательных найти четные, среди положительных - нечетные дано три действительных числа. среди отрицательных найти парные, среди положительных непарные. вот я решила немного. но выбивает ошибку #include <stdio.h> #include <conio.h> int main() { float x,y,z; printf("vvedite tri chisla\n"); scanf("%f%f%f",&x,&y,&z); http://www.cyberforum.ru/cpp-beginners/thread1076847.html
Шаблоны. В чем разница? C++
В чем разница между этими объявлениями? Вроде и так можно и этак. А как правильней? template <class T> struct list { T value; list *prev; list *next; };
Найти координаты перпендикулярных векторов и сформировать множество C++
С клавиатуры задаются координаты 3 векторов на плоскости. Найти координаты перпендикулярных им векторов и сформировать из них множество В.
C++ Создание объекта класса http://www.cyberforum.ru/cpp-beginners/thread1076826.html
Создал свой класс с именем и фамилией, не могу создать объект этого класса, при проверке на ошибки всё нормально. Person.h #pragma once class Person { char* firstname; char* secondname; void Set(const char*,const char*); public: Person(const char*,const char*);
C++ Динамическая структура Помогите пожалуйста с заданием. Дано задание: На междугородной телефонной станции картотека абонентов, содержащая сведения о телефонах и их владельцах, организована как линейный список. Составить программу, которая: обеспечивает начальное формирование картотеки в виде линейного списка; производит вывод всей картотеки; вводит номер телефона и время разговора; выводит извещение на оплату... подробнее

Показать сообщение отдельно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
22.01.2014, 00:08  [ТС]     Реализовать поле Галуа
Цитата Сообщение от Tulosba Посмотреть сообщение
Только для интегральных типов (int,char, например)
Думал, что int* тоже к ним относится.

Добавлено через 5 часов 28 минут
Вот, я написал -- может кому будет полезно...
Можете, пожалуйста, глянуть код и по исправлять ошибки. Заранее благодарен!
Кликните здесь для просмотра всего текста
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
// GF.h
 
#pragma once
 
typedef unsigned char uint8;
typedef unsigned int uint32;
 
class GF
{
public:    
    GF();
    GF(const uint32 polynomial);
 
    static void initializeTable(const uint32 generatorPolynomial, const uint8 generatorPolynomialDegree);
    static void deleteTable();
 
    GF operator+(const GF& rhs) const; // operator- is the same as operator+
    GF operator*(const GF& rhs) const;
    GF invert() const; // a/b == a * b.invert
 
 
private:
    uint32 m_polynomial;
 
    static uint32 m_generatorPolynomial;    
    static const uint32* m_polynomialTable;
    static const uint32* m_rootTable;
    static uint32 m_tableSize;
};
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
// GF.cpp
 
#include "GF.h"
 
const uint32* GF::m_polynomialTable = nullptr;
const uint32* GF::m_rootTable = nullptr;
uint32 GF::m_generatorPolynomial = 0;
uint32 GF::m_tableSize = 0;
 
GF::GF()
{
 
}
 
GF::GF(const uint32 polynomial)
{
    m_polynomial = polynomial;
}
 
void GF::initializeTable(const uint32 generatorPolynomial, const uint8 generatorPolynomialDegree)
{
    deleteTable();
 
    m_generatorPolynomial = generatorPolynomial;
 
    m_tableSize = (1 << generatorPolynomialDegree) - 1;
    uint32* table = new uint32[m_tableSize];
 
    // construct root table
    for(uint8 i = 0; i < generatorPolynomialDegree; ++i)
        table[i] = 1 << i;
 
    uint32 tableMask = (1 << generatorPolynomialDegree) - 1;
    for (uint32 i = generatorPolynomialDegree; i < m_tableSize; ++i)
    {
        table[i] = table[i - 1] << 1;
 
        if(table[i - 1] >> (generatorPolynomialDegree - 1))
        {
            table[i] ^= m_generatorPolynomial;
            table[i] &= tableMask;
        }
    }
 
    m_rootTable = table;
    
    // construct polynomial table
    table = new uint32[++m_tableSize];
    table[0] = 0;
    for(uint32 i = 0; i < m_tableSize - 1; ++i)
        table[m_rootTable[i]] = i;
 
    m_polynomialTable = table;
}
 
void GF::deleteTable()
{
    if((m_polynomialTable != nullptr) && (m_rootTable != nullptr))
    {
        delete[] m_polynomialTable;
        delete[] m_rootTable;
        m_polynomialTable = nullptr;
        m_rootTable = nullptr;
    }
}
 
GF GF::operator+(const GF& rhs) const
{
    return GF(m_polynomial ^ rhs.m_polynomial);
}
 
GF GF::operator*(const GF& rhs) const
{
    if(this->m_polynomial == 0)
        return *this;
    if(rhs.m_polynomial == 0)
        return rhs;
 
    return GF(m_rootTable[(m_polynomialTable[m_polynomial] + m_polynomialTable[rhs.m_polynomial]) % (m_tableSize - 1)]);
}
 
GF GF::invert() const
{
    if(m_polynomial == 0)
        throw "Division by zero";
 
    return GF(m_rootTable[m_tableSize - 1 - m_polynomialTable[m_polynomial]]);
}
 
Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru