Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП1.doc
Скачиваний:
13
Добавлен:
08.11.2019
Размер:
731.65 Кб
Скачать

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

AutoShape 10

AutoShape 20 AutoShape 52

AutoShape 44 AutoShape 45 AutoShape 271

AutoShape 11

AutoShape 21

AutoShape 12

Да

AutoShape 28 Прямая соединительная линия 251

AutoShape 37

Нет

Да

AutoShape 13

Прямая соединительная линия 5

AutoShape 38

Нет

AutoShape 15

Да

Нет

Прямая соединительная линия 2

AutoShape 14 AutoShape 39

Да

AutoShape 43

Нет

AutoShape 41

Да

AutoShape 35

AutoShape 103

AutoShape 71

AutoShape 63

AutoShape 272

AutoShape 50 AutoShape 106 AutoShape 115 AutoShape 116 AutoShape 117 AutoShape 273

Да

AutoShape 113

Нет

AutoShape 102 AutoShape 108

Нет

AutoShape 114

Да

Да

AutoShape 65 AutoShape 118

Group 132

Нет

AutoShape 56 AutoShape 119

Да

Нет

AutoShape 58 AutoShape 120

Да

Нет

AutoShape 60 AutoShape 121

Да

Нет

AutoShape 62 AutoShape 122

Да

Нет

AutoShape 100

AutoShape 146

Да

AutoShape 207 AutoShape 209

Нет

AutoShape 275

Group 149 AutoShape 277

AutoShape 166

AutoShape 164

Да

AutoShape 208 AutoShape 268 AutoShape 269

Нет

AutoShape 174 AutoShape 178 AutoShape 179

Нет

Да

AutoShape 175 AutoShape 176

AutoShape 177

AutoShape 191 AutoShape 192

AutoShape 193 AutoShape 195

AutoShape 197

Group 198

ConsoleKey.Escape

AutoShape 267

AutoShape 245

AutoShape 247

AutoShape 212

Да

AutoShape 274 AutoShape 326

Нет

AutoShape 324

AutoShape 325

Xn < - sum

AutoShape 265

AutoShape 237

Конец интервала Xk: "

Err=true

AutoShape 234

AutoShape 233

AutoShape 235

AutoShape 317 AutoShape 318 AutoShape 319

AutoShape 238

Да

AutoShape 315

AutoShape 316

Нет

AutoShape 241

ЭКРАННЫЕ ФОРМЫ

ПРИЛОЖЕНИЕ В

Рисунок В.1 – Стартовое меню

Рисунок В.2 – Результат выполнения задания 1

Рисунок В.3 – Результат выполнения задания 2

Рисунок В.4 – Результат выполнения задания 3