4.5 Тестовый пример
Для проверки правильности работы и функционирования программы был подготовлен тестовый пример.
Задание 1
На участке от -7 до -6 функция задана уравнением прямой у=2.
На участке от -6 до -2 функция задана прямой y=0.25х+0.5.
На участке от -2 до 0 функция задана уравнением окружности y= .
На участке от 0 до 2 функция задана уравнением окружности y=√(2-(х-0)2
На участке от 2 до 3 функция задана прямой y=-х+2
Задание 2
Пусть R=3, координаты выстрела x=1, y=2. При таких значениях выстрел не попадает в закрашенную область мишени, следовательно результатом работы программы должно быть значение «Выстрел не попал в мишень».
Пусть R= 3,координаты выстрела x=-1, y=0,5. При таких значениях выстрел попадает в закрашенную область мишени, следовательно результатом работы программы должно быть значение «Выстрел попал в мишень!».
Задание 3
Для проверки правильности вычислений значения функции, заданной с помощью ряда Тейлора, вручную рассчитываем значение arctg. Возьмем интервал от -4 до -2, шаг равный 1 и посчитаем соответствующие значения арктангенса:
При X=-2,y=-0.1: arctg =0.3
При X=-3,y=0: arctg=0.2
При X=-4, y=0: arctg=0,2
Если результаты работы программы совпали с контрольными, это значит что программа работает верно, и техническое задание выполнено в полном объёме.
Вывод
В соответствии с полученными данными работы программы и результатами тестового примера, можно сделать вывод, что разработанная программа работает верно.
ЛИСТИНГ ПРОГРАММЫ
ПРИЛОЖЕНИЕ А
(обязательное)
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpLab1
{
class Lab1
{ //Функция для ввода числа с клавиатуры
public static double InputDouble(string s)
{
bool err;
double d;
do
{
err = false;
Console.Write(s);
try
{
d = Convert.ToDouble(Console.ReadLine());
}
catch (Exception e)
{//Ошибка при вводе
Console.WriteLine(e.Message);
d = 0;
err = true;
}
}
while (err);
return d;
}
//График
public static void graph()
{
double y = 0, Step;
bool err = false;
do
{
Console.Clear();
do
{
Step = InputDouble("Задайте велечину шага: ");
if (Step <= 0)
{
err = true;
Console.WriteLine("Величина шага должна быть > 0");
}
else err = false;
}
while (err);
Console.WriteLine("|------------------|");
Console.WriteLine("| Таблица значений |");
Console.WriteLine("| x | y |");
Console.WriteLine("|-------|----------|");
for (double i = -6; i <= 3; i += Step)
{
if (i < 0) Console.Write("| {0:0.0} |", i);
else Console.Write("| {0:0.0} |", i);
if (i <= -2) y = Math.Round(0.25 * i + 0.5, 2);
if (i > -2 && i <= 0) y = Math.Round(-Math.Sqrt(4 - (i + 2) * (i + 2)) + 2, 2);
if (i > 0 && i <= 2) y = Math.Round(Math.Sqrt(4 - i * i), 2);
if (i > 2 && i <= 3) y = Math.Round(-1 * i + 2, 2);
if (y < 0) Console.WriteLine(" {0:0.0} |", y);
else Console.WriteLine(" {0:0.0} |", y);
}
Console.WriteLine("|-------------------|\n");
Console.WriteLine("Нажмите Esc чтобы выйти в меню, и любую другую клавишу чтобы продолжить.");
}
while (Console.ReadKey().Key != ConsoleKey.Escape);
}
//Стрельба по мишени
public static void mish()
{
double x = 0, y = 0, r = 0;
bool err;
ConsoleKeyInfo k;
Console.Clear();
do
{
r = InputDouble("Введите радиус мишени R: ");
if (r <= 0)
{
err = true;
Console.WriteLine("Радиус должен быть > 0");
}
else err = false;
}
while (err);
do
{
x = InputDouble("Введите координаты выстрела\nX: ");
y = InputDouble("Y: ");
//Проверка уславий попадания в мишень
if ((y >= 0 && y <= r && x >= -r && x <= 0 && (x + r) * (x + r) + (y - r) * (y - r) >= r * r) ||
(x >= 0 && x <= r && y <= 0 && y >= -r && (x - r) * (x - r) + (y + r) * (y + r) >= r * r))
{
Console.WriteLine("Выстрел попал в мишень\n");
}
else
{
Console.WriteLine("Выстрел не попал в мишень\n");
}
Console.WriteLine("Для выхода в меню нажмите Esc.\nДля продолжения - любую другую клавишу.");
k = Console.ReadKey();
Console.Clear();
}
while (k.Key != ConsoleKey.Escape);
}
//Ряд Тейлора
public static void telor()
{
double xn = 0, xk = 0, dx = 0, eps = 0;
bool err;
do
{
Console.Clear();
do
{
xn = InputDouble("Введите\nНачало интервала Xn: ");
if (xn < -9 || xn >= -1)
{
err = true;
Console.WriteLine("Xn должн быть -9 <= Xn < -1");
}
else err = false;
}
while (err);
do
{
xk = InputDouble("Конец интервала Xk: ");
if (xk < -9 || xk >= -1 || xk <= xn)
{
err = true;
Console.WriteLine("Xk должн быть -9 <= Xk < -1 и Xk > Xn");
}
else err = false;
}
while (err);
do
{
dx = InputDouble("Шаг Dx: ");
if (dx <= 0)
{
err = true;
Console.WriteLine("Величина шага должна быть > 0");
}
else err = false;
}
while (err);
do
{
eps = InputDouble("Точность e: ");
if (eps <= 0)
{
err = true;
Console.WriteLine("Точность должна быть > 0");
}
else err = false;
}
while (err);
Console.WriteLine("\n----------------------------------");
Console.WriteLine("| x | y | n |");
Console.WriteLine("----------------------------------");
for (double x = xn; x <= xk; x += dx)
{
double sum = 0, p = x, n = 2;
//Вычисление суммы для текущего значения X
while (Math.Abs(p) >= eps)
{
p = Math.Pow(-1, n + 1) / ((2 * n + 1) * Math.Pow(x, 2 * n + 1));
sum += p;
n++;
if (n > 99) break;
}
sum = -sum;
n--;
if (x < 0) Console.Write("| {0:0.00} |", x);
else Console.Write("| {0:0.00} |", x);
if (sum < 0) Console.Write(" {0:0.00} |", sum);
else Console.Write(" {0:0.00} |", sum);
Console.WriteLine(" {0:00} |", n);
}
Console.WriteLine("----------------------------------\n");
Console.WriteLine("Для выхода в меню нажмите Esc.\nДля продолжения - любую другую клавишу.");
}
while (Console.ReadKey().Key != ConsoleKey.Escape);
}
static void Main(string[] args)
{
System.ConsoleKeyInfo key;
do
{
Console.Clear();
Console.WriteLine("Лабораторная работа №1\n" +
"\nВведите номер действия:\n" +
"1 - Задание 1. Таблица значений функции;\n" +
"2 - Задание 2. Серия выстрелов по мишени;\n" +
"3 - Задание 3. Ряд Тейлора;\n" +
"4 - Выйти из программы.");
//Ожидание нажатия клавиши
key = Console.ReadKey();
switch (key.KeyChar)
{
case '1':
{
Lab1.graph();//График
break;
}
case '2':
{
Lab1.mish();//Стрельба по мишени
break;
}
case '3':
{
Lab1.telor();//Ряд Тейлора
break;
}
case '4': return;
case (char)27: return;
default:
{
Console.WriteLine("\nНеверный ввод!\nДля продолжения нажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
break;
}
}
}
while (true);
}
}
}
БЛОК-СХЕМА АЛГОРИТМА ПРОГРАММЫ
ПРИЛОЖЕНИЕ Б
(обязательное)
Метод Main
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Да
Нет
Нет
Да
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Нет
Да
ConsoleKey.Escape
Да
Нет
Xn < - sum
Конец интервала Xk: "
Err=true
Да
Нет
ЭКРАННЫЕ ФОРМЫ
ПРИЛОЖЕНИЕ В
Рисунок В.1 – Стартовое меню
Рисунок В.2 – Результат выполнения задания 1
Рисунок В.3 – Результат выполнения задания 2
Рисунок В.4 – Результат выполнения задания 3