- •Цикл предусловием while
- •Цикл с постусловием do…while
- •Цикл с параметром for
- •Цикл перебора foreach
- •Рекомендации по выбору цикла
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Порядок выполнения лабораторной работы
- •Задания к лабораторной работе.
- •Пример решения варианта 0.
- •Листинг 2.5 – Задание 1.
- •Листинг 2.7 – Задание 2
Пример решения варианта 0.
Задание 1.
Математическая модель
Определимся с функцией на каждом из участков:
UML
Рисунок 2.6 – UML диаграмма к заданию 1
Листинг 2.5 – Задание 1.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Лабораторная работа №2");
Console.WriteLine("Выполнил студент группы БАС-091");
Console.WriteLine("Хохлов Илья\n");
Console.WriteLine("Задание №1");
Console.WriteLine("Вычислить и вывести на экран в виде таблицы значения функции, заданной графически на интервале xнач до xкон c шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком и шапкой.");
int xn = -9, xk = 9, dx = 2, R = 3;
Console.WriteLine("| x | y |");
for (int x = xn; x <= xk; x += dx)
{
double y;
if (x >= -9 && x <= -6)
y = -Math.Sqrt(R * R - Math.Pow(x + 6.0, 2.0));
else if (x > -6 && x <= -3)
y = x + 3;
else if (x > -3 && x <= 0)
y = Math.Sqrt(R * R - x * x + 0.0);
else if (x > 0 && x <= 3)
y = -x + 3;
else
y = (x - 3) / 2.0;
Console.WriteLine("| {0,5} | {1,5:F2} |", x, y);
}
}
}
}
Результат (скриншот)
Рисунок 2.7 – Результат выполнения задания 1
Анализ
Интервал и шаг были выбраны таким образом, чтобы рассмотреть все ветви программы.
Задание 2.
Математическая модель
В теоретической части было дано подробное описание решения данной задачи. В листинге 2.7 приведен пример решения.
UML
Рисунок 2.8 – UML диаграмма к заданию 2
Листинг 2.7 – Задание 2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Лабораторная работа №2");
Console.WriteLine("Выполнил студент группы БАС-091");
Console.WriteLine("Хохлов Илья\n");
Console.WriteLine("Задание №2");
Console.WriteLine("Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале xнач до xкон c шагом dx и точностью ε. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значения аргумента, значение функции и количество просуммированных элементов ряда.\n");
const double MaxIter = 50;
double e; // точность
Console.WriteLine("Введите x_начальное( |x| > 1 ):");
string buf = Console.ReadLine();
double xn = Convert.ToDouble(buf);
Console.WriteLine("Введите x_конечное( |x| > 1 ):");
buf = Console.ReadLine();
double xk = Convert.ToDouble(buf);
Console.WriteLine("Введите точность:");
buf = Console.ReadLine();
e = Convert.ToDouble(buf);
Console.WriteLine("Введите шаг:");
buf = Console.ReadLine();
double dx = Convert.ToDouble(buf);
Console.WriteLine("Таблица значения функции, заданной с помощью ряда Тейлора");
Console.WriteLine("| X | Y | Iter |");
for (; xn < xk; xn += dx)
{
bool done = true;
int cnt = 0;
double tmp = 1.0, y = 0.0;
for (int n = 1; Math.Abs(tmp) > e; n += 2, cnt++)
{
tmp = 2.0 * (1.0 / (n * Math.Pow(xn, (double)n)));
y += tmp;
if (cnt <= MaxIter)
continue;
done = false;
break;
}
if (done)
Console.WriteLine("| {0,6:F3} | {1,6:F3} | {2,4} |", xn, y, cnt);
else
Console.WriteLine("| {0,6:F3} | Ряд не сошелся|", xn);
}
}
}
}
Результат (скриншот)
Рисунок 2.9 – Результат выполнения задания 2
Анализ
Необходимо заметить, что на x накладываются ограничения. При не соблюдении этих ограничений будет выведено сообщение о не сходимости ряда в этой точке. При соблюдении ограничений, считается корректный ответ.