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

Изучение классов и методов языка программирования C#. Реализация программирования математических задач. Поиск корня на монотонном интервале квадратичного полинома. Ручной подсчёт отладочного варианта. Заполнение массива, хранящего информацию о студентах.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 27.02.2015
Размер файла 752,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

Реферат

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

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

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

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

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

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

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

Оглавление

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

ВВЕДЕНИЕ

1. ЗАДАНИЕ №1

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

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

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

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

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

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

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

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

2. ЗАДАНИЕ №2

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

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

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

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

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

2.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;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Task4

{

public partial class frMain : Form

{

public frMain()

{

InitializeComponent();

}

// Константы для бинпоиска.

const double minX = -1e4, maxX = 1e4;

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

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

{

return 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)

{

// Если нуля нет,

if ((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))

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

return Double.NaN;

// Иначе, в цикле пока интервал не сузился до погрешности,

while (r - l > 1e-6)

{

// Берем середину интервала,

double 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;

else

r = m;

}

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

return 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;

List<double> answer = new List<double>();

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

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

{

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

x1 = -C / B;

v = binsearch(a, b, c, d, x1, maxX);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

return answer;

}

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

if (D < 0)

{

v = binsearch(a, b, c, d, minX, maxX);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

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

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

{

x1 = -(B / 2 * A);

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

v = binsearch(a, b, c, d, minX, x1);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

v = binsearch(a, b, c, d, x1, maxX);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

}

else

{

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

double sqrtD = Math.Sqrt(d);

x1 = (-B + sqrtD) / (2 * A);

x2 = (-B - sqrtD) / (2 * A);

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

v = binsearch(a, b, c, d, minX, x1);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

v = binsearch(a, b, c, d, x1, x2);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

v = binsearch(a, b, c, d, x2, maxX);

if (v != Double.NaN && (answer.Count == 0 || Math.Abs(answer.Last() - v) > 1e-9))

answer.Add(v);

}

return answer;

}

private void btWork_Click(object sender, EventArgs e)

{

// Считываем данные.

double A = Convert.ToDouble(tbA.Text),

B = Convert.ToDouble(tbB.Text),

C = Convert.ToDouble(tbC.Text),

D = Convert.ToDouble(tbD.Text),

E = Convert.ToDouble(tbE.Text),

F = Convert.ToDouble(tbF.Text);

// Рисуем график.

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

ch.Series[1].Points.Clear();

for (double x = -1.9; x <= 2; x += 0.1)

{

ch.Series[0].Points.AddXY(x, A * x * x + B * x + C);

ch.Series[1].Points.AddXY(x, x * x * x + D * x * x + E * x + F);

}

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

List<double> s1, s2, s3;

lb.Items.Clear();

lb.Items.Add("Первая функция:");

lb.Items.Add("OX:");

s1 = solve(0, A, B, C);

for (int i = 0; i < s1.Count; i++)

lb.Items.Add("(" + s1[i].ToString("f3") + "; " + f(0, A, B, C, s1[i]).ToString("f3") + ")");

lb.Items.Add("OY:");

lb.Items.Add("(" + 0.ToString("f3") + "; " + f(0, A, B, C, 0).ToString("f3") + ")");

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

lb.Items.Add("OX:");

s2 = solve(1, D, E, F);

for (int i = 0; i < s2.Count; i++)

lb.Items.Add("(" + s2[i].ToString("f3") + "; " + f(1, D, E, F, s2[i]).ToString("f3") + ")");

lb.Items.Add("OY:");

lb.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);

for (int i = 0; i < s3.Count; i++)

lb.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:

Q > 0 - один действительный корень и два сопряженных комплексных корня.

Q < 0 - три действительных корня.

Q = 0 - один однократный действительный корень и два двукратных комплексных, или, если p = q = 0, то один трехкратный действительный корень.

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

где:

,

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

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

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

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

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

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

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

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

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

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

2. ЗАДАНИЕ №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 с.

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

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

ПРИЛОЖЕНИЯ

Приложение А

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

Метод solve

Метод binarysearch

Приложение Б

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

Приложение В

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Task2

{

class Program

{

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

class Student

{

// Поля.

public string fname, lname, group;

public int mark;

// Ввод.

public void Input()

{

Console.WriteLine("Введите имя: ");

fname = Console.ReadLine();

Console.WriteLine("Введите фамилию: ");

lname = Console.ReadLine();

Console.WriteLine("Введите группу: ");

group = Console.ReadLine();

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

mark = Convert.ToInt32(Console.ReadLine());

}

}

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

class Group

{

// Поля.

public string name;

public int count, sum;

public List<string> students;

// Конструктор.

public Group()

{

students = new List<string>();

}

// Добавка студента в группу.

public void AddStudent(Student a)

{

count++;

students.Add(a.lname);

sum += a.mark;

}

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

public double Average()

{

if (count == 0)

return -1;

return (double)sum / count;

}

// Вывод данных.

public void Output()

{

Console.WriteLine("Название: " + name + ".");

Console.WriteLine("Количество студентов: " + count + ".");

Console.WriteLine("Список студентов: ");

students.Sort();

foreach (string student in students)

Console.WriteLine(student);

Console.WriteLine("Средний бал: " + Average().ToString() + ".");

Console.WriteLine();

}

}

static void Main(string[] args)

{

// Инициализация.

List<Student> stud = new List<Student>();

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

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

// Ввод всех студентов.

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

{

Student t = new Student();

t.Input();

stud.Add(t);

}

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

List<Group> groups = new List<Group>();

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

{

int index = -1;

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

for (int j = 0; j < groups.Count(); j++)

if (groups[j].name.Equals(stud[i].group))

index = j;

// Если не нашли,

if (index == -1)

{

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

Group g = new Group();

g.name = stud[i].group;

groups.Add(g);

index = groups.Count() - 1;

}

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

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

}

// Выводим все группы.

for (int i = 0; i < groups.Count(); i++)

groups[i].Output();

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

int mx = 0;

for (int i = 0; i < groups.Count(); i++)

if (groups[i].Average() > groups[mx].Average())

mx = i;

// Выводим.

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

groups[mx].Output();

Console.ReadKey();

}

}

Размещено на Allbest.ru


Подобные документы

  • Понятие математического программирования. Класс как тип структуры, позволяющий включать в описание типа не только элементы данных, но и функции. Рассмотрение основных особенности языка программирования C++. Характеристика среды MS Visual Studio 2008.

    контрольная работа [318,0 K], добавлен 13.01.2013

  • Решение задач нелинейного программирования различными методами для проведения анализа поведения этих методов на выбранных математических моделях. Компьютерная реализация выбранных задач нелинейного программирования в среде пакетов Excel и Matlab.

    дипломная работа [2,9 M], добавлен 25.01.2013

  • Разработка на языке программирования C# в среде Microsoft Visual Studio 2010 на базе Microsoft NET Framework 4 (4.5) программного средства, реализующего компилятор модельного языка программирования. Лексический, синтаксический и семантический анализатор.

    курсовая работа [1,3 M], добавлен 24.06.2013

  • Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.

    курсовая работа [585,5 K], добавлен 24.03.2009

  • Обоснование выбора средства программирования. Входная и выходная информация. Основные требования к программному и аппаратному обеспечению. Анализ метода поиска в строке по алгоритму Боуера-Мура. Глобальные переменные и константы в среде Visual Studio.

    курсовая работа [489,0 K], добавлен 01.07.2015

  • Разработка учебного транслятора на языке программирования C# в среде объектно-ориентированного программирования Visual Studio 2012. Выделение лексем и построение цепочки символов на этапе синтаксического анализа. Функциональное тестирование программы.

    курсовая работа [406,8 K], добавлен 07.08.2013

  • Понятие матриц и операции, выполняемые с ними. Разработка программы для вычислений над матрицами в среде MS Visual Studio Express с применением языка программирования C++. Работа с библиотекой математического типа vector. Реализация перегрузки операций.

    курсовая работа [107,3 K], добавлен 22.12.2010

  • Графические обозначения символов, применяемые при составлении схем алгоритмов. Оформление текстовых документов. Описание вычислительных методов алгоритмизации и программирования задач. Ручной просчет отладочного варианта. Машинное тестирование программы.

    курсовая работа [178,2 K], добавлен 01.06.2014

  • Язык программирования Visual Basic: краткая история возникновения, значение и общая характеристика. Изучение основных свойств Visual Basic, синтаксис языка. Обзор ключевых операторов Visual Basic, пользовательские процедуры и функции данного языка.

    контрольная работа [36,4 K], добавлен 23.07.2014

  • Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.

    курсовая работа [738,1 K], добавлен 17.05.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.