Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/91: Рейтинг темы: голосов - 91, средняя оценка - 4.77
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116

ГОСТ 3410 / Работа с длинными числами

01.10.2008, 12:20. Показов 18752. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал делать курсовик по реализации ЭЦП по ГОСТ 34.10 (и соответственно 34.11 и 28147 ). В качестве среды разработки выбрал C++ Builder.
Возник вопрос: Как работать с большими числами размером в 256,512,1024 бит? Они, ведь, ни в один тип данных не лезут (int только 32 бита). В контрольком примере дано число 5789604461865809771178549250434395392663 4992332820282019728792003956564821041.
P.S Чужая реализация 3410-01 Но, есть сильное подозрение а то, что препода "кинули" - подсунили ему в место ГОСТ 3410-2001, забугорский ECDSA.
Мой курсовик:
Недостатки:
1) Результат проверки не совпадает с генерированой подписью. Проблема в математике.
2) Нет создания хэша функции по ГОСТ 3411
3) Нет вычисленя параметров ЭК.
4) Длительное время работы (прога не зависла - она считает)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2008, 12:20
Ответы с готовыми решениями:

Работа с длинными числами
Не работает программа с длинными числами...подскажите как поправить (3ab-4c) / d^2 .model small .stack 100h .data a db 10 ...

Работа с длинными числами
Мне нужно прочитать из файла 22-х значные целые числа для количественного сравнения. int и long int не сохраняют полную длину числа. Какой...

Работа с длинными числами
Здравствуйте! На программировании в вузе дали индивидуальную задачу которая предусматривает работу с большими числами: 1 <= N...

75
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
01.10.2008, 13:23
есть арифметика длинных чисел, почитай С. Оклов "Программирование в алгоритмах"
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
06.10.2008, 18:11  [ТС]
А нельзя просто выделить память под переменную в 256 бит?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.10.2008, 18:14
ну так в один бит ты как цифру записать собрался? глянь типы данных, там по-любому есть тип, который в себя вместит число, просто с помощью арифметики длинных числе можно реализовать быстрые алгоритмы для работы с такими числами
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
20.10.2008, 10:30  [ТС]
Нашел материал по работе с длинными числами - Щербаков, Домашев Прикладная криптография. Но, к сожалению не могу заставить работать хотя бы первый алгоритм сложения - не выполняется перенос разряда. В чем проблема?
http://slil.ru/26253252 - все о госте
http://slil.ru/26253265 - не работающая прога
http://slil.ru/26253351 - Щербаков, Домашев Прикладная криптография
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.10.2008, 10:41
сложение длинных чисел
Code
1
2
3
4
5
6
7
8
9
10
11
12
void add(int a[N], int b[N], int c[N]){
  memset(c, 0, sizeof(int)*N);
  int i = 0;
  for(i = N - 1; i >= 0; i--){
    if(t.quot){
      c[i]++;
      if(i < ctrl) ctrl = i;
    }
    t = div((c[i] + a[i] + b[i]),10);
    c[i] = t.rem;
  }
}
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
20.10.2008, 19:32  [ТС]
Объясните этот код:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1_math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
#define LoDigit(T) ((int)(T))
#define HiDigit(T) ((int)((T)>>m))
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void Assign (int A[], const int B[], int n);// A:=B
 
void AssignDigit( int A[],  int x, int n );// A:=число x
 
void Zero (int A[], int n);// A=0
 
int IsZero (int A[], int n);// равно ли A=0?
 
int Add (int C[], const int A[], const B[], int n)// сложение длинных чисел длиной n цифр
{
__int64 T; число длиною равной сумме длины числа A и числа B
int d=0;// перенос разряда
int i;
char m=32; //почему char 
 
for (i=0; i<=n; i++)
        {
        T=(__int64)A[i]+B[i]+d;//(__int64) - что значит
        C[i]=LoDigit (T);// младшие разряды числа T - как работает?
        d=HiDigit(T);// старшие разряды числа T - как работает?
        }
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i]);
return d;
};
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
int a[]={2,2,9}, b[]={1,2,9,1},c[]={1,2,2,3};
Add(c,a,b,3);// вызов
 
}
//---------------------------------------------------------------------------
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.10.2008, 20:21
(__int64) - это приведение типа, LoDigit(T) - возвращает младшие 4 байта
HiDigit(T) - старшие 4 байта, чар используется для того, чтобы был один байт...
ну а вообще - алгоритм прост... иммитация сложения столбцом... только человек эффективнее использует элементы массива, в отличии от моего алгоритма... да и по-хорошему, ты бы мог и потрассировать алгоритм, тогда будет видно, что там и зачем делается
1
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
20.10.2008, 20:35  [ТС]
1) Спасибо
2) Как работает #define HiDigit(T) ((int)((T)>>m))? Сам понял, что число T помещается в поток, а ((int)((T)>>m)) что делает? За счет, чего помещается в старшие 4 байта.
3) Почему при сложении int a[]={2,2,9} и b[]={1,2,9} получается С[i]={3,4,18} т.е нет переноса.
4) Трассировку хорошо бы сделать, но не ясно как. В меню Run можно выполнить только команду Run, а по шагам нельзя.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.10.2008, 21:31
>> - это в данном случае сдвиг на 32 бита
ну так при выводе будет 1843... а переполнение - это когда число больше байта будет по идее...
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
20.10.2008, 22:34  [ТС]
Unit1_math.cpp
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1_math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
#define LoDigit(T) ((int)(T))
#define HiDigit(T) ((int)((T)>>m))
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void Assign (int A[], const int B[], int n);
 
void AssignDigit( int A[],  int x, int n );
 
void Zero (int A[], int n);
 
int IsZero (int A[], int n);
 
int Add (int C[], const int A[], const B[], int n)
{
__int64 T;
int d=0;
int i;
char m=32;
 
Form1->RichEdit1->Lines->Add(sizeof (T));
for (i=0; i<=n; i++)
        {
        T=(__int64)A[i]+B[i]+d;
        C[i]=LoDigit (T);
        d=HiDigit(T);
        Form1->RichEdit1->Lines->Add("i="+IntToStr(i)+" T="+IntToStr(T)+" C="+IntToStr(C[i])+" sizeof(C)="+IntToStr(sizeof(C[i]))+" d="+IntToStr(d)+ " sizeof(d)="+IntToStr(sizeof(HiDigit(T))));
        }
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
return d;
};
 
int Sub (int C[], const int A[], const B[], int n)
{
__int64 T;
int d=0;
int i;
char m=32;
 
Form1->RichEdit1->Lines->Add(sizeof (T));
for (i=0; i<=n; i++)
        {
        T=(__int64)A[i]-B[i]-d;
        C[i]=LoDigit (T);
        d=HiDigit(T);
        d=(0-d);
        Form1->RichEdit1->Lines->Add("i="+IntToStr(i)+" T="+IntToStr(T)+" C="+IntToStr(C[i])+" sizeof(C)="+IntToStr(sizeof(C[i]))+" d="+IntToStr(d)+ " sizeof(d)="+IntToStr(sizeof(HiDigit(T))));
        }
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
return d;
};
 
int Cmp (const int A[], const B[], int n)
{
int i;
char m=32;
 
for (i=n-1; (i>=n)&&(A[i]==B[i]); i--);
if (i<0) return 0;
if (A[i]>B[i]) return +1;
return -1;
};
 
void Mul (int C[], const int A[], const B[], int n)
{
int i,j;
int d;
__int64 T;
 
Zero(C,n);
 
for (i=0; i<=n; i++)
{
        d=0;
        for (j=0; j<n; j++)
        {
                T = (__int64)A[i]*B[j]+d;
                C[i+j]=LoDigit (T);
                d= HiDigit (T);
        }
        C[i+j]=d;
}
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
}
 
void ClearAllForm()
{
Form1->RichEdit1->Clear();
Form1->LabeledEdit1->Clear();
Form1->LabeledEdit2->Clear();
Form1->LabeledEdit3->Clear();
Form1->LabeledEdit4->Clear();
}
//------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,9}, b[]={1,2,9},c[]={1,2,2,3};
Form1->LabeledEdit4->Text=IntToStr(Add(c,a,b,2));
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,8}, b[]={1,2,9},c[]={1,2,2,3};
Form1->LabeledEdit4->Text=IntToStr(Sub(c,a,b,2));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,9}, b[]={1,2,9};
Form1->LabeledEdit4->Text=IntToStr(Cmp(a,b,2));
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Label1->Caption="Длина машинного слова m="+IntToStr(m)+" Количество цифр n=" + IntToStr(n);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int a[]={2,2,9}, b[]={1,2,9},c[]={1,2,3,4,5,6,7,8,9};
Mul (c,a,b,n);
}
//---------------------------------------------------------------------------
Unit1_math.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1_mathH
#define Unit1_mathH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TLabeledEdit *LabeledEdit1;
        TLabeledEdit *LabeledEdit2;
        TLabeledEdit *LabeledEdit3;
        TButton *Button1;
        TRichEdit *RichEdit1;
        TButton *Button2;
        TButton *Button3;
        TLabeledEdit *LabeledEdit4;
        TLabel *Label1;
        TButton *Button4;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
int Mas[]={1,2,3,4,5,6,7,8,9,};
int n=2;
char m=32;
 
void Assign (int A[], const int B[], int n);
 
void AssignDigit( int A[],  int x, int n );
 
void Zero (int A[], int n);
 
int IsZero (int A[], int n);
 
int Add (int C[], const int A[], const B[], int n);
 
int Sub (int C[], const int A[], const B[], int n);
 
int Cmp (const int A[], const B[], int n);
 
void Mul (int C[], const int A[], const B[], int n);
 
//---------------------------------------------------------------------------
#endif
Выдает ошибку:
[Linker Error] Unresolved external 'Zero(int *, int)' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\3410_ARIFMET IKA\UNIT1_MATH.OBJ
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.10.2008, 10:45
прототип Zero описан, даже есть вызов функции, ну а где же ее реализация-то?
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
21.10.2008, 12:41  [ТС]
Возникли еще вопросы. Как работают функции, ведь в них есть только передача параметров:
C++
1
2
3
4
void Assign (int A[], const int B[], int n); // A=B
void AssignDigit( int A[],  int x, int n );// A=x, x - число
void Zero (int A[], int n);// A=0, A -число длиною в n цифр
int IsZero (int A[], int n);//равно ли нулю?
Или это стандартные функции C++?

Добавлено через 3 минуты 7 секунд
Второй вопрос.
Unit1_math.h:
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
//---------------------------------------------------------------------------
 
#ifndef Unit1_mathH
#define Unit1_mathH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TLabeledEdit *LabeledEdit1;
        TLabeledEdit *LabeledEdit2;
        TLabeledEdit *LabeledEdit3;
        TButton *Button1;
        TRichEdit *RichEdit1;
        TButton *Button2;
        TButton *Button3;
        TLabeledEdit *LabeledEdit4;
        TLabel *Label1;
        TButton *Button4;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
int Mas[]={1,2,3,4,5,6,7,8,9,};
int n=2;
char m=32;
 
void Assign (int A[], const int B[], int n);
 
void AssignDigit( int A[],  int x, int n );
 
void Zero (int A[], int n);
 
int IsZero (int A[], int n);
 
int Add (int C[], const int A[], const B[], int n);
 
int Sub (int C[], const int A[], const B[], int n);
 
int Cmp (const int A[], const B[], int n);
 
void Mul (int C[], const int A[], const B[], int n);
 
//---------------------------------------------------------------------------
#endif[/CODE]
 
[CODE]//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1_math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
#define LoDigit(T) ((int)(T))
#define HiDigit(T) ((int)((T)>>m))
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void Assign (int A[], const int B[], int n);
 
void AssignDigit( int A[],  int x, int n );
 
void Zero (int A[], int n);
 
int IsZero (int A[], int n);
 
int Add (int C[], const int A[], const B[], int n)
{
__int64 T;
int d=0;
int i;
char m=32;
 
Form1->RichEdit1->Lines->Add(sizeof (T));
for (i=0; i<=n; i++)
        {
        T=(__int64)A[i]+B[i]+d;
        C[i]=LoDigit (T);
        d=HiDigit(T);
        Form1->RichEdit1->Lines->Add("i="+IntToStr(i)+" T="+IntToStr(T)+" C="+IntToStr(C[i])+" sizeof(C)="+IntToStr(sizeof(C[i]))+" d="+IntToStr(d)+ " sizeof(d)="+IntToStr(sizeof(HiDigit(T))));
        }
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
return d;
};
 
int Sub (int C[], const int A[], const B[], int n)
{
__int64 T;
int d=0;
int i;
char m=32;
 
Form1->RichEdit1->Lines->Add(sizeof (T));
for (i=0; i<=n; i++)
        {
        T=(__int64)A[i]-B[i]-d;
        C[i]=LoDigit (T);
        d=HiDigit(T);
        d=(0-d);
        Form1->RichEdit1->Lines->Add("i="+IntToStr(i)+" T="+IntToStr(T)+" C="+IntToStr(C[i])+" sizeof(C)="+IntToStr(sizeof(C[i]))+" d="+IntToStr(d)+ " sizeof(d)="+IntToStr(sizeof(HiDigit(T))));
        }
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
return d;
};
 
int Cmp (const int A[], const B[], int n)
{
int i;
char m=32;
 
for (i=n-1; (i>=n)&&(A[i]==B[i]); i--);
if (i<0) return 0;
if (A[i]>B[i]) return +1;
return -1;
};
 
void Mul (int C[], const int A[], const B[], int n)
{
int i,j;
int d;
__int64 T;
 
Zero(C,n);
 
for (i=0; i<=n; i++)
{
        d=0;
        for (j=0; j<n; j++)
        {
                T = (__int64)A[i]*B[j]+d;
                C[i+j]=LoDigit (T);
                d= HiDigit (T);
        }
        C[i+j]=d;
}
for (i=0; i<=n; i++) Form1->LabeledEdit1->Text=Form1->LabeledEdit1->Text+IntToStr(A[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit2->Text=Form1->LabeledEdit2->Text+IntToStr(B[i]);
for (i=0; i<=n; i++) Form1->LabeledEdit3->Text=Form1->LabeledEdit3->Text+IntToStr(C[i])+";";
}
 
void ClearAllForm()
{
Form1->RichEdit1->Clear();
Form1->LabeledEdit1->Clear();
Form1->LabeledEdit2->Clear();
Form1->LabeledEdit3->Clear();
Form1->LabeledEdit4->Clear();
}
//------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,9}, b[]={1,2,9},c[]={1,2,2,3};
Form1->LabeledEdit4->Text=IntToStr(Add(c,a,b,2));
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,8}, b[]={1,2,9},c[]={1,2,2,3};
Form1->LabeledEdit4->Text=IntToStr(Sub(c,a,b,2));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClearAllForm();
int a[]={2,2,9}, b[]={1,2,9};
Form1->LabeledEdit4->Text=IntToStr(Cmp(a,b,2));
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Label1->Caption="Длина машинного слова m="+IntToStr(m)+" Количество цифр n=" + IntToStr(n);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int a[]={2,2,9}, b[]={1,2,9},c[]={1,2,3,4,5,6,7,8,9};
Mul (c,a,b,n);
}
//---------------------------------------------------------------------------
Выдает ошибку: [Linker Error] Unresolved external 'Zero(int *, int)' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\BIN\3410_ARIFMET IKA\UNIT1_MATH.OBJ
Как понял, проблемы с областью видимости функции zero. Что надо исправить?
0
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
21.10.2008, 12:43
Я возможно не по теме, но все же. У меня аналогичный курсовик (Реализация ГОСТ 34.10-94).
Вопрос к IS, у тебя есть нормальный вариант этого ГОСТа? Просто все что я находил в интернете содержит ошибки, да и из текста становится понятно, что некоторые операции написаны неверно.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.10.2008, 12:57
*bkmz, вот бери его исходник и подгоняй под себя, а то на все готовенькое попасть - это же жутко скучно... а покой нам только снится

IS, где реализация функции zero? я что-то так и не нашел в твоем листинге...
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
21.10.2008, 12:59  [ТС]
*bkmz, Свой гост брал на http://protect.gost.ru/, но сейчас что-то глючит.
реализация описана http://slil.ru/26253351 - Щербаков, Домашев Прикладная криптография. Но, как видешь, пока не могу заставить работать арифметические операции. Может у тебя получится. Если заработает, то сообщи.
0
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
21.10.2008, 13:19
Цитата Сообщение от WooDooMan Посмотреть сообщение
*bkmz, вот бери его исходник и подгоняй под себя, а то на все готовенькое попасть - это же жутко скучно... а покой нам только снится
Возможно был неправильно вопрос мой понят, мне не нужны исходники, а нужен нормальный текст ГОСТа. Что касается исходников, то я пишу все сам.

Свой гост брал на http://protect.gost.ru/, но сейчас что-то глючит.
Не получилось щас найти там 34.10. Наверно глючит... Буду искать.

Но, как видешь, пока не могу заставить работать арифметические операции. Может у тебя получится. Если заработает, то сообщи.
Я к счастью лишен этой проблемы благодаря замечательному (IMHO) классу java.math.BigInteger
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.10.2008, 13:28
IS, блин, да что там непонятно, у тебя нет реализации функции зеро, просто ее прототип и вызов в теле программы... напиши реализацию этой функции и будет тебе счастье

*bkmz, просто тут слишком часто просят именно сырцы... вот и поэтому я так тебе ответил, ничего личного...
0
IS
13 / 13 / 2
Регистрация: 01.10.2008
Сообщений: 116
21.10.2008, 14:52  [ТС]
WooDooMan, Извиняюсь, просто не заметил, что появилась вторая страница и я решил, что сообщение не отправилось.
Теперь к делу. Действительно, нет реализации - у авторов эта функция так и приводится без реализации, не ясно за чем. Реализацию добавил.
C++
1
2
3
4
void Zero (int A[], int n)
{
for (int i=0; i<n; i++) A[i]=0;
};
С остальными разберусь.
Вопросы:
1) Что должен делать макрос #define MaxDigit ((int)(-1));?
2) Как определить количество элементов в массиве?
0
1 / 1 / 0
Регистрация: 21.10.2008
Сообщений: 25
21.10.2008, 15:08
WooDooMan, да ничего страшного, понимаю..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2008, 15:08
Помогаю со студенческими работами здесь

Работа с длинными числами (Delphi 7)
подскажите как написать программу в делфи 7 длинные числа(произведение)!плз!!

Функция с++ (работа с длинными числами - вывод результата в файл)
У меня есть проэкт с++ который использует динамическую библиотеку для работы с длинными числами. В проэкте я перегружаю операторы +,-,...

Действия с длинными числами
Ребята, нужна помощь. Информации нигде нет. Задача такова. Нужно провести арифметичексие действия с целыми числами не превышающие 30 цифр....

Сочетания с длинными числами
Нужно создать программу, которая вычисляла бы количество комбинаций для сочетания без повторения. По сути, сочетания C=n!/(m!(n-m)!)....

Операции с длинными числами
Друзья! Помогите пожалуйста. Мне надо составить программу, которая будет вычислять (сложить, вычитать, умножать) длинных чисел до 50 цифр. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru