ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

02.01.2010, 15:36
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
Сообщение от .Life
привет, кто знаком с алгоритмом шифровки Эль-Гамаля, заинтересовал вопрос у каждого символа должен быть свой код?
Нет, не обязательно. Вполне возможна такая схема:
строка(любые символы) -> массив байт -> число -> шифрование
число - это число большой размерности, больше чем int, long, etc. Для работы с такими числами нужно использовать специальные классы для работы с большими числами. Например, в java это будет выглядеть так:
Код:
String source = "Hello world!";
BigInteger message = new BigInteger(message.getBytes());
BigInteger в свою очередь умеет умножать, складывать, брать обратное по модулю, возводить в степень. В этом классе реализованы специальные алгоритмы для работы с большими числами. Если мы говорим о с++, то тогда нужно подключать дополнительные библиотеки, например ntl http://www.shoup.net/ntl/
Помни, что шифртекст больше исходного сообщения и при дешифровании нужно это учитывать.
|
|
|

02.01.2010, 19:14
|
|
Iron Man#2
Регистрация: 08.07.2009
Сообщений: 2,084
Провел на форуме: 3896191
Репутация:
2562
|
|
Задача, помогите пожалуйста:
Код:
В результате выполненных измерений, получен ряд значений из 8 элементов (n=8). Считается, что результат измерения – случайная величина (СВ) `X`, распределенная по нормальному закону. А именно, СВ группируется в окрестности некоторого наивероятнейшего значения и зависит от многих факторов, причем каждый из них мало влияет на СВ, по сравнению с суммой всех остальных.
Каждый результат измерения обозначается - `xi`, где i - номер измерения (элемента) в ряду измерений.
Пусть задан ряд: x1 = 30, x2 = 20, x3 = 40, x4 = 35, x5 = 45, x6 = 25, x7 = 50, x8 = 30.
Для практики представляет интерес не отдельное значение СВ, а некоторый диапазон, в который попадают ее значения (измерения).
Наивероятнейшее значение СВ, вычисляется как среднее арифметическое полученных значений измерений (элементов) и называется математическим ожиданием СВ.
Для нашего ряда получим:
М(Х) = (30+20+40+35+45+25+50+30)/2 =34,375
Обычно рассчитывают вероятность попадания СВ в диапазон М(Х) ±d, где d – некоторая, заданная граница величин значений измерений.
То есть определяют, какой процент значений измерений попадет в диапазон, ±d относительно среднего значения.
Пусть в нашем примере значение границы расчетного диапазона ±d = 7. следовательно необходимо определить вероятность попадания СВ в диапазон 34,375 ± 7.
Для этого сначала нужно определить рассеяние СВ, то есть степень ее распределения относительно среднего значения. Для нормального закона распределения рассеяние СВ характеризует среднее квадратическое отклонение (СКО). Оно обозначается σ и рассчитывается по формуле:
σх = sqrt [ (30-34,375)^2 + (20-34,375)^2 + (40-34,375)^2 + (35-34,375)^2 + (45-34,375)^2 + (25-34,375)^2 + (50-34,375)^2 + (30-34,375)^2 ]
Для нашего примера:
= 9,499
Вычислив значение СКО, пересчитаем границу расчетного диапазона в σх по формуле: а = d ׃ σх получим а = 7 / 9,499 =0,737
Для нормального закона распределения выполняется следующее равенство:
P(|X| < a) = Ф(а).
где: Х – случайная величина;
а – граница диапазона в СКО;
P(|X| < a) – вероятность того, что значение СВ `Х` не выйдет за границы `а`;
Ф(а) – функция Лапласа, дающая значения вероятности. Задается таблицей №1.
По значению а=0,737 из прилагаемой таблицы находим Р= 0,539. Значение Р получаем аппроксимацией табличных значений:
0,73 = 0,535;
0,74 = 0,541.
Нормальный закон распределения [значения функции 2Ф(а)]
тут таблица
дано -
СВ: 95 97 99 94 85 80 83 96 84
Граница расчетного диапазона: 9
вот что написал
Код:
#include <iostream.h>
#include <math.h>
int main()
{
// Vvod slychaynih velichin
double a[9];
cout<<"Vvedite znacheniya slychanynoy velichiny"<<endl;
for (int i=0; i<9; i++)
cin>>a[i];
cout<<"Znacheniya slychanynoy velichiny =>"<<endl;
for ( i=0; i<9; i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
// Srednee arifmeticheskoe
double S;
S=(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8])/9 ;
cout<<"Srednee arifmeticheskoe - "<<S<<endl<<endl;
// Veroyatnost popadaniya
cout<<"Veroyatnost popadaniya Slychayniy velichiny v diapazon - "<<S<<"+-9"<<endl<<endl;
// Srednee kvadraticheskoe otklonenie
double K;
K=sqrt( ( pow((a[0]-S),2)+pow((a[1]-S),2)+pow((a[2]-S),2)+pow((a[3]-S),2)+pow((a[4]-S),2)+pow((a[5]-S),2)+pow((a[6]-S),2)+pow((a[7]-S),2)+pow((a[8]-S),2) ) /9);
cout<<"Srednee kvadraticheskoe otklonenie - "<<K<<endl<<endl;
// Granica raschetnogo diapazona
double A;
A=9/K;
cout<<"Granica raschetnogo diapazona - "<<A<<endl;
// Function Laplasa
double P;
return 0;
}
проблема, как видно, в последнем действии.
как быть с функцией Лапласа, если ее значения находятся в таблице?
википедия на функцию лапласа выдает какие-то стремные дифференциалы :<<<<
|
|
|

02.01.2010, 20:28
|
|
Новичок
Регистрация: 05.07.2009
Сообщений: 1
Провел на форуме: 3263
Репутация:
1
|
|
как быть с функцией Лапласа, если ее значения находятся в таблице?
<
Наверное, хотел написать не находятся? Если аргумент функии Лапласа не из таблицы, тогда значение берут 0.5 
|
|
|

03.01.2010, 00:47
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Сообщение от Keltos
википедия на функцию лапласа выдает какие-то стремные дифференциалы :<<<
Ппц куда катится образование.....
http://www.webmath.ru/poleznoe/table_laplasa.php
|
|
|

03.01.2010, 16:50
|
|
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме: 35427
Репутация:
3
|
|
Ребята не могли бы вы помочь с прогой, вся прога написана, всё сделано правильно, работает, но заминка в том, что уравнение для расчёта неправильное !
Код:
program xyz;
uses
SysUtils,
Windows;
label
EnterN;
var
N, i, z : Integer;
ans : Char;
//------------------------------------------------------------------------------
function Ru(str: String): String; // Функция перевода получаемой строки из ANSI-кодировки в OEM-кодировку DOS.
begin // Начало функции.
Result := ''; // Обнуляем результат.
if Length(str) > 0 then // Если получена непустая строка, то
begin // выполняем код:
SetLength(Result, Length(str)); // Устанавливаем размер для строки результата.
CharToOem(PChar(str), PChar(Result)); // Конвертируем строку в OEM-формат (модуль 'Windows.pas').
end; // Результирующая строка уже в новой кодировке.
end; // Конец функции.
//------------------------------------------------------------------------------
begin
WriteLn(Ru('Программа для вычисления факториала нечётных чисел:')); // Вывод информации на экран о назначении программы.
WriteLn('');
WriteLn(' N!!! = 1 x 3 x 5 ... x N ');
WriteLn('');
WriteLn(Ru('Выполнил ...')); // Вывод информации на экран об авторе программы.
WriteLn('');
Writeln('...');
EnterN: // Возврат в это место при ошибке или при повторном вводе данных.
WriteLn(''); // ...
Write(Ru('Введите нечётное число N, где N > 1 : ')); // ...
ReadLn(N); // Ввод числа Х.
if (N <= 1) or (N mod 2=0) then // Если Х меньше или равен 1, то
begin // выполнить код:
WriteLn(Ru('Произошла ошибка при вводе, попробуйте ещё раз.')); // - вывести сообщение об ошибке;
GoTo EnterN; // - вернуться к началу;
end; // ...
WriteLn(''); // ...
z := 1; // Обнуляем переменную результата.
for i := 1 to N do z := z*(i*2-1); // Увеличиваем переменную результата N раз.
WriteLn(Ru('Полученный результат: '+IntToStr(z))); // Отправить Х на обработку в функцию 'Formula()' и вывести результат.
WriteLn(''); // ...
Write(Ru('Вы хотите продолжить работу с программой? (Y/N) : ')); // Предложить продолжить работу с программой.
ReadLn(ans); // Получить согласие.
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo EnterN; // Если согласие получено - возврат к началу.
end.
Когда запускаешь прогу, просит ввести N, если вводим 5, то получаем такой факториал 1х3х5х7х9, а нужно чтобы 5 была последней цифрой в этом подсчёте, то есть 1х3х5.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
|
|
|

03.01.2010, 18:47
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от DJeFRY_RASH
Ребята не могли бы вы помочь с прогой, вся прога написана, всё сделано правильно, работает, но заминка в том, что уравнение для расчёта неправильное !
Код:
program xyz;
uses
SysUtils,
Windows;
label
EnterN;
var
N, i, z : Integer;
ans : Char;
//------------------------------------------------------------------------------
function Ru(str: String): String; // Функция перевода получаемой строки из ANSI-кодировки в OEM-кодировку DOS.
begin // Начало функции.
Result := ''; // Обнуляем результат.
if Length(str) > 0 then // Если получена непустая строка, то
begin // выполняем код:
SetLength(Result, Length(str)); // Устанавливаем размер для строки результата.
CharToOem(PChar(str), PChar(Result)); // Конвертируем строку в OEM-формат (модуль 'Windows.pas').
end; // Результирующая строка уже в новой кодировке.
end; // Конец функции.
//------------------------------------------------------------------------------
begin
WriteLn(Ru('Программа для вычисления факториала нечётных чисел:')); // Вывод информации на экран о назначении программы.
WriteLn('');
WriteLn(' N!!! = 1 x 3 x 5 ... x N ');
WriteLn('');
WriteLn(Ru('Выполнил ...')); // Вывод информации на экран об авторе программы.
WriteLn('');
Writeln('...');
EnterN: // Возврат в это место при ошибке или при повторном вводе данных.
WriteLn(''); // ...
Write(Ru('Введите нечётное число N, где N > 1 : ')); // ...
ReadLn(N); // Ввод числа Х.
if (N <= 1) or (N mod 2=0) then // Если Х меньше или равен 1, то
begin // выполнить код:
WriteLn(Ru('Произошла ошибка при вводе, попробуйте ещё раз.')); // - вывести сообщение об ошибке;
GoTo EnterN; // - вернуться к началу;
end; // ...
WriteLn(''); // ...
z := 1; // Обнуляем переменную результата.
for i := 1 to N do z := z*(i*2-1); // Увеличиваем переменную результата N раз.
WriteLn(Ru('Полученный результат: '+IntToStr(z))); // Отправить Х на обработку в функцию 'Formula()' и вывести результат.
WriteLn(''); // ...
Write(Ru('Вы хотите продолжить работу с программой? (Y/N) : ')); // Предложить продолжить работу с программой.
ReadLn(ans); // Получить согласие.
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo EnterN; // Если согласие получено - возврат к началу.
end.
Когда запускаешь прогу, просит ввести N, если вводим 5, то получаем такой факториал 1х3х5х7х9, а нужно чтобы 5 была последней цифрой в этом подсчёте, то есть 1х3х5.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
в цикле организуй проверку до вычисления факториала.
те
for i := 1 to N do
begin
if i mod 2 <> 0 then
z := z*i;
end;
ну и формулу чуть подредактировал. а то я не уловил зачем было i*2-1
вот в приципе и всё.
|
|
|

03.01.2010, 18:42
|
|
Новичок
Регистрация: 28.12.2009
Сообщений: 7
Провел на форуме: 119162
Репутация:
0
|
|
Перед циклом
Код:
for i := 1 to N do z := z*(i*2-1);
вставь строку этим ты поставиш количество итераций цикла равным количеству непарных чисел до заданного числа N. Код не проверял но должно работать. 
|
|
|

03.01.2010, 19:22
|
|
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме: 35427
Репутация:
3
|
|
Ребята
респект, спасибо большое, помогли !
|
|
|

03.01.2010, 20:34
|
|
Новичок
Регистрация: 12.12.2009
Сообщений: 10
Провел на форуме: 14658
Репутация:
0
|
|
Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
|
|
|

03.01.2010, 21:57
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от STIFFmaster
Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
не хочу всю программу расписывать...
просто проверяешь соседние элементы в строке если
a[i,j] > a[i,j+1] then
begin
x:=a[i,j+1];
a[i,j+1]:=a[i,j];
a[i,j]:=x;
end;
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|