Построить Графиу у(х). - C#
Формулировка задачи:
Найти наименьшее значение функции: y=sin(x)/1+x и значение аргумента,
при котором оно получено, если X изменяется от 0 до 10 с шагом 0,1.
Для найденного x подсчитать сумму членов ряда:z=1+x+(x^2/2!)+...(x^10/10!). Построить график y(x).
ПРОГРАММА НАПИСАНА, РАБОТАЕТ, РЕБЯТ, КАК ГРАФИК построить у(х).:?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
/*Найти наименьшее значение функции: y=sin(x)/1+x и значение аргумента,
при котором оно получено, если X изменяется от 0 до 10 с шагом 0,1.
Для найденного x подсчитать сумму членов ряда:z=1+x+(x^2/2!)+...(x^10/10!).*/
//считаем факториал
static double fact(double x)
{
double rezult = 1;
if (x == 0 || x == 1)
return rezult;
while (x > 1)
{
rezult *= x;
x--;
}
return rezult;
}
//функция для вычисления формулы
static double func(double x) //задаю имя функции
{
return Math.Sin(x) / (1 + x);
}
static void Main(string[] args)
{
double minElement = 0, tmp, z, minElementIndex = 0;
for (double i = 0; i <= 10; i += 0.1) // x
if ((tmp = func(i)) < minElement) // нахождения минимального элемента значения функции
{
minElement = tmp; // минимальное(наименьшее) знач Функции = минимальному элементу функции
minElementIndex = i; //позиция, на которой стоит минимальный элемент
}
Console.WriteLine("Минимальное значение функци = {0} при x {1}", minElement, minElementIndex);
// добавление по формуле еденицы
z = 1 + minElement;
for (int i = 2; i <= 10; i++)//сумма членов ряда
{
z = z + Math.Pow(minElement, i) / fact(i); //сумма ряда z
}
Console.WriteLine("Сумма ряда: " + z);
}
}
}Решение задачи: «Построить Графиу у(х).»
textual
Листинг программы
using System;
using System.Collections.Specialized;
using System.Globalization;
public class Tuple<T1, T2>
{
public T1 Item1 { get; set; }
public T2 Item2 { get; set; }
}
public Tuple
{
public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
{
return new Tuple<T1, T2> { Item1 = item1, Item2 = item2 };
}
}
class Program
{
delegate float f(float x);
static Tuple<float, float> yMinMax(f func, float xmin, float xmax, float step)
{
float min = func(xmin), max = func(xmin);
for (float x = xmin; x < xmax; x += step)
{
float cy = func(x);
if (cy < min) min = cy;
if (cy > max) max = cy;
}
return Tuple.Create(min, max);
}
static void SwapNumbers(ref float first, ref float second)
{
float tmp = first;
first = second;
second = tmp;
}
static float Distance(float v1, float v2)
{
return (float)Math.Abs(v1 - v2);
}
static bool IsOwned(float x, float min, float max)
{
return x >= min && x <= max;
}
static float Display(float x, float minA, float maxA, float minB, float maxB)
{
if (minA > maxA) SwapNumbers(ref minA, ref maxA);
if (minB > maxB) SwapNumbers(ref minB, ref maxB);
if (!IsOwned(x, minA, maxA)) return 0f; //throw new ArgumentOutOfRangeException();
float lenA = Distance(minA, maxA);
float lenB = Distance(minB, maxB);
float y = lenB * (x - minA) / lenA + minB;
return y;
}
static void build(f func, float xmin, float xmax, float step)
{
Tuple<float, float> ymm = yMinMax(func, xmin, xmax, step);
for (float x = xmin; x < xmax; x += step)
{
int cx = (int)Display(x, xmin, xmax, 1, 80);
float y = ymm.Item2 - func(x);
int cy = (int)Display(y, ymm.Item1, ymm.Item2, 1, 25);
Console.SetCursorPosition(cx, cy);
Console.Write('*');
}
}
static float f1(float x)
{
return (float)Math.Pow(2f, x);
}
static float f2(float x)
{
return (float)Math.Pow(0.5f, x);
}
static float f3(float x)
{
return (float)Math.Pow(4f, x);
}
static void Main(string[] args)
{
Console.WriteLine("Select function");
Console.WriteLine("1. y = 2^x");
Console.WriteLine("2. y = 0.5^x");
Console.WriteLine("3. y = 4^x");
Console.Write("Your choise: ");
string s = Console.ReadLine();
f function;
switch (s.Trim())
{
case "1": function = f1; break;
case "2": function = f2; break;
case "3": function = f3; break;
default: Console.WriteLine("Error: Wrong input!"); return;
}
Console.Write("Enter function step: ");
s = Console.ReadLine();
float step = 0f;
while (!float.TryParse(s, NumberStyles.Any, CultureInfo.CurrentCulture, out step))
{
Console.WriteLine("Error: Wrong input!");
Console.Write("Try again: ");
s = Console.ReadLine();
}
Console.Clear();
build(function, -3f, 3f, step);
Console.ReadKey();
}
}