Главная страница
Навигация по странице:

  • _____________________________________

  • 2.1 Основной алгоритм генератора случайных чисел по методу Фибоначчи с запаздываниями.

  • 2.2 Алгоритм нахождения минимального и максимального значений ряда (рисунок 2).

  • Код программы Form 1. cs

  • Курсовик 1 сем — копия. Отчет по курсовой работе по дисциплине Программирование


    Скачать 0.6 Mb.
    НазваниеОтчет по курсовой работе по дисциплине Программирование
    Дата25.01.2018
    Размер0.6 Mb.
    Формат файлаdocx
    Имя файлаКурсовик 1 сем — копия.docx
    ТипОтчет
    #35154

    Министерство образования и науки РФ

    ФГБУ ВО «Омский государственный технический университет»

    Кафедра «Автоматизированные системы обработки информации и управления»

    ОТЧЕТ ПО
    КУРСОВОЙ РАБОТЕ
    по дисциплине «Программирование»
    МЕТОД ФИБОНАЧЧИ С ЗАПАЗДЫВАНИЯМИ

    Руководитель,

    ст. преподаватель кафедры АСОИУ _____________________________________ ФИО преподавателя

    подпись, дата

    Исполнитель:

    студент группы ПЭ-161 ______________________________________ ФИО студента

    подпись, дата


    Омск 2017

    Реферат

    Отчет 24 с., 1 ч., 13 рис., 0 табл., 10 источников, 1 прил.

    НАТУРАЛЬНЫЕ ЧИСЛА, КОМПИЛЯТОР, КОМПОНОВЩИК, ДЕЛИТЕЛИ, АЛГОРИТМ, ДАННЫЕ, СТРУКТУРА

    Объектом исследования является аддитивный генератор псевдослучайных чисел или по-другому, генератор случайных чисел основанный на методе Фибоначчи с запаздываниями.

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

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

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

    Качество распределения значений полученных чисел можно проследить по гистограмме.
    Содержание

    Введение 4

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

    2 Схемы основных алгоритмов 6

    3 Описание структур данных 8

    4 Аспекты реализации на языке программирования C# 9

    5 Руководство пользователя 10

    6 Результаты тестирования 17

    Заключение 18

    Список использованных источников 19

    ПРИЛОЖЕНИЕ А 20


    Введение


    Курсовая работа за 1-й курс по дисциплине «программирование».

    Цель работы  создать алгоритм для получения случайных чисел методом Фибоначчи с запаздываниями.

    Сопутствующие задачи  создать удобный и функциональный интерфейс.

    Для решения задачи был разработан алгоритм для решения данной задачи, который был реализован на языке программирования C#.

    В отчете приведены описание структур данных, аспекты реализации, руководство пользователя, схема алгоритма и результаты тестирования. Код программы вынесен в приложение А.

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



    Реализовать генератор псевдослучайных чисел с помощью метода Фибоначчи с запаздываниями. Проверить качество полученной равно распределённой случайной величины с помощью гистограммы распределения её значений [1].

    2 Схемы основных алгоритмов


    2.1 Основной алгоритм генератора случайных чисел по методу Фибоначчи с запаздываниями.

    Был разработан алгоритм решения данной задачи и составлена схема алгоритма (рисунок 1).

    Пусть дано a и b  начальные значения генератора, x и y  диапазон случайных чисел, n  количество случайных чисел, k массив со случайными вещественными числами.


    Рисунок 1 – Алгоритм Фибоначчи с запаздываниями
    2.2 Алгоритм нахождения минимального и максимального значений ряда (рисунок 2).

    Пусть дан массив случайных чисел A[ ] размерностью N, N  количество случайных чисел. Тогда:


    Рисунок 2  Схема алгоритма нахождения максимума и минимума

    3 Описание структур данных


    Структурирование данных предполагает существование (или установление) между ними каких-то отношений (связей). В зависимости от характера этих отношений можно выделить несколько классификационных признаков структур данных [2].

    Отношение порядка. По порядку данных структуры делятся на упорядоченные и неупорядоченные.

    В упорядоченных структурах элементы размещаются по порядку в соответствии со значением некоторого признака. Наиболее простым признаком является порядковый номер элемента: установление порядка в соответствии с номером называется нумерацией. При этом если весь набор имеет один общий идентификатор, то отдельным данным присваиваются собственные идентификаторы – индексы.

    Следующим классификационным признаком структур является однородность. К однородным относятся структуры, содержащие элементарные данные только одного типа. Неоднородные структуры объединяют данные разных типов.

    Еще одним признаком является характер отношений между элементами. По взаимной подчиненности элементов структуры данных подразделяются на линейные и нелинейные.

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

    Массив  упорядоченная линейная совокупность однородных данных.

    «Упорядоченная» означает, что элементы массива пронумерованы;

    «Линейная» означает, что все элементы равноправны;

    Термин «однородных» означает, что массив состоит из элементов одного типа данных;

    Количество индексов, определяющих положение элемента в массиве, называется размерностью массива.

    В данной работе у массива индекс единственный, такой массив называется одномерным.

    4 Аспекты реализации на языке программирования C#


    При реализации данного алгоритма были использованы: компоненты графического интерфейса Windows Forms Application, такие как, textbox, label, button, checkbox и т.д. Windows Forms Applicaltions дает возможность быстро и красиво оформить интерфейс программы [3]. При создании нового проекта Windows Forms Application уже подключены нужные библиотеки и есть функция помощи при написании кода (при написании первой буквы функции в всплывающем окошке будет представлен список из всех существующих функций начинающейся с этой буквы), данное дополнение работает не только с функциями, но и с переменными, типами данных и т.д.

    В C# есть много готовых элементов для работы с текстом  это textbox. массивами  datagridview, для работы с изображениями  picturebox, для построения графиков  chartbox и так далее [4].


    5 Руководство пользователя


    В данном разделе приведена инструкция по пользованию программой [5].

    5.1 Изначальный вид программы

    Так выглядит программа (рисунок 3).


    Рисунок 3  Начальный вид программы
    5.2 Параметры (рисунок 4)


    Рисунок 4  Параметры генератора

    Параметры, а и b это начальные значения генератора, они нужны для задания размерности массива.

    5.3 Диапазон чисел (рисунок 5)


    Рисунок 5  Задание диапазона чисел
    В данном разделе пользователь вводит диапазон нужных ему сгенерированных чисел.

    5.4 Количество сгенерированных чисел (рисунок 6)


    Рисунок 6  Количество сгенерированных чисел
    5.5 Параметры чисел и вывод гистограммы (рисунок 7)


    Рисунок 7 Параметры чисел и гистограмма
    При нажатии на CheckBox «работать с целыми числами» пользователь получит случайные целые числа. А при нажатии на «показать гистограмму» окно программы расширится и с левой стороны окна программы появится гистограмма, если заполнены все нужные поля (рисунок 8).


    Рисунок 8 Гистограмма
    5.6 Область вывода данных (рисунок 9)



    Рисунок 9 Вывод данных
    Данные выводятся в TextBox в упорядоченном виде.

    5.7 Дополнительные данные о случайных числах

    По середине в нижней части окна находятся дополнительные данные о случайных числах (рисунок 10).


    Рисунок 10  Дополнительные данные о числах

    Здесь показаны максимум и минимум ряда и расстояние между ними.

    5.8 Вкладки «файл» и «настройки»

    В верхней части окна программы расположены две вкладки «файл» и «настройки» (рисунок 11).


    Рисунок 11  Вкладки «файл» и «настройки»
    Во вкладке «файл» находятся две кнопки «сохранить» и «выход» (рисунок 12)


    Рисунок 12  Меню «файл»
    При нажатии на кнопку «сохранить» появится диалоговое окно сохранения текстового файла, где можно будет выбрать папку и имя файла в котором будут содержаться случайные числа.

    Во вкладке «настройки» тоже находятся две кнопки — это «построить гистограмму» и «очистить» (рисунок 13)


    Рисунок 13  Меню «настройки»
    Кнопка «очистить» очищает все поля программы, в том числе и гистограмма.

    6 Результаты тестирования


    В данном разделе будут представлены тесты на проверку, соответствует ли программа данной спецификации [6].

    Тест 1 Ввод a = 12, b = 2, x = 0, y = 1, количество случайных чисел n = 10 (рисунок 14).

    Вывод: будут сгенерированы случайные числа.

    Тест 2 Ввод отрицательного диапазона.

    Вывод: ошибка, диапазон должен быть положительным.

    Тест 3 Допустим пользователь ввел, а = -1, b = 4, x = 0, y = 10, n = 10.

    Вывод: программа предупредит пользователя что a и b должны быть положительными.

    Тест 5 Пользователь не ввел количество случайных чисел.

    Вывод: программа ничего не выведет.

    Тест 7 Если пользователь оставил все поля пустыми

    Вывод: программа выдаст ошибку.

    Заключение


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

    В данной работе присутствуют такие разделы: первый раздел «постановка задачи», в данном разделе описана краткая задача курсового проектирования; второй раздел «схемы основных алгоритмов», в нем были показаны схемы основных алгоритмов; третий раздел «описание структур данных», в нем были описаны все виды использованных данных; четвертый раздел «пользовательский интерфейс», в данном разделе был описан интерфейс программы и для чего предназначены все поля и кнопки; и последний раздел «результаты тестирования», в данном разделе приведены тесты проверяющие как себя ведет программа при разном вводе данных.

    Недостаток программы в том, что при большом количестве случайных чисел программа работает довольно долго, это объясняется тем что данный алгоритм требует большое количество памяти.

    Список использованных источников


    1 Кормен Т. Введение в алгоритмы. – Кембридж: МТИ, 2009. – 1251 с.

    2 Системы программирования: Метод. указания / Сост. О.П. Шафеева, И.А. Волчкова, С.А.Гончаров.  Омск: ОмГТУ, 2012. – 32 с.

    3 Виссер Дж. Building Maintainable Software (C# Edition). – М: ДМК Пресс, 2017. – 192 с.

    4 Джон Ш. Microsoft Visual C#. Step by step. – СПб: Питер, 2017. – 848 с.

    5 Джозеф А., Бен А. C# 6.0 in a Nutshell: The Definitive Reference. – М: Вильямс, 2016. – 1040 с.

    6 Троелсен Э. С# 6.0 и .NET 4.6 Framework. –Нью-Йорк: Business Media, 2015. – 1603 с.


    ПРИЛОЖЕНИЕ А


    (обязательное)

    Код программы

    Form1.cs

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.IO;

    using System.Windows.Forms;

    using System.Threading;

    namespace Курсовик

    {

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    }
    /////////////////////////////////////Основной код

    public void button1_Click(object sender, EventArgs e)

    {

    textBox5.Clear();

    textBox4.Clear();

    chart1.Series[0].Points.Clear();

    label8.Text = "Максимальное число: ";

    label9.Text = "Минимальное число: ";

    label10.Text = "Разность макс и мин: ";
    int count = Convert.ToInt32(numericUpDown1.Value), c = Convert.ToInt32(textBox3.Text), d = Convert.ToInt32(textBox6.Text);

    double a = Convert.ToDouble(textBox1.Text), b = Convert.ToDouble(textBox2.Text);

    int max = 0;

    double min = double.PositiveInfinity, max1 = 0;

    double res;

    Random r = new Random();
    /////////////////////////////////////Контроль ввода

    if (a == b)

    {

    MessageBox.Show("a и b должны быть различны!!!");

    textBox1.Text = "";

    textBox2.Text = "";

    return;

    }

    if (a < 0 || b < 0 || (a < 0 && b < 0))

    {

    MessageBox.Show("a и b должны быть положительными!!!");

    if(a<0)

    textBox1.Clear();

    if (b < 0)

    textBox2.Clear();

    if (a < 0 && b < 0)

    {

    textBox1.Clear();

    textBox1.Clear();

    }

    return;

    }
    if (c > d)

    {

    MessageBox.Show("X должен быть меньше Y!!!");

    textBox3.Clear();

    textBox6.Clear();

    return;

    }

    if (c < 0 || d < 0 || (c < 0 && d < 0))

    {

    MessageBox.Show("Ваш диапазон должен состоять из положительных чисел.");

    if (c < 0)

    textBox3.Clear();

    if (c < 0 && d < 0)

    {

    textBox3.Clear();

    textBox6.Clear();

    }

    return;

    }

    if (a > b)

    max = (int)a;

    else

    max = (int)b;

    double[] A = new double[count + max + 1];

    double[] B = new double[count + max + 1];


    //целые числа

    if (checkBox2.Checked == true)

    {

    for (int i = 0; i < max + 1; i++)

    {
    A[i] = r.Next(d - c) + c;

    textBox4.Text += " " + Convert.ToString(A[i]);

    }

    }

    else

    {
    //дробные числа

    for (int i = 0; i < max + 1; i++)

    {
    A[i] = r.NextDouble() * (d - c) + c;

    textBox4.Text += " " + Convert.ToString(Math.Round(A[i], 1));

    }

    }
    for (int i = max + 1; i < count + max + 1; i++)

    {

    if (A[i - (int)a] >= A[i - (int)b])

    res = (A[i - (int)a] - A[i - (int)b]);

    else

    res = (A[i - (int)a] - A[i - (int)b] + d);

    if (res < c)

    res = res + c;

    B[i - (max + 1)] = res;

    textBox5.Text += " k" + (i - (max)) + " = " + Math.Round(res, 1) + "\r\n";

    }

    /////////////////////////////////////Строим Гистограмму

    for (int i = 0; i < count + max + 1; i++)

    {

    chart1.Series[0].Points.AddY(B[i]);

    }
    /////////////////////////////////////Находим максимум и минимум ряда

    for (int i = 0; i < count; i++)

    {

    if (B[i] > max1)

    max1 = B[i];

    if (B[i] < min)

    min = B[i];

    }

    label8.Text += Math.Round(max1, 1);

    label9.Text += Math.Round(min,1);

    label10.Text += Math.Round((max1 - min),1);

    }
    /////////////////////////////////////Кнопка для построения гистограммы

    public void построитьГистограммуToolStripMenuItem_Click(object sender, EventArgs e)

    {

    this.Width = 940;

    chart1.Visible = true;

    }
    /////////////////////////////////////Кнопка для выхода из программы

    private void выходToolStripMenuItem_Click(object sender, EventArgs e)

    {

    System.Environment.Exit(0);

    }
    /////////////////////////////////////Начальные значения (показать или убрать)

    private void checkBox1_CheckedChanged(object sender, EventArgs e)

    {

    if (checkBox1.Checked == true)

    textBox4.Visible = true;

    else

    textBox4.Visible = false;

    }
    /////////////////////////////////////Кнопка для сохранения чисел в файл

    private void сохранитьВТекстовыйДокументToolStripMenuItem_Click(object sender, EventArgs e)

    {

    SaveFileDialog save = new SaveFileDialog();

    save.FileName = "Текстовый документ(*.txt)";

    save.Filter = "Текстовый документ(*.txt)|*.txt";
    if (save.ShowDialog() == DialogResult.OK)

    {

    Stream file = save.OpenFile();

    StreamWriter sw = new StreamWriter(file);
    sw.Write(textBox5.Text);
    sw.Close();

    file.Close();

    }

    }
    /////////////////////////////////////Расширяем окно для показа гистограммы

    private void checkBox3_CheckedChanged(object sender, EventArgs e)

    {

    if (checkBox3.Checked == true)

    {

    for (int x = 385; x < 620; x = x + 20)

    { this.Height = x; }

    for (int y = 535; y < 1185; y = y + 20)

    {

    this.Width = y;

    Thread.Sleep(10);

    }

    chart1.Visible = true;

    }

    else

    {

    for (int y = 1000; y > 535; y = y - 20)

    {

    this.Width = y;

    Thread.Sleep(10);

    }

    for (int x = 620; x > 385; x = x - 20)

    { this.Height = x; }

    chart1.Visible = false;

    }

    }
    /////////////////////////////////////Очищаем все поля

    private void очиститьToolStripMenuItem_Click(object sender, EventArgs e)

    {

    textBox1.Clear();

    textBox2.Clear();

    textBox3.Clear();

    textBox4.Clear();

    textBox5.Clear();

    textBox6.Clear();

    numericUpDown1.Value = 0;

    label8.Text = "Максимальное число: ";

    label9.Text = "Минимальное число: ";

    label10.Text = "Разность макс и мин: ";

    chart1.Series[0].Points.Clear();

    for (int y = 1000; y > 535; y = y - 20)

    {

    this.Width = y;

    Thread.Sleep(10);

    }

    for (int x = 620; x > 385; x = x - 20)

    { this.Height = x; }

    chart1.Visible = false;

    checkBox3.Checked = false;

    }

    }

    }


    написать администратору сайта