Практические задания в среде программирования Visual Studio Express C# 2012
Программа состоит из следующих методов: btWork_Click — обрабатывает событие нажатия на кнопку, в котором выполняются следующие операции: ввод исходных данных (коэффициентов уравнений), построение графиков функций, расчет и вывод результатов пересечения графиков функций с осями ОХ, ОY, между собой. С помощью метода solve выполняется поиск списка корней кубического полинома. Метод binsearch… Читать ещё >
Практические задания в среде программирования Visual Studio Express C# 2012 (реферат, курсовая, диплом, контрольная)
Практические задания в среде программирования 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)
// Поиск списка корней кубического полинома.
List 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 answer = new List ();
// Рассматриваем случай линейной функции.
if (Math.Abs (A) < 1e-9)
// Тогда интервала поиска два.
x1 = -C / B;
v = binsearch (a, b, c, d, x1, maxX);
if (v ≠ Double. NaN && (answer.Count == 0
// Если действительных корней у производной нет, ищем корни на всём интервале, т.к. функция монотонна.
if (D < 0)
v = binsearch (a, b, c, d, minX, maxX);
if (v ≠ Double. NaN && (answer.Count == 0
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 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 students;
// Конструктор.
public Group ()
{
students = new List ();
}
// Добавка студента в группу.
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 stud = new List ();
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 groups = new List ();
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 ();
}
}