Поволжский Государственный Университет Телекоммуникаций и Информатики
КУРСОВАЯ РАБОТА По дисциплине: «Программирование»
Самара, 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("Неверные данные.");
}
}
}
}


