HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 02.01.2010, 15:36
Forcer
Постоянный
Регистрация: 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/
Помни, что шифртекст больше исходного сообщения и при дешифровании нужно это учитывать.
 
Ответить с цитированием

  #2  
Старый 02.01.2010, 19:14
Keltos
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;

}
проблема, как видно, в последнем действии.
как быть с функцией Лапласа, если ее значения находятся в таблице?
википедия на функцию лапласа выдает какие-то стремные дифференциалы :<<<<
 
Ответить с цитированием

  #3  
Старый 02.01.2010, 20:28
Sar@
Новичок
Регистрация: 05.07.2009
Сообщений: 1
Провел на форуме:
3263

Репутация: 1
По умолчанию

Цитата:
как быть с функцией Лапласа, если ее значения находятся в таблице?
<
Наверное, хотел написать не находятся? Если аргумент функии Лапласа не из таблицы, тогда значение берут 0.5
 
Ответить с цитированием

  #4  
Старый 03.01.2010, 00:47
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от Keltos  
википедия на функцию лапласа выдает какие-то стремные дифференциалы :<<<
Ппц куда катится образование.....
http://www.webmath.ru/poleznoe/table_laplasa.php
 
Ответить с цитированием

  #5  
Старый 03.01.2010, 16:50
DJeFRY_RASH
Новичок
Регистрация: 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.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
 
Ответить с цитированием

  #6  
Старый 03.01.2010, 18:47
n1ghtstalker
Познающий
Регистрация: 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
вот в приципе и всё.
 
Ответить с цитированием

  #7  
Старый 03.01.2010, 18:42
lokli
Новичок
Регистрация: 28.12.2009
Сообщений: 7
Провел на форуме:
119162

Репутация: 0
По умолчанию

Перед циклом
Код:
for i := 1 to N do z := z*(i*2-1);
вставь строку
Код:
N:=((N div 2)+1);
этим ты поставиш количество итераций цикла равным количеству непарных чисел до заданного числа N. Код не проверял но должно работать.
 
Ответить с цитированием

  #8  
Старый 03.01.2010, 19:22
DJeFRY_RASH
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме:
35427

Репутация: 3
По умолчанию

Ребята
респект, спасибо большое, помогли !
 
Ответить с цитированием

  #9  
Старый 03.01.2010, 20:34
STIFFmaster
Новичок
Регистрация: 12.12.2009
Сообщений: 10
Провел на форуме:
14658

Репутация: 0
По умолчанию

Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
 
Ответить с цитированием

  #10  
Старый 03.01.2010, 21:57
n1ghtstalker
Познающий
Регистрация: 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;
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости. Обсуждения. 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.