Майзаков Максим Александрович Разработка модулей автоматической генерации заданий с решениями по теме «Дискретное логарифмирование» диплом

Вид материалаДиплом

Содержание


Приложение 2. Документация для программиста.
Метод Полига-Хеллмана.
Подобный материал:
1   ...   4   5   6   7   8   9   10   11   12

Приложение 2. Документация для программиста.




Общая информация относительно всех модулей.

Таблица простых чисел и соответствующие им порождающие элементы заранее сгенерированы и хранятся в двух текстовых файлах: simple.txt содержит все простые числа от 7 до 2557, а файл gener.txt – их порождающие.

Чтение данных из файла и заполнение соответствующих массивов происходит следующим образом:

string[] SimpleArr = System.IO.File.ReadAllLines(@"prost.txt");

string[] PorojArr = System.IO.File.ReadAllLines(@"poroj.txt");

Так же в каждом модуле присутствует массив символов:

private char[] abc = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ы', 'э', 'ю', 'я'};


Его элементы используется для нумерации заданий при экспорте в Microsoft Office Word.

Экспорт данных происходит в Microsoft Office Word через COM - объект Microsoft.Office.Interop.Word. Поэтому в каждый проект нужно добавить на него ссылку:





Используем именно двенадцатую версию, так как она является наиболее универсальной и позволяет работать как с Microsoft Office Word 2003, так и с Microsoft Office Word 2007:



Затем внутри каждого модуля создаем два экземпляра приложения:


Word.Application wa1 = new Word.Application();

Word.Application wa1 = new Word.Application();


И добавляем по документу в каждый из них:


wrdDoc1 = wa1.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

wrdDoc2 = wa2.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);


Вставка текста в документ происходит следующим образом:


wa1.Selection.TypeText("Решение:\n");


Для сохранения используется следующая конструкция:


Object oName = @Application.StartupPath + "/task.doc";

wrdDoc1.SaveAs(ref oName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

Object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;

Object originalFormat = Word.WdOriginalFormat.wdWordDocument;

Object routeDocument = Type.Missing;

((Word._Application)wa1).Quit(ref saveChanges, ref originalFormat, ref routeDocument);

wa1 = null;


Ро-метод Полларда.

В данном методе дополнительно используется нестандартная функция по вычислению наибольшего общего делителя двух чисел:

private int NOD(int x, int y)

{



Return x;

}

И функция поиска обратного элемента в поле по модулю:

private int INV(int x, int y)

{



Return x;

}


Метод Полига-Хеллмана.

Из особенностей данного метода стоит отметить использование отдельной процедуры для канонического разложения числа:

private void KANON(int x)

{

...

}

Число, поступающее на вход, раскладывается на простые сомножители. Для хранения множителей применяется массив P[], а для их степеней массив Alf[].