Генератор простых чисел
Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.05.2012 |
Размер файла | 172,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Східноукраїнський національний університет
Завдання
на курсову роботу
студентові Ломакіній Діані Володимирівні - група КТ - 102
1. Тема роботи: Розробка програми для створення генератора випадкових чисел.
2. Термін здачі курсової роботи - 14.06.2011
3. Вхідні дані до роботи: Написати програму яка генерує випадкові числа.
4. Зміст пояснювальної записки (перелік розділів, питань, які належить розробити):
Введення;
Основна частина;
Технічне завдання;
Алгоритм рішення;
Ескіз проекту;
Практична реалізація;
Інтерфейс програми;
Висновок;
Список використаної літератури;
Додаток
Студент Ломакіна Д.В.
Керівник Пугачова О.А.
Реферат
программа генерация случайное число
Курсовая работа содержит 20 страниц формата А4, 4 рисунка, одно приложение.
Цель работы рассмотреть методы и способы реализации программы для генерации случайных чисел. Курсовая работа служит для изучения принципов написания программ, используя различные подходы, а также изучения языка программирования С/С++.
Ключевые слова:
Методы; Алгоритм; Сложность алгоритма; Переменная; Функция;
Содержание
- Введение
Основная часть
Техническое задание
Алгоритм решения задачи
Практическая реализация
Интерфейс программы
- Выводы
- Список использованной литературы
Приложение
- ВВЕДЕНИЕ
- Целью данной курсовой работы было написание программы для генерации случайных чисел, в которой должны быть реализованы возможности генерации абсолютно случайных чисел. Приложение должно быть разработано на языке С/С++.
- Генератор случайных чисел (ГСЧ, англ. Pseudorandom number generator, PRNG) -- алгоритм, генерирующий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному).
- Современная информатика широко использует случайные числа в самых разных приложениях -- от метода Монте-Карло и имитационного моделирования до криптографии. При этом от качества используемых ГСЧ напрямую зависит качество получаемых результатов.
Основная часть
Техническое задание
Данная курсовая работа посвящена созданию программы «Генератор случайных чисел»
Подход к решению задачи основан на структурной методологии. Но следует отметить, что структурное программирование можно эффективно использовать, если ему предшествуют структурный анализ задачи и структурное проектирование программного комплекса. Без структурного проекта попытки применения структурного программирования являются, по меньшей мере, малоэффективными и весьма трудоемкими.
Прежде всего, задача разбивается на следующие подзадачи:
Описать узел, который содержит все необходимые данные
Описать функции и методы для работы с конкретными данными.
Описать функции чтения данных из памяти и вывод на экран.
Задачи, которые решает программа курсовой работы, заключаются в следующем:
Ввод выражения
Обработка выражения
Выдать правильный результат на экран
Обоснование выбранного программного обеспечения и языка программирования
По мере развития вычислительной техники возникали разные методики программирования.
На каждом этапе создавался новый подход, который помогал программистам справляться с растущим усложнением программ. Первые программы создавались посредством ключевых переключателей на передней панели компьютера. Очевидно, что такой способ подходит только для очень небольших программ. Затем был изобретён язык ассемблера, который позволял писать более длинные программы. Следующий шаг был сделан в 1950 году, когда был создан первый язык высокого уровня Фортран. Используя такой язык, программисты могли писать программы до нескольких тысяч строк длиной. Для того времени указанный подход к программированию был наиболее перспективным. Однако язык программирования, легко понимаемый в коротких программах, когда дело касалось больших программ, становился нечитабельным (и не управляемым).
Структурное программирование подразумевает точно обозначенные управляющие структуры, программные блоки, автономные подпрограммы, в которых поддерживается рекурсия и локальные переменные. Сутью структурного программирования является возможность разбиения программы на составляющие её элементы. Используя структурное программирование, средний программист может создавать и поддерживать довольно сложные и большие программы.
Хотя структурное программирование, при его использовании для написания умеренно сложных программ, принесло выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определённой длины. Чтобы написать более сложную программу, нужен был новый подход к программированию. В итоге были разработаны принципы объектно-ориентированного программирования (OOП). Объектно-ориентированное программирование - это сравнительно новый подход к созданию программ. Он аккумулирует лучшие идеи, воплощённые в структурном программировании, и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовывать написанные программы. Структурное программирование позволяет программисту разложить проблему на составные части. В этом случае вся процедура в целом упрощается, и программист получает возможность оперировать с большими по объёму программами.
Данная программа полностью построена на языке программирования С++. В процессе разработки использовался пакет Microsoft Visual Studio.
Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка Си++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году -- нынешняя версия этого стандарта -- ISO/IEC 14882:2003.
Страуструп начал работать над «Си с классами» в 1979 году. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула (Simula) имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.
Разрабатывая Си с классами (позднее Си++), Страуструп также написал программу cfront -- транслятор, перерабатывающий исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.
В 1983 году произошло переименование языка из Си с классами в Си++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования Си++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход Си++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.
В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.
Стандартная библиотека Си++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке Си++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций Си printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.
После многих лет работы совместный комитет ANSI-ISO стандартизировал Си++ в 1998 году. В течение нескольких лет после официального выхода стандарта комитет обрабатывал сообщения об ошибках и в итоге выпустил исправленную версию стандарта Си++ в 2003 году. В настоящее время рабочая группа МОС (ISO) работает над новой версией стандарта под кодовым названием C++09 (ранее известный как C++0X), который должен выйти в 2009 году.
С++ - это универсальный объектно-ориентированный язык программирования. С++ представляет гибкие и эффективные средства определения новых типов, используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции.
Выбран был именно он, потому что в нём заложено максимальное количество удобных инструментов для программиста. Дело в том, что C++ является языком "общения" человека с компьютером. Основным "читателем" текстов на языке C++ является транслятор. Это особая программа, в обязанности которой входит проверка правильности текста программы и его последующий перевод на язык процессора - основного устройства ЭВМ, который и обеспечивает выполнение программы. У процессора свой взгляд на программу. Он не имеет никакого представления о содержательной стороне описываемых алгоритмов. Процессору важны адреса, регистры, прерывания.
Язык программирования С++ позволяет описывать алгоритмы и данные. Однако его выразительные возможности не исчерпываются множеством содержательных алгоритмов и связанных с ними структур данных. Даже самые абсурдные с точки зрения программиста, реализующего сколько-нибудь значимый алгоритм, предложения языка остаются абсолютно правильными и корректными для транслятора. Примеры, основанные на содержательных алгоритмах, неизбежно оставляют за рамками изложения множества предложений, на которых, порой, и выявляются характерные черты языка.
Язык "C", родитель языка "C++", первоначально предназначавшийся для написания операционной системы "UNIX", был разработан и реализован на этой системе Деннисом Ричи. Операционная система, компилятор с языка "C" и по существу все прикладные программы системы "UNIX". "C" показал себя приятным, выразительным и разносторонним языком на широком множестве разнообразных программ. Его легко выучить, и он не теряет своих качеств с ростом опыта программиста.
Именно поэтому этот язык и был выбран для написания программы.
Алгоритм решения задачи
Так как программа написана как консольное приложение, то данные должны вводится до тех пор, пока пользователь сам не остановит процесс работы с программой. Поэтому, в главной функции приложения используется циклический алгоритм работы.
Рис. 1 - Основной алгоритм работы приложения
Эскизный проект
Программа рассчитана на обычного пользователя, т.е. пользователя с начальным уровнем подготовки работы за компьютером, поэтому она должна быть проста в использовании. И в связи с этим для написания проекта используется консольное приложение, а сам проект относится к Windows Console Application.
Для решения задачи поставленной в курсовой работе используется структурное программирование.
Основные понятия
Алгоритм - это конечная последовательность действий, преобразующая исходные данные в результат.
Алгоритмы составляют основу компьютерных наук, они являются основными объектами изучения во многих, если не в большинстве ее областей. Одну и ту же задачу можно решить разными методами, используя различные алгоритмы. Предпочтение отдается тем из них, которые обеспечивают наименьшее время исполнения компьютерной программы. Существует наука, изучающая алгоритмы. Она называется «Теория алгоритмов» и является частью математики. Достижения этой науки используются для разработки эффективных алгоритмов. Созданием и развитием теории алгоритмов занимались европейские ученые: голландец Лейтзен Эгберт Ян Брауэр (1881-1966), немец Герман Вейль (1885-1955), англичанин Алан Матисон Тьюринг (1912-1954) американские - Алонзо Черч (родился в 1903), Эмиль Леон Пост (1897-1954) и Стивен Коул Клини (р. 1909), русские ученые Андрей Андреевич Марков (р. 1903) и Андрей Николаевич Колмогоров (р. 1903).
Переменная - это место в оперативной памяти компьютера, где можно размещать хранимое значение, а затем извлекать его.
Функция - это блок кода программы, который выполняет одно или несколько действий. Обычно функцию вызывает другая функция или оператор
Структурное программирование - методология разработки программного обеспечения, предложенная в 70-х года XX века Дейкстрой и разработанная и дополненная Виртом.
Основная цель структурного программирования - создать программу с минимальными взаимосвязями между ее модулями. В идеале каждый модуль должен иметь один вход и один выход.
Опыт использования методов структурного программирования позволяет сделать следующие выводы:
1) структурное программирование упрощает процесс создания сложных программ и способствует значительному уменьшению количества ошибок в них;
2) использование модулей небольших размеров позволяет упростить и ускорить процессы их отладки;
3) при использовании структурного программирования значительно сокращается трудоемкость разработки технической документации, т.е. в качестве документации на каждый модуль используется только описание его функций;
4) структурное программирование является хорошей базой автоматизации разработки модульных программ.
Основная идея структурного программирования заключается в следующем. Компьютерную программу можно представить в виде набора задач. Любая задача, которая слишком сложна для простого описания, должна быть разделена на несколько более мелких составных задач, и это деление необходимо продолжать до тех пор, пока задачи не станут достаточно простыми для понимания.
Следование принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми. Серьёзно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только её автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежных изменений в составе персонала.
Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов». После этого слово «структурный» стало модным в отрасли, и его начали использовать везде, где надо и где не надо. Появились работы по «структурному проектированию», «структурному тестированию», «структурному дизайну» и так далее. В общем, произошло примерно то же самое, что происходило в 90-х годах и происходит в настоящее время с терминами «объектный», «объектно-ориентированный» и «электронный».
Структурное программирование до сих пор остается довольно успешным способом решения сложных проблем. Однако к концу 1980-х годов слишком очевидными стали некоторые его недостатки. К сожалению, структурное программирование отделяет структуры данных от функций, управляющих ими. Кроме того, в структурном программировании полностью отсутствуют встроенные способы связи данных с функциями. Программисты обнаружили, что возможность многократного использования стандартных блоков, повторяющихся во многих программах, вполне естественна. Однако функции, которые прекрасно работали с одним типом данных, зачастую не могли воспользоваться другими типами, что ограничивало их преимущества.
Программирование для универсальных компьютеров начиналось с программирования в машинных кодах, затем появились и начали своё развитие языки высокого уровня, затем Дейкстрой были развиты принципы структурного программирования, на смену структурному программированию пришло объектное программирование и в настоящее время активно развивается визуальное программирование.
Программирование для микроконтроллеров во многом повторяет тот же путь. Переход от этапа к этапу зависит от доступных внутренних ресурсов микроконтроллеров. Ещё несколько лет назад использование языков высокого уровня было невозможно из-за малого объёма внутренней памяти программ. (В дешёвых моделях микроконтроллеров эта ситуация сохраняется до сих пор.) В настоящее время с появлением микроконтроллеров и сигнальных процессоров с объёмом внутренней памяти в несколько десятков килобайт появляется возможность объектного проектирования.
Применение структурного программирования позволяет увеличить скорость написания программ и облегчить отладку написанной программы. Структурное программирование возможно и на языках программирования assembler, где не предусмотрено структурных операторов, подобных структурным операторам языков программирования C++
Инкапсуляция означает свойство автономности объектов, скрытности их внутреннего механизма от посторонних глаз. С помощью инкапсуляции можно обеспечить сокрытие данных. Это очень важное свойство, благодаря которому пользователь может использовать объект, не задумываясь о его внутренней работе
Сокрытие данных -- неотделимая часть структурного программирования, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.
В консольных приложениях используется диалоговый принцип, т.е. программа спрашивает или задает какое-то действие, а пользователь вводит запрос или ответ.
Данная программа при запуске должна запросить у пользователя ввод данных - выражение. В список разрешается вводить следующие данные: цифры от 0 до 9. Выражение должно иметь правильный логический и математический смысл и синтаксис, то есть, число нельзя начинать с нуля.
ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ
Интерфейс программы
При запуске приложения появится консольное окно, в котором будет предложено ввести количество случайных чисел, как показано на рисунке 2.
Рис.2 - Окно приложения при его запуске
Для работы с программой необходимо ввести любое число, которое не противоречит логической и математической записи. В программе можно вводить символы: числа от 0 до 9.(Рис.3)
Рис.3 - Работа приложения «Генератор случайных чисел»
После ввода числа появляются случайные числа. (рис.4)
Рис 4. - Работа приложения «Генератор случайных чисел»
Но для того чтобы программа самостоятельно не завершила работу используется функция getch().
ВЫВОДЫ
В результате выполнения данной курсовой работы получили программу, которая осуществляет генерацию случайных чисел. Программа имеет консольный интерфейс, что позволяет применять её на различных компьютерах и различных операционных системах.
Во время выполнения данной работы были изучены способы работы с функциями, были закреплены основы программирования и изучены принципы структурного программирования.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Герберт Шилдт. С++ Руководство для начинающих. Второе Издание: Пер. с англ. - М.: Издательский дом «Вильямс», 2005. - 672с.
Бочков С.О., Субботин Д.М. Язык программирования Си для персонального компьютера. М.: “Диалог”, Радио и связь, 1990.
Справочная система языка C++.
Конспект лекций по дисциплине ОПиАЯ.
ПРИЛОЖЕНИЕ
#include <iostream>
#include <windows.h>
#include <time.h>
#include <math.h>
#include <iomanip>
#include<stdio.h>
#include<conio.h>
using namespace std;
void main()
{
SetConsoleOutputCP (1251);
srand((unsigned)time(NULL));
setlocale(LC_ALL,"Russian");
int kolvo,ra;
cout<<"Приложение Случайные числа(Soft)"<<endl;
cout<<endl;
cout<<"Введите количество случайных чисел, выводимых на экран :";
cin>>kolvo;
system("cls");
for(int i=0;i<kolvo;i++)
{
ra=rand()%1001;
cout<<ra<<endl;
}
getch();
Размещено на www.allbest.ru
Подобные документы
Способы получения случайных чисел в программировании и их использование для решения ряда задач. Принцип действия и тестирование работы генератора случайных чисел в Borland C++, его преимущества. Генерация одномерной и двумерной случайной величины.
лабораторная работа [105,4 K], добавлен 06.07.2009Основные подходы при создании Windows приложений. Изучение навыков работы с 2D графикой в Windows приложениях. Методы генерации псевдослучайных чисел. Разработка игры "Сапер" с расположением мин на основе нескольких методов генерации случайных чисел.
курсовая работа [63,2 K], добавлен 18.02.2009Анализ способов построения генераторов случайных чисел для криптографических задач. Анализ генератора случайных чисел на основе магнитометров. Анализ статистических свойств двоичных последовательностей, полученных путем квантования данных магнитометра.
дипломная работа [2,5 M], добавлен 06.05.2018Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.
лабораторная работа [1,4 M], добавлен 21.01.2015Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.
курсовая работа [50,3 K], добавлен 18.09.2009Структура и функции генератора случайных чисел. Методы предельного уменьшения ошибки второго рода. Усиление шумового сигнала. Его дискретизация по времени и аналого-цифровое преобразование. Формирование случайной последовательности и ее корреляция.
курсовая работа [299,4 K], добавлен 11.12.2014Программа для формирования и просмотра команды для олимпиады по программированию. Генератор случайных чисел в Borland C++, методы их получения. Линейный конгруэнтный метод. Метод Фибоначчи, вихря Мерсенна. Тестирование псевдослучайных последовательностей.
курсовая работа [93,5 K], добавлен 27.09.2014Применение случайных чисел в моделировании, выборке, численном анализе, программировании и принятии решений. Понятие равномерного распределения вероятности. Способы получения последовательности. Правила выбора модуля. Критерий Колмогорова-Смирнова.
курсовая работа [1,3 M], добавлен 17.03.2011Составление программы на языке Pascal для обработки результатов соревнований по фигурному катанию, проводившихся по трем видам многоборья. Генератор случайных чисел. Блок-схема программы. Ввод данных, выбор пользователя, оформление результатов вычислений.
курсовая работа [471,8 K], добавлен 21.12.2012Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.
лабораторная работа [124,2 K], добавлен 15.06.2010