Поволжский Государственный Университет Телекоммуникаций и Информатики
Кафедра «ПОУТС»

Сдана на проверку

«___» ________ 2013 г.

Допустить к защите

«___» ________ 2013 г.

Защищена с оценкой

«___» ________ 2013 г.

КУРСОВАЯ РАБОТА По дисциплине: «Программирование»
На тему: «Демонстрационная программа»

Пояснительная записка

Студент группы ОО-21 _________

(роспись) (ФИО)

Руководитель ______________ к. э.н.

(роспись) (ФИО)

_____________

(№ зачетной книжки)

Самара, 2013


Рецензия

Демонстрационная программа

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

Реферат

Курсовая работа.

Пояснительная записка: 13 с., 5 рис., 0 табл., 1 прил., 4 источника.

ЦИФРОВОЙ СЧЕТЧИК, ФАКТОРИАЛ

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

Язык программирования: С#, .NET Framework 4.0.

Операционная система: Microsoft Windows XP, 7.

Содержание

Реферат. 4

Содержание. 5

Обоснование и выбор методов решения. 5

Описание программы.. 6

Общие сведения. 6

Функциональное назначение. 7

Описание логической структуры программы.. 7

Структура файлов. 8

Структура классов. 8

Методы и поля. 9

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

Список используемых источников. 10

ПРИЛОЖЕНИЕ.. 11

Обоснование и выбор методов решения

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

НЕ нашли? Не то? Что вы ищете?

Целью работы является разработка пользовательского приложения для подсчета цифр в строке и вычисления факториалов в заданном диапазоне.

Для решения поставленной задачи спроектировано пользовательское приложение, обеспечивающее ввод и вывод данных.

Для вычисления факториала разработан метод на основе рекурсивного алгоритма:
n! = n*(n-1)!

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

Метод P (процедура или функция) называется рекурсивным, если при выполнении тела метода происходит вызов самого себя (метода P).

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

Подсчет количества цифр осуществляется посимвольным просмотром строки. Чтобы определить, является ли текущий символ десятичной цифрой, используется статический метод IsDigit класса Char.

С точки зрения регулярного программирования строковый тип данных string относится к числу самых важных в С#. Этот тип определяет и поддерживает символьные строки. В целом ряде других языков программирования строка представляет собой массив символов. А в С# строки являются объектами. Следовательно, тип string относится к числу ссылочных.

В C# есть символьный класс char, основанный на классе System. Char и использующий двухбайтную кодировку Unicode представления символов. Для этого типа в языке определены символьные константы - символьные литералы. Константу можно задавать:

·  символом, заключенным в одинарные кавычки;

·  escape-последовательностью;

·  Unicode-последовательностью, задающей Unicode код символа.

Большинство статических методов перегружены. Они могут применяться как к отдельному символу, так и к строке, для которой указывается номер символа для применения метода.

В языке C# определен класс char[], и его можно использовать для представления строк постоянной длины, как это делается в С++. Более того, поскольку массивы в C# динамические, расширяется класс задач, в которых можно использовать массивы символов для представления строк.

Описание программы

Общие сведения

Приложение, исполняемый файл. Установка не требуется.

Необходимые требования: MS Windows XP/Vista/7.

Язык программирования: C#.

Платформа Framework 4.0.

Среда разработки: Microsoft Visual С# 2010.

Объем программы: 8,7 КБ (исполняемый файл и библиотека).

Объем проекта: 336 КБ (вместе с исходным кодом).

Исходный код (классы и код форм): 126 строк.

Функциональное назначение

Приложение обеспечивает подсчет количества цифр в строке и вычисление факториала на основе введенной пользователем информации.

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

Общая схема работы программы представлена на рис. 1.

Рис 1. Общая схема работы программы.

На рис. 2 приведен основной алгоритм работы по рекурсивному вычислению факториала числа.

Рис. 2. Блок-схема рекурсивного алгоритма по вычислению факториала.

Структура файлов

Разработанное решение реализовано в двух проектах (см. рис. 3): Functions и WindowsTest. Проект Functions реализует библиотеку с основными функциями программы. Файл DigitCounter. cs содержит классы Count и DigitCount, файл Factorial. cs содержит интерфейс ICalculable и класс Factorial.

Проект WindowsTest представляет собой приложение Windows Forms, обеспечивающее пользовательский интерфейс к разработанным классам. Содержит одну форму (Form1.cs).

Рис 3. Файловая структура приложения.

Структура классов

Ядро приложения состоит из трех классов (см. рис. 4).

Класс DigitCount предназначен для подсчета цифр в строке, наследует абстрактный класс Count.

Класс Factorial предназначен для вычисления факториала, наследует интерфейс ICalculable.

Рис 4. Диаграмма классов приложения.

Методы и поля

Класс Form1 (Form1.cs) – класс реализации формы пользовательского приложения.

·  private void bCountDigit_Click(object sender, EventArgs e) – обработчик нажатия на кнопку Найти цифры;

·  private void bFactorial_Click(object sender, EventArgs e) – обработчик нажатия на кнопку Факториал.

Класс Count () – абстрактный класс счетчика.

·  public abstract int Increase() – абстрактный метод увеличения счетчика.

Класс DigitCount : Count – класс счетчика цифр в строке.

·  int cnt – поле счетчика;

·  public override int Increase() – увеличивает счетчик cnt на 1 и возвращает это значение;

·  public static int NumberOfDigits(string theString) - статический метод вычисления числа цифр для строкового параметра theString.

Интерфейс ICalculabe – интерфейс вычисления значений математических функций.

·  int x – свойство переменной x.

Класс Factorial : ICalculabe – класс расчета факториала.

·  private int _x – закрытое поле для хранения значения переменной x;

·  private int _y – закрытое поля для хранение значения переменной y;

·  public int x – реализация свойства переменной x;

·  public static int Calc(int i) - статический метод вычисления факториала для целочисленного входного параметра i.

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

Приложение позволяет пользователю рассчитывать число цифр в строке и вычислять факториал. Основная форма приложения представлена на рис. 5.

Рис 5. Интерфейс пользовательского приложения.

Для того чтобы определить число цифр в строке необходимо ввести строку в поле Введите строку и нажать кнопку Найти цифры. В поле Результат запишется искомое число цифр. Например, для строки «2012 год» результатом будет «Цифр в строке:4».

Для того чтобы вычислить факториал числа необходимо ввести это число в поле Введите число и нажать кнопку Факториал. В поле Результат запишется искомое значение факториала. Например, для значения «10» результатом будет «10!=3628800».

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

·  Значение х должно быть целое положительное от 0 до 16 – пользователь ввел данные для вычисления факториала за пределами допустимого диапазона.

·  Неверные данные – пользователь ввел неверные данные (не являющиеся целым числом).

Список используемых источников

1.  CLR via C#. Программирование на платформе Framework 2.0 на языке C#. – СПб.: Питер, Русская Редакция, 2007. – 656 с.

2.  Язык программирования C# и платформа. NET 4. – М.: Вильямс, 2010. – 1392 с.

3.  C# 4.0 полное руководство. – М.: Вильямс, 2011. – 1056 с.

4.  Libraries Sample in C# for Visual Studio 2008 [Электронный ресурс]. Режим доступа: http://code. msdn. /Libraries-Sample-6026fa61 - Загл. с экрана.

ПРИЛОЖЕНИЕ


Листинг файла DigitCounter. cs

//Copyright (C) Microsoft Corporation. All rights reserved.

// DigitCounter. cs

// compile with: /target:library

using System;

namespace Functions

{

public abstract class Count

{

public abstract int Increase();

}

public class DigitCount:Count

{

int cnt;

public override int Increase()

{

return ++cnt;

}

/// <summary>

/// Статический метод вычисления числа цифр для строкового параметра

/// </summary>

/// <param name="theString">Исходная строка</param>

/// <returns></returns>

public static int NumberOfDigits(string theString)

{

int count = 0;

for ( int i = 0; i < theString. Length; i++ )

{

if ( Char. IsDigit(theString[i]) )

{

count++;

}

}

return count;

}

}

}

Листинг файла Factorial. cs

//Copyright (C) Microsoft Corporation. All rights reserved.

// Factorial. cs

// compile with: /target:library

using System;

namespace Functions

{

interface ICalculable

{

int x

{

get;

set;

}

}

public class Factorial:ICalculable

{

private int _x;

private int _y;

public int x

{

get

{

return _x;

}

set

{

_x = value;

}

}

/// <summary>

/// Статический метод вычисления факториала для целочисленного входного параметра

/// </summary>

/// <param name="i">Целое число (от 0 до 16), факториал которого необходимо рассчитать.</param>

/// <returns></returns>

public static int Calc(int i)

{

return((i <= 1) ? 1 : (i * Calc(i-1)));

}

}

}

Листинг файла Form1.cs

using System;

using System. Collections. Generic;

using ponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

using Functions;

namespace WindowsTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void bCountDigit_Click(object sender, EventArgs e)

{

//Вызов статического метода NumberOfDigits для класса Functions. DigitCount

textBox3.Text="Цифр в строке:"+DigitCount. NumberOfDigits(textBox1.Text);

}

private void bFactorial_Click(object sender, EventArgs e)

{

try

{

int x=Convert. ToInt32(textBox2.Text);

if ((x >= 0) && (x <=16))

{

//Вызов статического метода Calc для класса Functions. Factorial

textBox3.Text = textBox2.Text + "!=" + Factorial. Calc(x);

}

else

{

MessageBox. Show("Значение х должно быть целое положительное от 0 до 16.");

}

}

catch (Exception)

{

MessageBox. Show("Неверные данные.");

}

}

}

}