Разработка программного продукта в среде Visual C++, осуществляющего генерацию псевдослучайных чисел двумя методами

Генератор псевдослучайных чисел – алгоритм, создающий некоторую числовую последовательность, элементы которой почти независимы друг от друга. Методика организации регистра сдвига с линейной обратной связью в программной среде Microsoft Visual C++.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.07.2016
Размер файла 712,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Введение

В современном стремительно развивающемся информационном обществе достаточно остро стоит вопрос хранения и передачи информации. Несмотря на непрерывно возрастающий накопительный объем информационных носителей, порой требуется сохранить большое количество данных на хранилище небольшой емкости (например, флэш-накопителе). Для уменьшения размеров применяются особые алгоритмы - так называемые алгоритмы сжатия. Сжатие сокращает объем пространства, требуемого для хранения файлов в ЭВМ, и количество времени, необходимого для передачи информации по каналу установленной ширины пропускания. Это есть форма кодирования. Другими целями кодирования являются поиск и исправление ошибок, а также шифрование. Процесс поиска и исправления ошибок противоположен сжатию - он увеличивает избыточность данных, когда их не нужно представлять в удобной для восприятия человеком форме. Удаляя из текста избыточность, сжатие способствует шифpованию, что затрудняет поиск шифpа доступным для взломщика статистическим методом. Существует достаточно большое количество их всевозможных вариаций. В данной работе будут рассмотрены основные сведения об архивации и типах сжатия, а так же - приведены реализация алгоритма LZ77 на языке программирования С++.

Microsoft Visual Studio -- линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом.

Microsoft Visual C++ (MSVC) -- интегрированная среда разработки приложений на языке C++, разработанная фирмой Microsoft и поставляемая либо как часть комплекта Microsoft Visual Studio, либо отдельно в виде бесплатного функционально ограниченного комплекта Visual C++ Express Edition. Сменила интегрированную среду разработки Microsoft Quick C.

1. Цели курсовой работы

Целью данной курсовой работы является получение знаний по выбранной тематике и создание программного продукта в среде Visual C++, осуществляющего генерацию псевдослучайных чисел двумя методами.

Созданный программный продукт должен выполнять следующие функции:

- осуществлять интерфейс с пользователем,

- генерировать псевдослучайное число.

2. Литературный обзор

2.1 Постановка задачи

Задача: создать программный продукт на языке C++, осуществляющий генерацию псевдослучайных чисел.

Подзадачи:

• Изучить существующие методы генерации.

• Выбрать метод генерации, исходя из параметров эффективности, быстродействия и простоты реализации.

• Создать программный продукт.

• Провести тестирование программного продукта.

2.2 Описание предметной области

Генератор псевдослучайных чисел (ГПСЧ) - алгоритм, порождающий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному).

Современная информатика широко использует псевдослучайные числа в самых разных приложениях -- от метода Монте-Карло и имитационного моделирования до криптографии. При этом от качества используемых ГПСЧ напрямую зависит качество получаемых результатов.

Сокращение объёма данных достигается за счёт замены часто встречающихся данных короткими кодовыми словами, а редких - длинными (энтропийное кодирование). Сжатие данных, не обладающих свойством избыточности (например, случайный сигнал или белый шум, зашифрованные сообщения), принципиально невозможно без потерь.

Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается -- начинает повторять одну и ту же последовательность чисел. Длина циклов ГПСЧ зависит от самого генератора и составляет около 2n/2, где n -- размер внутреннего состояния в битах, хотя линейные конгруэнтные и LFSR-генераторы обладают максимальными циклами порядка 2n. Если порождаемая последовательность ГПСЧ сходится к слишком коротким циклам, то такой ГПСЧ становится предсказуемым и непригодным для практических приложений.

Большинство простых арифметических генераторов хотя и обладают большой скоростью, но страдают от многих серьёзных недостатков:

• Слишком короткий период/периоды.

• Последовательные значения не являются независимыми.

• Некоторые биты «менее случайны», чем другие.

• Неравномерное одномерное распределение.

• Обратимость.

Наиболее распространены линейный конгруэнтный метод, метод Фибоначчи с запаздываниями, регистр сдвига с линейной обратной связью, регистр сдвига с обобщённой обратной связью.

Линейный конгруэнтный метод применяется в простых случаях и не обладает криптографической стойкостью. Входит в стандартные библиотеки различных компиляторов.

Запаздывающие генераторы Фибоначчи -- генераторы псевдослучайных чисел, также называемые аддитивными генераторами. В отличие от генераторов, использующих линейный конгруэнтный алгоритм, фибоначчиевы генераторы можно использовать в статистических алгоритмах, требующих высокого разрешения. В связи с этим линейный конгруэнтный алгоритм постепенно потерял свою популярность и его место заняло семейство фибоначчиевых алгоритмов, которые могут быть рекомендованы для использования в алгоритмах, критичных к качеству случайных чисел.

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

3. Обзор выбранного метода

Хотя линейный конгруэнтный метод порождает статистически хорошую псевдослучайную последовательность чисел, он не является криптографически стойким. Генераторы на основе линейного конгруэнтного метода являются предсказуемыми, поэтому их нельзя использовать в криптографии. Впервые генераторы на основе линейного конгруэнтного метода были взломаны Джимом Ридсом (Jim Reeds), а затем Джоан Бояр (Joan Boyar). Ей удалось также вскрыть квадратические и кубические генераторы. Другие исследователи расширили идеи Бояр, разработав способы вскрытия любого полиномиального генератора. Таким образом, была доказана бесполезность генераторов на основе конгруэнтных методов для криптографии. Однако генераторы на основе линейного конгруэнтного метода сохраняют свою полезность для некриптографических приложений, например, для моделирования. Они эффективны и в большинстве используемых эмпирических тестах демонстрируют хорошие статистические характеристики.

Регистры сдвига с линейной обратной связью могут быть реализованы аппаратными средствами, что позволяет их использовать для быстрой генерации псевдослучайной последовательности, например при расширении спектра методом прямой последовательности или для генерации шумового сигнала.

Преимущества:

• высокое быстродействие криптографических алгоритмов, создаваемых на основе РСЛОС (например потоковых шифров);

• применение только простейших битовых операций сложения и умножения, аппаратно реализованных практически во всех вычислительных устройствах;

• хорошие криптографические свойства (РСЛОС могут генерировать последовательности большого периода с хорошими статистическими свойствами);

• благодаря своей структуре, РСЛОС легко анализируются с использованием алгебраических методов.

Недостатки:

• Одна из главных проблем РСЛОС в том, что их программная реализация крайне неэффективна: приходится избегать разреженных многочленов обратной связи, так как они приводят к облегчению взлома корреляционным вскрытием, а плотные многочлены очень медленно просчитываются. Поэтому программная реализация такого генератора работает не быстрее, чем реализация DES.

• Линейность последовательности на выходе регистра позволяет однозначно определить многочлен обратной связи C(x) по 2L последовательным битам с помощью алгоритма Берлекэмпа -- Мэсси или алгоритма Евклида.

• Относительная лёгкость анализа алгебраическими методами не только облегчает разработку, но и увеличивает шансы на взлом генератора на базе РСЛОС.

4. Программная реализация

4.1 Назначение

Программа «Курсовой проект: Генерация псевдослучайных чисел» предназначена для осуществления генерации псевдослучайных чисел.

4.2 Пользовательский интерфейс

Рис. 1

Основное окно программы:

При запуске программы:

• Отображается тема курсовой работы.

• Программа предлагает одно из действий в меню.

4.2 Пример использования

Рис. 2. Выбрать `M'

Рис. 3. Выбрать `1'

Рис. 4. Выбрать `2'

Рис. 5. Выбрать `0'

Рис. 6. Выбрать `D' и ввести начало и конец диапазона чисел

Рис. 7. Выбрать `M'

Рис. 8. Выбрать `1'

Рис. 9. Выбрать `2'

программный регистр псевдослучайный числовой

Рис. 10. Выбрать `0'

Рис. 11. Выбрать `S' и ввести имя файла

Рис. 12. Файл `1.txt'

4.3 Листинг программного кода

Interface.cpp

#include <stdio.h> // библиотека ввода-вывода

#include <locale.h> // библиотека языковой локализации

#include "global.h" // библиотека работы с упакованным числом

#include <cstdio>// для вывода в файл

// Длинаименифайла

static const int length = 66;

#pragma warning(disable: 4996)

/*

Главная функция. Реализует ввод, проверку, интерфейс с пользователем.

*/

int PrintСongruential(int min, int max);

int PrintLFSR (int min, int max);

void main()

{

int ch = '\0';// Пунктменю

int fl0 = 0,fl1 = 0, fl2 = 0, fl = 0;// Проверка на использование метода

long int min = 0, mmin = -2147483648;// Min диапазона

long int max = 100, mmax = 2147483647;// Max диапазона

int level;// Компонента уровня

bool direct;// Компонента направления

char filename[length];// Имя файла

FILE *fp;// Указатель на файловой поток

// Для сообщений на русском языке

setlocale(LC_ALL, "Russian");

printf("Курсавая работа: Генератор псевдослучайных чисел");

do { // Цикл обработки команд

switch(ch)

{

case 'M': // Выборметода

case 'm':

do {

// Отобразитьподменю

printf("\n\nПодменю<Выбор метода>:");

printf("\n1. Линейный конгруэнтный метод");

printf("\n2. Метод регистра сдвига с линейной обратной связью");

printf("\n0. Вернуться в главное меню");

printf("\nВыберите подпункт:>");

fflush(stdin);

ch = getchar();

switch(ch)

{

case '1': // Печать ленейно конгруэнтного метода

X1 = PrintСongruential(min, max);

fl1 = 1;

fl2 = 0;

break;

case '2': // Печать метода регистра сдвига с линейной обратной связью

X2 = PrintLFSR(min, max);

fl1 = 0;

fl2 = 1;

break;

}

}

while(ch != '0');

break;

case 'D': // Настройка диапазона случайных значений

case 'd':

do{

// Ввести длину диапазона и проверить корректность ввода

printf("\nВведите диапазон случайных чисел [-2147483648..2147483647]:>");

printf("min = ");

scanf("%ld", &min);

printf("max = ");

scanf("%ld", &max);

// Проверить корректность ввода и допустимоть диапазона

if(min < mmin || min > mmax - 1 ||

max < mmin + 1 || max > mmax)

{

printf("Ошибка: Некорректныйдиапазон:\n");

if(min < mmin || min > mmax - 1) printf("Проблемас min\t");

if(max < mmin + 1 || max > mmax) printf("Проблемас max\t");

fl0 = 1;

}

if(min >= max)

{

if(min > max) printf("\nmax долженбытьбольше min\t");

if(min == max) printf("max и min должны иметь разные значения\t");

fl0 = 1;

}

}

while(fl0 == 1);

break;

case 'S': // Сохранение числа в файле

case 's':

fflush(stdin);

// Ввести имя файла

printf("\nВведите имя файла для сохранения (или нажмите [enter] для отмены):>");

if(*gets_s(filename, length) == '\0') break;

// Создать файл для сохранения массива

if((fp = fopen(filename, "w")) == NULL)

printf("\nОшибка: Файл с указанным именем не может создан или открыт на запись\n");

else

{

if(ch == 's' || ch == 'S')

{

// Записать последнее сгенерированное чисело в текстовый файл

if(fl1 == 1) fprintf(fp, "%ld", X1);

else {

if(fl2 == 1) fprintf(fp, "%ld", X2);

else {

fl = 1;

fprintf(fp, "Число не было сгенерировано");

}

}

}

// Закрыть файл

fclose(fp);

if(fl == 0) printf("\nЧисло сохранен успешно\n");

else printf("\nЧисло не было сохранено\n");

}

break;

case '\0': // Пустая команда

break;

default:

printf("Ошибка: Некорректная операция");

break;

};

// Сбросить устройство ввода

fflush(stdin);

// Отобразить главное меню

printf("\n\nГлавное меню:");

printf("\nM. Выбор метода");

printf("\nD. Ввод диапазона случайных чисел(по умолчанию 0..100)");

printf("\nS. Сохранение последнее сгенерированное чисело в текстовом файле");

printf("\nQ. Выход");

printf("\nВыберите пункт:>");

ch = getchar();

}

while((ch != 'Q') && (ch != 'q'));

// Сохранение новых сгенерированных чисел

freopen("Global.h", "w", stdout);

printf("static unsigned long X1 = %d;\nstatic unsigned long X2 = %d;", X1, X2);

}

PrintLFSR.cpp

#include <stdio.h> // библиотекаввода-вывода

#include "global.h" // библиотека работы с упакованным числом

int PrintLFSR (int min, int max)

{

X2 = ((((X2 >> 31) (X2 >> 6) (X2 >> 4) (X2 >> 2)

(X2 >> 1) X2) & 0x00000001) <<31) | (X2 >> 1);

printf("Сгенерированноечисло: %d\n", X2 % (max - min) + min);

return X2;

}

PrintСongruential.cpp

#include <stdio.h>// библиотека ввода-вывода

#include"Global.h"// библиотека работы с упакованным числом

int PrintСongruential(int min, int max)

{

X1 = (16807 * X1 + 1) % 2147483647;

printf("Сгенерированное число: %d\n", X1 % (max - min) + min);

return X1;

}

Global.h

static unsigned long X1 = 1;

static unsigned long X2 = 1;

Заключение

Поставленная в начале работы цель - создать программный продукт на языке C++, осуществляющий генерацию псевдослучайных чисел - достигнута.

Линейный конгруэнтный метод и метод РСЛОС показали хорошую эффективность при высоком быстродействии и относительной простоте реализации. Эти алгоритмы очень удобны для Генерации псевдослучайных чисел.

Размещено на Allbest.ru

...

Подобные документы

  • Программа для формирования и просмотра команды для олимпиады по программированию. Генератор случайных чисел в Borland C++, методы их получения. Линейный конгруэнтный метод. Метод Фибоначчи, вихря Мерсенна. Тестирование псевдослучайных последовательностей.

    курсовая работа [93,5 K], добавлен 27.09.2014

  • Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.

    курсовая работа [50,3 K], добавлен 18.09.2009

  • Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.

    лабораторная работа [1,4 M], добавлен 21.01.2015

  • Основные подходы при создании Windows приложений. Изучение навыков работы с 2D графикой в Windows приложениях. Методы генерации псевдослучайных чисел. Разработка игры "Сапер" с расположением мин на основе нескольких методов генерации случайных чисел.

    курсовая работа [63,2 K], добавлен 18.02.2009

  • Разработка программного продукта, предназначенного для тестирования знаний пользователя по теме "Тепловые двигатели" нa языкe C++ в среде Micrоsоft Visual Studio с использовaниeм библиотeки MFC. Функциональное назначение созданного Windows-приложения.

    курсовая работа [954,4 K], добавлен 25.06.2011

  • Особенности информационных технологий в области медиапланирования и проблемы автоматизации в ООО "Медиа-Групп". Процесс разработки, алгоритм и эффективность внедрения программного продукта "Медиаплан рекламной кампании" в среде Microsoft Visual Basic.

    дипломная работа [2,7 M], добавлен 21.04.2009

  • Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.

    курсовая работа [585,5 K], добавлен 24.03.2009

  • Создание приложения Windows Forms в среде Microsoft Visual Studio 2008. Разработка программы "Курсовой" для организации работы по учёту курсовых работ в учебных заведениях с возможностью добавления, удаления, редактирования и поиска информации.

    курсовая работа [2,2 M], добавлен 28.06.2011

  • Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.

    курсовая работа [2,8 M], добавлен 27.01.2010

  • Алгоритмы поиска динамических шумов и их компенсации на основе метода Motion estimation. Разработка программного продукта для детектирования движения капель дождя и их удаления на видеопоследовательностях, и его реализация среде Microsoft Visual Studio.

    магистерская работа [6,6 M], добавлен 09.02.2013

  • Понятие объектно-ориентированного программирования, общая характеристика языков высокого уровня. Разработка программного обеспечения для реализации компьютерной игры "пинбол" с помощью императивного программирования в среде Microsoft Visual Basic.

    курсовая работа [428,9 K], добавлен 19.09.2012

  • Разработка и освоение в современном производстве информационной подсистемы. Создание базы данных в среде MS SQL Server 2008 и приложения в среде MS Visual Studio 2012. Процесс ввода при выборе пунктов меню. Заполнение формы с критериями на фильтрацию.

    отчет по практике [834,4 K], добавлен 27.11.2013

  • Факторизация натурального числа. Метод квадратичного решета. Факторизация с помощью эллиптических кривых. Реализация алгоритмов натуральных чисел и оценка их эффективности. Применение алгоритмов факторизации натуральных чисел в программной среде Maple.

    курсовая работа [851,6 K], добавлен 25.06.2013

  • Разработка алгоритма программного бизнес-приложения в интегрированной среде Microsoft Visual Studio 2005 на языке С#, в целях автоматизации работы помощника инспектора ПТО, регистрирующего и направляющего на технический осмотр транспортные средства.

    дипломная работа [1,8 M], добавлен 24.12.2013

  • Основы языка программирвоания C++. Элементы управления в Microsoft Visual C++. Алгоритмические конструкции языка программирования Visual C++ и базовые элементы управления. Глобальные константы и переменные. Управление программой с помощью клавиатуры.

    курсовая работа [1,7 M], добавлен 08.04.2015

  • Microsoft Visual C++ и среда программирования Microsoft Developer Studio 6.0. Решение интеллектуальной задачи на компьютере. Построение алгоритма кодирования на Visual C++. Алгоритм решения задачи. Описание программы "Sort". Инструкции пользователя.

    курсовая работа [46,0 K], добавлен 27.11.2007

  • Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.

    курсовая работа [1,3 M], добавлен 12.12.2011

  • Разработка программного продукта "IPR v 3.1" в среде Microsoft Visual Fox Pro 5.0. Программа как метод аналитического учета методической работы штата преподавателей, ее возможности и принцип действия. Требования к системным характеристикам оборудования.

    дипломная работа [1,2 M], добавлен 06.07.2011

  • Сравнительная характеристика средств обучения программированию в среде Visual Basic. Задачи проектируемых автоматизированных программных систем. Комплекс технических средств. Математическое и программное обеспечение. Язык программирования Visual Basic.

    дипломная работа [64,1 K], добавлен 17.05.2007

  • Общая структура микропроцессора. Жизненный цикл программного обеспечения. Проектирование схемы операционного блока, создание временных диаграмм с использованием средств Microsoft Office и в среде OrCAD. Разработка алгоритма хранения значений констант.

    курсовая работа [839,5 K], добавлен 24.07.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.