Witam
Mam do napisania pewien projekt na studiach i mam z nim kilka problemów.
Oto projekt.
http://csharp2012.cba.pl/images/ProgramyWyklad/SANProjektNr1.pdf
Dopiero zaczynam swoją przygodę z programowaniem więc nie znam jeszcze za dobrze c#'a.
Robię zadanie 1 i do tej pory napisałem to.
static int ks_silnia(int ks_n_1)
{
//rekurencyjne wpisanie silni
if (ks_n_1 == 0) return 1;
else return ks_n_1 * ks_silnia(ks_n_1 - 1);
}
static void Main(string[] args)
{
//Przypisanie typu danych
String ks_odp;
float ks_X, ks_EPS, ks_Y, ks_b;
int ks_n, ks_w, ks_index_1, ks_index_2;;
float ks_Xd, ks_h, ks_Xg;
float[,] ks_tab;
do
{
//Wypisanie metryki programu
Console.WriteLine("\n\t\tProgram dla zadania pierwszego. Wybierz jedną z opcji:" +
"\n\t1.Określenie wartości funkcji w podanym punkcie wartości zmiennej" +
"\n\tniezależnej X i przy określonej dokładności EPS " +
"\n\t2.Tablicowanie funkcji w podanym przedziale [Xd,Xg] z krokiem h i" +
"\n\tprzy określonej dokładności EPS.");
start:
Console.Write("\n\tWybierz 1 lub 2: ");
ks_w = Convert.ToInt16(Console.ReadLine());
switch (ks_w)
{
case 1:
//Wczytywanie danych
Console.Write("\n\tPodaj wartość zmiennej niezależnej X: ");
ks_X = Convert.ToSingle(Console.ReadLine());
//Wczytanie dokładności obliczeń
do
{
Console.Write("\n\tPodaj dokładność obliczeń EPS: ");
ks_EPS = Convert.ToSingle(Console.ReadLine());
if ((ks_EPS <= 0) || (ks_EPS >= 1))
{
Console.Write("\n\tERROR: Dokładność obliczeń musi spełniać warunek: " +
"\n\t0 < EPS < 1");
Console.Write("\n\tWprowadz dokładnośc obliczeń jeszcze raz.");
}
} while ((ks_EPS <= 0) || (ks_EPS >= 1));
//Sprawdzenie warunków funkcji
if (ks_X < -1)
{
ks_n = 0;
//do
// {
ks_Y = (float)Math.Pow(-1, ks_n) * (float)Math.Pow(ks_X, 2 * ks_n + 1) / ks_silnia(2 * ks_n + 1);
Console.Write("\n\tWartość dla podanego X wynosi: {0}", ks_Y);
// ks_n++;
// } while (ks_n <= 15);
}
if ((ks_X <= 1) && (ks_X >= -1))
{
ks_n = 1;
//do
//{
ks_Y = (float)Math.Pow(-1, ks_n) * (float)Math.Pow(ks_X, ks_n) / ks_silnia(2 * ks_n);
Console.Write("\n\tWartość dla podanego X wynosi: {0}", ks_Y);
// ks_n++;
// } while (ks_n <= 15);
}
if (ks_X > 1)
{
ks_n = 1;
do
{
//wczytanie zmiennej b
Console.Write("\n\tPodaj wartość zmiennej b(b>0): ");
ks_b = Convert.ToSingle(Console.ReadLine());
if (ks_b <= 0)
Console.Write("\n\tERROR: b musi być większe od zera.");
} while (ks_b <= 0);
// do
// {
ks_Y = (float)Math.Pow(Math.Log(ks_b), ks_n) * (float)Math.Pow(ks_X, ks_n) / ks_silnia(ks_n);
Console.Write("\n\tWartość dla podanego X wynosi: {0}", ks_Y);
// ks_n++;
//} while (ks_n <= 15);
}
break;
case 2:
//Wczytanie zmiennych
Console.Write("\n\tPodaj dolną wartość zmiennej niezależnej X: ");
ks_Xd = Convert.ToSingle(Console.ReadLine());
do
{
Console.Write("\n\tPodaj górną wartość zmiennej niezależnej X: ");
ks_Xg = Convert.ToSingle(Console.ReadLine());
if (ks_Xg <= ks_Xd)
Console.Write("\n\tGórna wartość X musi być większa od dolnej !! ");
} while (ks_Xg <= ks_Xd);
Console.Write("\n\tPodaj h: ");
ks_h = Convert.ToSingle(Console.ReadLine());
do
{
//wczytanie zmiennej b
Console.Write("\n\tPodaj wartość zmiennej b(b>0) dla x>0: ");
ks_b = Convert.ToSingle(Console.ReadLine());
if (ks_b <= 0)
Console.Write("\n\tERROR: b musi być większe od zera.");
} while (ks_b <= 0);
//Wczytanie dokładności obliczeń
do
{
Console.Write("\n\tPodaj dokładność obliczeń EPS: ");
ks_EPS = Convert.ToSingle(Console.ReadLine());
if ((ks_EPS <= 0) || (ks_EPS >= 1))
{
Console.Write("\n\tERROR: Dokładność obliczeń musi spełniać warunek: " +
"\n\t0 < EPS < 1");
Console.Write("\n\tWprowadz dokładnośc obliczeń jeszcze raz.");
}
} while ((ks_EPS <= 0) || (ks_EPS >= 1));
//Obliczenia i dodawanie do tablicy
ks_index_1 = 0;
ks_index_2 = 0;
ks_tab = new float[ks_index_1, ks_index_2];
do
{
if (ks_Xd < -1)
{
ks_n = 0;
ks_Y = (float)Math.Pow(-1, ks_n) * (float)Math.Pow(ks_Xd, 2 * ks_n + 1) / ks_silnia(2 * ks_n + 1);
ks_tab[ks_index_1, ks_index_2]= ks_Xd;
ks_tab[ks_index_1, ks_index_2+1] = ks_Y;
ks_index_1++;
ks_index_2++;
ks_Xd = ks_Xd + ks_h;
}
if ((ks_Xd <= 1) && (ks_Xd >= -1))
{
ks_n = 1;
ks_Y = (float)Math.Pow(-1, ks_n) * (float)Math.Pow(ks_Xd, ks_n) / ks_silnia(2 * ks_n);
ks_tab[ks_index_1, ks_index_2] = ks_Xd;
ks_tab[ks_index_1, ks_index_2 + 1] = ks_Y;
ks_index_1++;
ks_index_2++;
ks_Xd = ks_Xd + ks_h;
}
if (ks_Xd > 1)
{
ks_n = 1;
ks_Y = (float)Math.Pow(Math.Log(ks_b), ks_n) * (float)Math.Pow(ks_Xd, ks_n) / ks_silnia(ks_n);
ks_tab[ks_index_1, ks_index_2] = ks_Xd;
ks_tab[ks_index_1, ks_index_2 + 1] = ks_Y;
ks_index_1++;
ks_index_2++;
ks_Xd = ks_Xd + ks_h;
}
} while (ks_Xd <= ks_Xg);
break;
default:
Console.Write("\n\tERROR: wciśnij 1 lub 2!\n");
goto start;
}
Console.Write("\n\tCzy chcesz powtarzać szukanie liczby doskonałej? (T/N): ");
ks_odp = Console.ReadLine().ToUpper();
} while (ks_odp == "T");
Nie do końca wiem jak mam zrobić ten zapis z dokładnością Eps(próbowałem zrobić tak że iteracyjnie dodawać n a potem pętlą do while dopóki Eps nie będzie mniejsze od wartości bezwzględnej Y tylko wtedy ta wartość wychodzi bardzo mała albo wcale, wiec nie wiem). Mam również problem z tablicą, nie wiem jak przekonwertować float na string i wypisać tablicę(chciałem zrobić tak żeby wpisywać kolejne wartości x i y do tablicy).
Będę wdzięczny za szybką pomoc.