Практические задания в среде программирования Visual Studio Express C# 2012

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    182,89 Кб
  • Опубликовано:
    2015-05-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Практические задания в среде программирования Visual Studio Express C# 2012
















Практические задания в среде программирования Visual Studio Express C# 2012

Реферат

Ключевые слова: MICROSOFT VISUAL STUDIO, ЯЗЫК ПРОГРАММИРОВАНИЯ С#, ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ, СХЕМА АЛГОРИТМА, ФУНКЦИЯ, КЛАСС, WINDOWS FORMS APLICATION

Курсовая работа выполнена с целью решить практические задания в среде программирования Visual Studio Express C# 2012.

Данная курсовая работа состоит из практической части, в которой подробно описано решение задач.

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

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

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

В заключении подводятся итоги проделанной работы.

Оглавление

НОРМАТИВНЫЕ ССЫЛКИ

ВВЕДЕНИЕ

. ЗАДАНИЕ №1

.1 Формулировка задачи

.2 Спецификации задачи

.3 Математическая постановка задачи

.4 Описание вычислительных методов

.5 Схема алгоритма. Описание

.6 Текст программы

.7 Ручной подсчёт отладочного варианта

.8 Результат машинного тестирования программы

. ЗАДАНИЕ №2

.1 Формулировка задачи

.2 Спецификации задачи

.3 Математическая постановка задачи

.4 Схема алгоритма. Описание

.5 Текст программы

.6 Результат машинного тестирования программы

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЯ

НОРМАТИВНЫЕ ССЫЛКИ

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

ГОСТ 7.32-2001 «Отчет о научно-исследовательской работе. Структура и правила оформления».

ГОСТ 2.105-95 «Общие требования к текстовым документам»

ГОСТ Р 7.0.5-2008 «Библиографическая ссылка. Общие требования и правила составления»

ГОСТ 7.1-2003 «Библиографическая запись. Библиографическое описание. Общие требования и правила составления»

ГОСТ 7.80-2000. «Библиографическая запись. Заголовок. Общие требования и правила составления»

ГОСТ 19.701-80 - ЕСПД. Схемы алгоритмов, программ, данных и систем.

ВВЕДЕНИЕ


Класс является основой языка С#, так как все действия в любой программе на этом языке происходят внутри класса. Реализация механизма подпрограмм в C# возложена на функциональный член класса, который именуется методом и реализует вычисления или другие действия, выполняемые классом или экземпляром. Методы определяют поведение класса.

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

1. ЗАДАНИЕ №1

1.1 Формулировка задачи


Даны две функции: y=ax²+bx+c и z=x³+dx²+ex+f. Выяснить, в каких точках их графики пересекают оси OX и OY, а также пересекаются между собой (если пересекаются). Построить оба графика.

1.2 Спецификации задачи


Входные данные:

-       Коэффициенты a, b, с, d, e, f (Вводится с клавиатуры).

Выходные данные:

-       Значения точек, в которых графики пересекают оси оХ и оY, значение точки, где пересекаются сами графики. Графики функции.

1.3 Математическая постановка задачи


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

Общее описание алгоритма.

Таблица 1 - Характеристика переменных

Имя переменной

Смысл переменной

Назначение переменной

a

Коэффициент а

Исходная

b

Коэффициент b

Исходная

c

Коэффициент c

Исходная

d

Коэффициент d

Исходная

e

Коэффициент e

Исходная

f

Коэффициент f

x

Неизвестный параметр в уравнении

Промежуточная

l

Начало интервала

Промежуточная

r

Конец интервала

Промежуточная

v

Результат бинарного поиска

Промежуточная

sqrtD

Квадратный корень из дискриминанта

Промежуточная

s1,s2,s3

Массив точек пересечения графиков с осями и между собой

Результат


1.4 Описание вычислительных методов


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

 (1)

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

Зная границы монотонных интервалов, при помощи бинарного поиска ищется решение кубического уравнения.

1.5 Схема алгоритма. Описание


Программа состоит из следующих методов: btWork_Click - обрабатывает событие нажатия на кнопку, в котором выполняются следующие операции: ввод исходных данных (коэффициентов уравнений), построение графиков функций, расчет и вывод результатов пересечения графиков функций с осями ОХ, ОY, между собой. С помощью метода solve выполняется поиск списка корней кубического полинома. Метод binsearch с помощью бинарного поиска выполняет поиск корня на монотонном интервале квадратичного полинома. Метод f возвращает значение кубического полинома в точке.

Исходный программы код приведён в листинге 1

Схема алгоритма приведена в приложении А.

1.6 Текст программы


Код программы приведён в листинге 1.

Листинг 1 - Код программы к заданию 1

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;Task4

{partial class frMain : Form

{frMain()

{();

}

// Константы для бинпоиска.double minX = -1e4, maxX = 1e4;

// Значение кубического полинома в точке.

double f(double a, double b, double c, double d, double x)

{a * x * x * x + b * x * x + c * x + d * d;

}

// Поиск корня на монотонном интервале квадратичного полинома.

double binsearch(double a, double b, double c, double d, double l, double r)

{

// Если нуля нет,((f(a, b, c, d, l) > 0 && f(a, b, c, d, r) > 0) ||

(f(a, b, c, d, l) < 0 && f(a, b, c, d, r) < 0))

// вернем признак того, что корня нет.Double.NaN;

// Иначе, в цикле пока интервал не сузился до погрешности,(r - l > 1e-6)

{

// Берем середину интервала,m = (l + r) / 2;

// В зависимости от значения функции в точке, переносим границы поиска.

if (((f(a, b, c, d, m) > 0) && (f(a, b, c, d, l) > 0)) ||

((f(a, b, c, d, m) < 0) && (f(a, b, c, d, l) < 0)))

l = m;= m;

}

// Возвращаем ответ.l;

}

// Поиск списка корней кубического полинома.

List<double> solve(double a, double b, double c, double d)

{

// Ищем производную, берем дискриминант.

double A = a * 3, B = b * 2, C = c, D = B * B - 4 * A * C;

double x1, x2, v;<double> answer = new List<double>();

// Рассматриваем случай линейной функции.

if (Math.Abs(A) < 1e-9)

{

// Тогда интервала поиска два.

x1 = -C / B;

v = binsearch(a, b, c, d, x1, maxX);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9)).Add(v);answer;

}

// Если действительных корней у производной нет, ищем корни на всём интервале, т.к. функция монотонна.

if (D < 0)

{= binsearch(a, b, c, d, minX, maxX);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

else if (Math.Abs(D) < 1e-9)

{= -(B / 2 * A);

// Два интервала, на которые разбивает этот корень, ищем корень на обоих.

v = binsearch(a, b, c, d, minX, x1);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9)).Add(v);= binsearch(a, b, c, d, x1, maxX);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

}

{

// Случай различных корней.

double sqrtD = Math.Sqrt(d);= (-B + sqrtD) / (2 * A);= (-B - sqrtD) / (2 * A);

// Ищем на каждом из трёх отрезков.

v = binsearch(a, b, c, d, minX, x1);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9)).Add(v);= binsearch(a, b, c, d, x1, x2);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9)).Add(v);= binsearch(a, b, c, d, x2, maxX);(v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9)).Add(v);

}answer;

}void btWork_Click(object sender, EventArgs e)

{

// Считываем данные.A = Convert.ToDouble(tbA.Text),= Convert.ToDouble(tbB.Text),= Convert.ToDouble(tbC.Text),= Convert.ToDouble(tbD.Text),= Convert.ToDouble(tbE.Text),= Convert.ToDouble(tbF.Text);

// Рисуем график..Series[0].Points.Clear();.Series[1].Points.Clear();(double x = -1.9; x <= 2; x += 0.1)

{.Series[0].Points.AddXY(x, A * x * x + B * x + C);.Series[1].Points.AddXY(x, x * x * x + D * x * x + E * x + F);

}

// Выводим данные пользуясь описанными выше функциями.

List<double> s1, s2, s3;.Items.Clear();.Items.Add("Первая функция:");.Items.Add("OX:");= solve(0, A, B, C);(int i = 0; i < s1.Count; i++).Items.Add("(" + s1[i].ToString("f3") + "; " + f(0, A, B, C, s1[i]).ToString("f3") + ")");.Items.Add("OY:");.Items.Add("(" + 0.ToString("f3") + "; " + f(0, A, B, C, 0).ToString("f3") + ")");

lb.Items.Add("Вторая функция:");

lb.Items.Add("OX:");= solve(1, D, E, F);(int i = 0; i < s2.Count; i++).Items.Add("(" + s2[i].ToString("f3") + "; " + f(1, D, E, F, s2[i]).ToString("f3") + ")");.Items.Add("OY:");.Items.Add("(" + 0.ToString("f3") + "; " + f(1, D, E, F, 0).ToString("f3") + ")");

lb.Items.Add("Точки пересечения:");

s3 = solve(1, D - A, E - B, F - C);(int i = 0; i < s3.Count; i++).Items.Add("(" + s3[i].ToString("f3") + "; " + f(1, D - A, E - B, F - C, s3[i]).ToString("f3") + ")");

}

}

1.7 Ручной подсчёт отладочного варианта


Пусть задано кубическое уравнение следующего вида:

В данном уравнении:

, , ,

Приведем уравнение к каноническому виду. Делаем замену переменных, от переменной x переходим к переменной y через равенство:


Получим новое уравнение от переменной y:


где: ,

и

Определим еще одну переменную Q:

Число действительных корней кубического уравнения зависит от знака Q:> 0 - один действительный корень и два сопряженных комплексных корня.< 0 - три действительных корня.= 0 - один однократный действительный корень и два двукратных комплексных, или, если p = q = 0, то один трехкратный действительный корень.

По формуле Кардано, корни кубического уравнения в канонической форме равны:


где:

,

Применяя данные формулы, для одного из трёх значений α необходимо брать такое β, для которого выполняется условие αβ = - p / 3 (такое значение β всегда существует).

Рассмотрим все возможные значения α и β (кубический корень всегда дает 3 значения!):

Итак, берем первое значение α и подбираем к нему β. В результате перебора приходим к паре α1и β2

Записываем все 3 корня сразу для переменной x:

Полная запись:

Приближенное значение: , ,

Тогда пересечение с осью ОХ - -1, с осью ОY - -1³+(-1)²-1+1 = 0

1.8 Результат машинного тестирования программы


Результат работы программы показан на рисунке 1.

Рисунок 1 - Результат работы программы

2. ЗАДАНИЕ №2

 

.1 Формулировка задачи


Элементами динамического списка являются записи, в которых хранится информация о студентах ФКТАС: имя, фамилия, группа и оценки за последнюю сессию. Обеспечить ввод этих данных и разбить всех студентов в новые списки по группам, элементами которых являются записи с полями: группа, количество студентов в группе, массив с фамилиями студентов (отсортированный по алфавиту), средний балл группы за сессию. Найти лучшую по успеваемости группу.

2.2 Спецификации задачи


Входные данные:

-       имя,

-       фамилия,

-       группа,

-       оценки за последнюю сессию.

Выходные данные:

-       Группа;

-       Количество студентов;

-       Список студентов;

-       Средний балл группы,

-       Лучшая по успеваемости группа.

2.3 Математическая постановка задачи


В таблице 2 приведен ряд переменных, представляющих исходные данные и результаты работы программы. Этот ряд будет дополнен на стадии разработки алгоритма.

Таблица 2 - Характеристика переменных

Имя

Смысл переменной

Назначение

fname

Имя студента

Исходная

Строковый тип данных

lname

Фамилия студента

Исходная

Строковый тип данных

group

Группа

Исходная


mark

Оценка

Исходная

Целочисленный тип данных

students

Массив, хранящий информацию о студентах

Промежуточная


count

Число студентов в группе

Промежуточная


sum

Сумма оценок студентов в группе

Промежуточная


i

Счётчик цикла

Промежуточная


j

Счётчик цикла

Промежуточная



2.4 Схема алгоритма. Описание

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

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

Если на стадии ввода названия групп обнаружено, что такая группа уже содержится в списке, в ней происходит обновление данных.

Схема алгоритма приведена в приложении Б.

2.5 Текст программы


Т.к. текст программы занимает достаточно большой объём, он приведен в приложении В (листинг 2).

2.6 Результат машинного тестирования программы


Результат работы данной программы представлен на рисунке 2.

Рисунок 2 - Результат тестирования программы

ЗАКЛЮЧЕНИЕ


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

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

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ


1.      Павловская Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - СПб.: Питер, 2007. - 432 с.

.        Шилдт Г. C# 4.0: полное руководство. Пер. с англ. - М.: Вильямс, 2011.

.        Письменный Д. Т. Конспект лекций по высшей математике. Полный курс. - М.: Айрис-пресс, 2010. - 608 с.

ПРИЛОЖЕНИЯ

 

Приложение А


Блок-схема к заданию №1


Метод solve





Метод binarysearch



Приложение Б


Блок-схема к заданию №2


Приложение В


Листинг 2 - код программы к заданию 2

using System;System.Collections.Generic;System.Linq;System.Text;System.Threading.Tasks;Task2

{Program

{

// Класс для студента.

class Student

{

// Поля.string fname, lname, group;int mark;

// Ввод.void Input()

{.WriteLine("Введите имя: ");= Console.ReadLine();.WriteLine("Введите фамилию: ");= Console.ReadLine();.WriteLine("Введите группу: ");= Console.ReadLine();.WriteLine("Введите оценку: ");= Convert.ToInt32(Console.ReadLine());

}

}

// Класс группы.Group

{

// Поля.string name;int count, sum;List<string> students;

// Конструктор.Group()

{= new List<string>();

}

{++;.Add(a.lname);

sum += a.mark;

}

// Вычисление среднего арифметического по группе.

public double Average()

{(count == 0)-1;(double)sum / count;

}

// Вывод данных.void Output()

{.WriteLine("Название: " + name + ".");.WriteLine("Количество студентов: " + count + ".");.WriteLine("Список студентов: ");.Sort();(string student in students).WriteLine(student);.WriteLine("Средний бал: " + Average().ToString() + ".");.WriteLine();

}

}void Main(string[] args)

{

// Инициализация.<Student> stud = new List<Student>();

Console.WriteLine("Введите количество студентов: ");

int studCount = Convert.ToInt32(Console.ReadLine());

// Ввод всех студентов.(int i = 0; i < studCount; i++)

{t = new Student();.Input();

stud.Add(t);

}

// Заполнение групп.

List<Group> groups = new List<Group>();(int i = 0; i < studCount; i++)

{index = -1;

// Ищем существующую группу с таким названием.

for (int j = 0; j < groups.Count(); j++)(groups[j].name.Equals(stud[i].group))

index = j;

// Если не нашли,(index == -1)

{

// Создаем её и добавляем.

Group g = new Group();.name = stud[i].group;.Add(g);= groups.Count() - 1;

}

// Добавляем студента в эту группу.

groups[index].AddStudent(stud[i]);

}

// Выводим все группы.(int i = 0; i < groups.Count(); i++)

groups[i].Output();

// Ищем группу с наилучшей успеваемостью.

int mx = 0;(int i = 0; i < groups.Count(); i++)(groups[i].Average() > groups[mx].Average())

mx = i;

// Выводим..WriteLine("Лучшая группа по успеваемости:");

groups[mx].Output();.ReadKey();

}

}

Похожие работы на - Практические задания в среде программирования Visual Studio Express C# 2012

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!