Witam, napisałem poniższy program do liczenia sumy szeregu funkcyjnego. Skorzystałem z do...while i ConsoleKeyInfo, żeby zakończyć po naciśnięciu klawisza "x" przez użytkownika, ale nic takiego się nie dzieje i program działa w kółko niezależnie.
Prosiłbym o wskazanie błędu lub podpowiedzi, czy jest inna "metoda" na to co chciałbym osiągnąć.
- Problem: Po naciśnięciu klawisza "x" program powinien zakończyć pracę, a tak się nie dzieje.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NN
{
class Program
{
static void SumaSzereguFunkcyjnego(float x, float Eps, out float
SumaSzeregu, out int LicznikWyrazówSzeregu)
{
float a;
int k;
a = 2 - x;
k = 1;
SumaSzeregu = a;
do
{
k++;
a *= (float)Math.Sqrt(1 - (1 / k)) * (2 - x);
SumaSzeregu += a;
} while (Math.Abs(a) > Eps);
LicznikWyrazówSzeregu = k;
}
static void Main(string[] args)
{
ConsoleKeyInfo Wyjście;
do
{
float x;
float Eps;
float SumaSzeregu;
int LicznikZsumowanychWyrazów;
Console.Write("\n\t\tProgram wyznacza sumę szeregu funkcyjnego: "
+ "\n\n\t(-1)^k * 1/k^1/2 * (x -2)^k"
+ "\n\n\t dla podanej niezależnej x oraz dokładności obliczeń Eps");
Console.WriteLine("\n\n\tPodaj wartość zmiennej niezależnej x: ");
Wyjście = Console.ReadKey();
while (!float.TryParse(Console.ReadLine(), out x))
//while(!TryParseFLOAT(Console.ReadLine(), out x))
{
Console.Write("\n\tERROR: w podanym zapisie wartości"
+ "zmiennej niezależnej x \n\twystąpił niedozwolony znak!");
Console.Write("\n\n\tWprowadz ponownie wartości zmiennej niezależnej x: ");
}
//wczytanie dokładności obliczeń
do
{
Console.WriteLine("\n\tPodaj dokładność obliczeń Eps: ");
while (!float.TryParse(Console.ReadLine(), out Eps))
{
Console.Write("\n\tERROR: w podanym zapisie wartości dokładności obliczeń Eps"
+ "\n\twystąpił niedozwolony znak!");
Console.Write("\n\tWprowadz wartość dokładności obliczeń Eps jeszcze raz: ");
}
/*sprawdzenie warunku wejściowego, który musi być spełniony przez wartość Eps:
* 0<Eps<1*/
if ((Eps <= 0) || (Eps >= 1))
Console.Write("\n\tERROR: Dokładność obliczeń musi spełniać warunek wejściowy: "
+ "\n\t 0 < Eps < 1; podaj dokładność obliczeń jeszcze raz!");
} while ((Eps <= 0) || (Eps >= 1));
/*wywołanie metody dla obliczenia sumy szeregu: na prawach instrukcji, gdyż nie zwraca
* żadnej wartości (jest typu void) w miejsce wywołanie metody: SumaSzereguFunkcyjnego,
* a wyniki obliczeń są przekazywane przez parametry wyjściowe (out)*/
SumaSzereguFunkcyjnego(x, Eps, out SumaSzeregu, out LicznikZsumowanychWyrazów);
//wyprowadzenie wyników obliczeń
Console.WriteLine("\n\n\tWyniki obliczeń:");
Console.WriteLine("\n\tSuma szeregu (zapis wykładniczy): {0,10:E}", SumaSzeregu);
Console.WriteLine("\n\tSuma szeregu (zapis stałopozycyjny): {0,10:F}", SumaSzeregu);
Console.WriteLine("\n\tSuma szeregu (zapis najbardziej zwięzły): {0,10:G}", SumaSzeregu);
Console.WriteLine("\n\tLiczba zsumowanych wyrazów szeregu k = {0,3}", LicznikZsumowanychWyrazów);
//wypisanie tych samych wyników w jednej instrukcji
Console.WriteLine("\n\n\tWyniki obliczeń (jeszcze raz, ale zapisane w jednej"
+ "instrukcji):");
Console.WriteLine("\n\tSuma szeregu (zapis wykładniczy): {0,10:E}"
+ "\n\tSuma szeregu (zapis stałopozycyjny): {0,10:F}"
+ "\n\tSuma szeregu (zapis najbardziej zwięzły): {0,10:G}"
+ "\n\t\t\t{0,10:G2} \n\n\tLiczba zsumowanych wyrazów szeregu "
+ "k = {3,3}", SumaSzeregu, SumaSzeregu, SumaSzeregu, LicznikZsumowanychWyrazów);
//autor programu
Console.WriteLine("\n\n\tNaciśnij klawisz "X" dla zakończenia programu...");
Console.ReadKey();
} while (Wyjście.Key != ConsoleKey.X);
}
}
}