Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-03-02

Re[5]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Hello Максим,

Wednesday, March 2, 2005, 7:58:38 PM, you wrote:

>> Штука в том, что mod "не расчитан" на тип extended - он же не
>> целочисленный. Тут даже говорить об остатке неверно чисто
>> математически. Но думаю, делу можно помочь, земенив деление сложением
>> и вычитанием. Рассмотрим такой алгоритм. Пусть есть делимое A и
>> делитель B. Возьмем число С, присвоим ему стартовое значение B и будем
>> увеличивать С на число B до тех пор, пока очередная порция С+B не
>> превзойдет А. Тогда А-С даст нужный остаток.

>> ..................
>> var
>> a,b,c :Extended;
>> begin
>> .......................
>> c := b;
>> while c+b <= a do
>> c := c + b;

>> ..............
>> Result := a - c; // "воображаемый" результат
>> end;

М> Большое спасибо за помощь, Вадим. У вас, да и у других, кто читал мои
М> письма наверное сложилось неверное
М> впечатление обо мне из-за небольшой моей неточности: я не собирался
М> применять функцию mod для нахождения остатка от деления нецелых чисел. Мне
М> необходимо оперировать с целыми аргументами, которые по длине
М> превышают все типы данных, и к extended они относятся лишь потому, что
М> входят в диапазон его допутимых значений, но они целые. Как я говорил
М> раньше, я проектирую криптосистему на основе RSA, а как известно,
М> криптостойкость RSA зависит от длины модуля и длины ключей, то есть
М> чем больше модуль, тем лучше будет криптосистема. И в дальнейшем, у меня
М> появится необходимиость оперировать с чилами, превышающими по длине
М> все типы данных в Паскале. Мне подсказали, что для этого необходимо
М> представлять эти числа в программе с помощью массивов. Не могли бы вы
М> подробнее рассказать об этом. Заранее спасибо.

Вопрос, который мне непонятен (сразу говорю, что в криптографии я -
баран): каким образом Вы храните эти самые "очень большие" числа,
если они не "вписываются" в имеющиеся типы? Или такие числа должны
получаться в результате операций над более "простыми" числами? Вопрос
отнюдь не риторический и вот почему: при использовании массивов само
число должно быть куда-то записано, чтобы разложить его на разряды и
значение каждого разряда записывается в i-ый элемент массива, если
только я правильно понимаю эту идею, а переменную мы для этого числа
опять-таки не можем - замекнутый. Хотя сама идея правильна.

Я же возвращаюсь к своему первому по этой теме письму - нельзя ли
хранить все эти числа в виде строк, например:
'13762890937893478956903896'
+
'6789478324798686'
Во-первых, это дает практически неограниченную "велечину" числа, а
во-вторых, к строкам можно применить алгоритм, описанный выше, немного
его доработав. Платой за это может быть лишь потери скорости
обработки.

Если Вам это не покажется бредом, могу привести полный алгоритм.
Пишите.

   Вадим Шешунов 2005-03-02 22:27:07 (#326076)

Re[4]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Здравствуйте, Вадим.

Вы писали 2 марта 2005 г., 18:52:16:

> Hello Максим,

> Monday, February 28, 2005, 7:52:36 PM, you wrote:

М>> Здравствуйте,
М>> Моя криптосистема основана на алгоритме RSA. Возникла острая
М>> необходимость в функции получения остатка от деления двух больших
М>> чисел типа extended длиной не менее 64 бит. Встроенный mod не помогает
М>> так как не расчитан на такой тип данных. Я пытался написать свою
М>> функцию следующим образом: делил одно число на другое (здесь все
М>> проходило гладко), затем с помощью функции trunc я брал целую часть
М>> частного и умножал ее на делитель, после чего я вычитал это выражение
М>> от делимого и получал остаток от деления. Все было хорошо пока
М>> делитель не стал превышать предел real-a, функция переставала
М>> работать. Моя криптосистема наполовину готова. Я реализовал генератор
М>> случайных чисел, генератор ключей с помощью расширенного алгоритма
М>> Евклида. Осталось сделать генератор простых чисел (алгоритм у меня
М>> есть) и непосредственно функцию RSA, но все стало из-за остатка от
М>> деления. Остальные детали программы к алгоритму шифрования отношения
М>> не имеют, я думаю с ними будет проще. Помогите пожалуйста.

> Штука в том, что mod "не расчитан" на тип extended - он же не
> целочисленный. Тут даже говорить об остатке неверно чисто
> математически. Но думаю, делу можно помочь, земенив деление сложением
> и вычитанием. Рассмотрим такой алгоритм. Пусть есть делимое A и
> делитель B. Возьмем число С, присвоим ему стартовое значение B и будем
> увеличивать С на число B до тех пор, пока очередная порция С+B не
> превзойдет А. Тогда А-С даст нужный остаток.

> ..................
> var
> a,b,c :Extended;
> begin
> .......................
> c := b;
> while c+b <= a do
> c := c + b;

> ..............
> Result := a - c; // "воображаемый" результат
> end;

Большое спасибо за помощь, Вадим. У вас, да и у других, кто читал мои
письма наверное сложилось неверное
впечатление обо мне из-за небольшой моей неточности: я не собирался
применять функцию mod для нахождения остатка от деления нецелых чисел. Мне
необходимо оперировать с целыми аргументами, которые по длине
превышают все типы данных, и к extended они относятся лишь потому, что
входят в диапазон его допутимых значений, но они целые. Как я говорил
раньше, я проектирую криптосистему на основе RSA, а как известно,
криптостойкость RSA зависит от длины модуля и длины ключей, то есть
чем больше модуль, тем лучше будет криптосистема. И в дальнейшем, у меня
появится необходимиость оперировать с чилами, превышающими по длине
все типы данных в Паскале. Мне подсказали, что для этого необходимо
представлять эти числа в программе с помощью массивов. Не могли бы вы
подробнее рассказать об этом. Заранее спасибо.

   Максим 2005-03-02 21:25:18 (#326045)

Re: Проблемы с BDE для DBF

Здравствуйте!
Могу выслать BDE-error.pdf
Может поможет.
С уважением Валерий

Номер выпуска : 4095
Возраст листа : 528 (дней)
Количество подписчиков : 527
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/326043
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-02 21:24:55 (#326043)

Re[2]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Здравствуйте,
ОГРОМНОЕ спасибо за советы. У меня просьба к Samurai: если не трудно
вышлите мне пожалуйста исходники с функциями для работы с большими
числами (для "длинной арифметики"), особенно trunc и mod. Буду очень
признателен. Мой адрес:labingr***@h*****.ru. Расскажите пожалуста
подробнее о представлении чисел массивами. Заранее очень благодарен.
Спасибо за советы Andrey Yakushev. Я прекрасно знаю, что остаток от
деления не вычисляется для чисел с плавающей точкой, впрочем, я и не
собирался этого делать. Если вам известна схема RSA, то вполне ясно,
что встроенные mod или div не решат проблемы.

   Максим 2005-03-02 21:24:37 (#326042)

Re[4]: Есть такая WSH

Здравствуйте, gena.

Вы писали 2 марта 2005 г., 1:40:44:

>> //Код
>> On Error Resume Next
>> strComputer = "Anton"
>> strProcsToKill = "1cv7s.exe"
>> Set wbemObjectSet = _
>> GetObject("winmgmts://" &
>> strComputer)'.InstancesOf("Win32_Process")
>> For Each Proc In wbemObjectSet.ExecQuery("SELECT * FROM Win32_Process WHERE
gu> Name
>> = '1cv7s.exe'")
>> WScript.Echo Proc.ProcessID & ": " & Proc.Name
>> Proc.ExternalEvent("МояПроцедура()")
>> Next
>>
>> //Ошибка, если заремить первую строчку ... "Объект не поддерживает данное
свойство
>> или метод ..."
>>

gu> Чтобы найти в чем ошибка, разбей операторы по одному строку. Тогда проще
узнать
gu> какой объект и какое свойство или метод не поддерживает. а ты впихал Set
wbemObjectSet
gu> = _

Proc.ExternalEvent("МояПроцедура()") а именно на ".ExternalEvent("МояПроцедура()")"
Пробовал также через ".Eval()" и ".EvalExp()" - болт ...

То есть умом я понимаю что только получил доступ к процессу
"Win32_Process", но скажем так я "не заполз" в него.

Скажем так если работать с OLE скрипт выглядит где то так:
Set v = CreateObject("V77s.Application")
start = v.Initialize (v.RMTrade,"/D\\ForWork\Base_v7_files\ /NПавел /P","NO_SPLASH_SHOW")
Result = v.EvalExpr("МояГлобальнаяПроцедура()")
Или
BoolResult = v.ExecuteBatch("ПроцедураРегл1();ПроцедураРегл2()")

>> GetObject("winmgmts://" &
>> strComputer)'.InstancesOf("Win32_Process").
gu> И почему ты в GetObject передаешь "winmgmts://" &
gu> strComputer, а не 1С77.Application?
Потому что я не знаю, запущен ли 1С на компе или нет ...

Смысл задачи состоит в чем пройтись по РС домена, дать по рукам юзерам
не закрывшим 1С ... Задача решена в большей части средствами самой 1С,
но есть желание лучше изучить WSH и по этому пытаюсь решить эту
проблему таким способом.
gu> Про NCron ничего не знаю :(
nnCron - планировщик под винду, со своим внутренним языком
программирования, в нем есть возможность записать макрос, как в Ёхеле
только под Вынь :), синтаксис похож на VBS :)

   Антон Горячун 2005-03-02 21:24:02 (#326040)

Re[7]: OpenGL - разгон

Glad to greet, Eugene!

You seem to have written (Sunday, February 27, 2005):

EtM> Ещё один вопрос:
EtM> При вращении фигур - свет вращается вмести с ними - как это исправить?

Ты задал позицию источника света в самом начале, а потом меняешь
матрицу трансформации, которая применяется в том числе и к источнику,
как к материальной точке. Выход - вызывать glLight* перед самым
выводом, когда все трансформации уже заданы (т.е. после
glScale/glRotate/glTranslate).
Вообще, если собираешься работать с графикой и после курсовика,
советую полазать по opengl.org и developers.nvidia.com - кладезь
знаний.


В принципе Дельфа под рукой есть, но нет ни Jedi-порта и ещё вроде
чего-то не хватает. Тем не менее, вот что бросилось в глаза:

1. В TF_Game.Timer2Timer(Sender: TObject) есть вот такая вещь:
..
glClear(GL_DEPTH_BUFFER_BIT xor GL_COLOR_BUFFER_BIT);
..

Тут явно OR, а не XOR.

2. Не используй glBegin(GL_POLYGON), разбей вручную.

3. Оставь только первый glBegin(GL_QUADS) - не надо повторять для
каждого нового quad-а.

4. Не надо в каждом листе повторять:

glShadeModel(GL_FLAT);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

Сделай это лишь при инициализации.

5. Попробуй вынести quadObj:=gluNewQuadric, за пределы
glNewList(Zero2D,GL_COMPILE), а то есть подозрения...

6. Попробуй убрать glEnable(GL_POLYGON_SMOOTH)


Alles Gute!

...In Code We Trust...

   2005-03-02 20:22:58 (#326006)

Re[2]: OpenGL - разгон

Glad to greet, Шматко!

You seem to have written (Monday, February 28, 2005):

ШАА> падение более, чем в 10 раз?
ШАА> 3DMark05 на 8-и пакетных очередях мне показывал 4,3 fps, а на 32768-и
ШАА> пакетных - 56,7 fps. Это в 1024х768. Catalist 4.7 или 4.8, точно не помню.

Ну, это давно известно, и во многом связано с архитектурой винды, то
есть расплата за абстракцию от железа (там бесконечные простои при
синхронизации GPU/CPU, буферизации данных драйвера, перекачке
динамических данных по AGP).
Вообще производители железа постоянно твердят о том, что надо
выравнивать данные и посылать за раз как можно больше, приводя почти
экспоненциальные зависимости производительности от размера пакета.
Только вот народ читать не любит, всё бы что-нибудь закодить ;) .

Alles Gute!

...In Code We Trust...

   2005-03-02 20:22:37 (#326005)

Re[3]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Hello Максим,

Monday, February 28, 2005, 7:52:36 PM, you wrote:

М> Здравствуйте,
М> Моя криптосистема основана на алгоритме RSA. Возникла острая
М> необходимость в функции получения остатка от деления двух больших
М> чисел типа extended длиной не менее 64 бит. Встроенный mod не помогает
М> так как не расчитан на такой тип данных. Я пытался написать свою
М> функцию следующим образом: делил одно число на другое (здесь все
М> проходило гладко), затем с помощью функции trunc я брал целую часть
М> частного и умножал ее на делитель, после чего я вычитал это выражение
М> от делимого и получал остаток от деления. Все было хорошо пока
М> делитель не стал превышать предел real-a, функция переставала
М> работать. Моя криптосистема наполовину готова. Я реализовал генератор
М> случайных чисел, генератор ключей с помощью расширенного алгоритма
М> Евклида. Осталось сделать генератор простых чисел (алгоритм у меня
М> есть) и непосредственно функцию RSA, но все стало из-за остатка от
М> деления. Остальные детали программы к алгоритму шифрования отношения
М> не имеют, я думаю с ними будет проще. Помогите пожалуйста.

Штука в том, что mod "не расчитан" на тип extended - он же не
целочисленный. Тут даже говорить об остатке неверно чисто
математически. Но думаю, делу можно помочь, земенив деление сложением
и вычитанием. Рассмотрим такой алгоритм. Пусть есть делимое A и
делитель B. Возьмем число С, присвоим ему стартовое значение B и будем
увеличивать С на число B до тех пор, пока очередная порция С+B не
превзойдет А. Тогда А-С даст нужный остаток.

..................
var
a,b,c :Extended;
begin
.......................
c := b;
while c+b <= a do
c := c + b;

..............
Result := a - c; // "воображаемый" результат
end;

   Вадим Шешунов 2005-03-02 19:06:13 (#325939)

Re: Обработка нажатия нескольких клавиш...

Хаю ду ю ду Grishka?

Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
тоже что-нибудь напечатаю:

G> Собственно все уже и сказано.. :)
G> Просто нужно реализовать игру, на двоих... И нужно обрабатывать нажатия 2-х
G> клавиш одновременно...

Да хоть десяти - если железо позволит

var
Form1: TForm1;
keys: array[0..255] of Boolean;

implementation

{$R *.DFM}

procedure TForm1.ProcessKeys;
begin
with Panel1 do
begin
if keys[VK_UP] or keys[Ord('W')] or keys[ord('w')] then Top := Top
- 1;
if keys[VK_DOWN] or keys[Ord('S')] or keys[ord('s')] then Top := Top
+ 1;
if keys[VK_LEFT] or keys[Ord('A')] or keys[ord('a')] then Left := Left
- 1;
if keys[VK_RIGHT] or keys[Ord('D')] or keys[ord('d')] then Left := Left
+ 1;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProcessKeys;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
keys[Key] := True;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
keys[Key] := False;
end;

PS: Вместо Timer ес-сно лучше OnIdle или Thread юзать

   2005-03-02 17:08:45 (#325829)

Проблемы с BDE для DBF

Такая ситуация.
Есть таблица 'Proto.dbf'. Доступ к ней реализован через TTable.
Время от времени при запуске программы 'Proto.dbf'
чистится оператором 'DELETE FROM ... WHERE'.
Если перед выполнением оператора не закрыть TTable, то
даже если не удалено ни одной записи, при вызове
TTable.Refresh программа разваливается с
тысячами Access Violation.
Эффект возник при переходе с Paradox на Dbf.
Версия BDE 5.01.

Всвязи с этим два вопроса:
1. это глюк или где-то в документации открытым текстом сказано,
что BDE не может обеспечить безопасный доступ к
таблице одновременно из TTable и TQuery
2. распространяет ли Borland отладочную информацию для BDE,
как это делает MS для своих продуктов, например

Номер выпуска : 4088
Возраст листа : 528 (дней)
Количество подписчиков : 527
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/325795
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-02 17:01:43 (#325795)

Re[3]: Есть такая WSH

> Пробую так не работает ...
>
> //Код
> On Error Resume Next
> strComputer = "Anton"
> strProcsToKill = "1cv7s.exe"
> Set wbemObjectSet = _
> GetObject("winmgmts://" & strComputer)'.InstancesOf("Win32_Process")
> For Each Proc In wbemObjectSet.ExecQuery("SELECT * FROM Win32_Process WHERE
Name
> = '1cv7s.exe'")
> WScript.Echo Proc.ProcessID & ": " & Proc.Name
> Proc.ExternalEvent("МояПроцедура()")
> Next
>
> //Ошибка, если заремить первую строчку ... "Объект не поддерживает данное свойство
> или метод ..."
>

Чтобы найти в чем ошибка, разбей операторы по одному строку. Тогда проще узнать
какой объект и какое свойство или метод не поддерживает. а ты впихал Set wbemObjectSet
= _
> GetObject("winmgmts://" & strComputer)'.InstancesOf("Win32_Process").
И почему ты в GetObject передаешь "winmgmts://" & strComputer, а не 1С77.Application?
Про NCron ничего не знаю :(

Номер выпуска : 4087
Возраст листа : 528 (дней)
Количество подписчиков : 527
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/325513
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-02 08:58:14 (#325513)

Re: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

ВрЕМеЧк0 д0бРеНьк0е, Максим.

Вы писали 27 февраля 2005 г., 17:01:34:

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

год - два назад в универе решали задачи по "длинной арифметике" -
выполнение простейших операций (+,-,*,>,<), в т.ч. нахождение целой
части и остатка от деления. Если надо могу послать, исходники...
числа представляются массивом.

например, считает: 30!=265252859812191058636308480000000 может
кто-нить проверит правильно или нет.

   2005-03-02 00:53:27 (#325376)

Re[2]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Здравствуйте,
Моя криптосистема основана на алгоритме RSA. Возникла острая
необходимость в функции получения остатка от деления двух больших
чисел типа extended длиной не менее 64 бит. Встроенный mod не помогает
так как не расчитан на такой тип данных. Я пытался написать свою
функцию следующим образом: делил одно число на другое (здесь все
проходило гладко), затем с помощью функции trunc я брал целую часть
частного и умножал ее на делитель, после чего я вычитал это выражение
от делимого и получал остаток от деления. Все было хорошо пока
делитель не стал превышать предел real-a, функция переставала
работать. Моя криптосистема наполовину готова. Я реализовал генератор
случайных чисел, генератор ключей с помощью расширенного алгоритма
Евклида. Осталось сделать генератор простых чисел (алгоритм у меня
есть) и непосредственно функцию RSA, но все стало из-за остатка от
деления. Остальные детали программы к алгоритму шифрования отношения
не имеют, я думаю с ними будет проще. Помогите пожалуйста.

   Максим 2005-03-02 00:53:18 (#325375)

Re[2]: Есть такая WSH

Здравствуйте, gena.

Вы писали 25 февраля 2005 г., 2:15:16:

gu> На вскидку сказать не берусь, но может быть сначала для этого нужно получить
gu> объект активного приложения 1С, это должно делаться при
gu> помощи метода GetObject("V77.Application").
Есть такая функция :).

Пробую так не работает ...

//Код
On Error Resume Next
strComputer = "Anton"
strProcsToKill = "1cv7s.exe"
Set wbemObjectSet = _
GetObject("winmgmts://" & strComputer)'.InstancesOf("Win32_Process")
For Each Proc In wbemObjectSet.ExecQuery("SELECT * FROM Win32_Process WHERE Name
= '1cv7s.exe'")
WScript.Echo Proc.ProcessID & ": " & Proc.Name
Proc.ExternalEvent("МояПроцедура()")
Next

//Ошибка, если заремить первую строчку ... "Объект не поддерживает данное свойство
или метод ..."

Не работает ... Умом понимаю, что делаю не правильно ... А сказать не
могу :(((

Посоветовали поставить NCron, сказали в нем есть крутая фича именно
для этого дела.

   Антон Горячун 2005-03-02 00:53:05 (#325374)
  • 1
  • 2