Średnia harmoniczna i metoda

0

Witam, to część mojego pierwszego programu, wszystko robię na "czuja" i chciałbym prosić o wytłumaczenie. Pierwsze pytanie to dlaczego w wywołaniu metody "podanieN" w nawiasie musi być jakaś liczba (ja wpisałem 0 bo bez niej pokazuje błąd) i co ona oznacza?
A drugie to dlaczego przy podaniu wartości "a" przykładowo: 0,5 ; 0,3 ; 0,451 itd. wychodzą błędne wyniki? Możliwe że powinienem podawać je z kropką zamiast przecinka ale wtedy działa to jakby niebyły liczbami i nie przepuszcza ich "while (!float.TryParse(Console.ReadLine(), out a))". Serdecznie proszę o pomoc.

namespace ProjektCsharp
{
    class Program
    {
        static ushort podanieN(ushort n)
        {
            

            do
            {
                //wpisanie zaproszenia do podania wartości 'n' 
                Console.Write("\n\tPodaj liczność ciągu liczbowego n = ");

                while (!ushort.TryParse(Console.ReadLine(), out n))
                {

                    Console.WriteLine("\n\tError: w zapisnie wystąpił niedozwolony znak");

                    //ponowne wpisanie zaproszenia do podania wartości 'n' 
                    Console.Write("\n\tPodaj liczność ciągu liczbowego n = ");


                }

                //n podane poprawnie
                //sprawdzenie warunku wejściowego n > 0 
                if (n <= 0)
                    //sygnalizacja błędu
                    Console.WriteLine("\n\tError: podana wartość liczności nie spełnia warunku wejściowego: n > 0");
                
            } while (n <= 0);

                        
            return n;
            
        }
        static void Main(string[] args)
        {
            //Deklaracje zmiennej dla przechowania kodu naciśniętego klawisza

            ConsoleKeyInfo Wybranaopcja;

            //Wypisanie metryki programu
            Console.WriteLine("\n\n\t\tProgram 'KalkulatorWielkościMatematycznych'");
            //Zapisanie instrukcji do_while, która zapewni powtarzanie obliczeń

            do
            {
                //wypisanie menu programu
                Console.WriteLine("\n\n\tWybierz jedną z poniższych opcji: ");

                Console.WriteLine("\n\tA. Obliczenie średniej harmonicznej wyrazów ciągu liczbowego");

                //podpowiedz dla użytkownika
                Console.Write("\n\n\n\tNaciśnij klawisz aby wybrać jedną z opcji: ");
                //wczytanie klawisza który został wybrany przez użytkownika

                Wybranaopcja = Console.ReadKey();

                //rozpoznanie i obsłużenie wybranej opcji
                if (Wybranaopcja.Key == ConsoleKey.A)
                {

                    //potwierdzenie wybranej opcji
                    Console.WriteLine("\n\n\n\t\tWybrana funkcjonalność: A. Obliczenie średniej harmonicznej wyrazów ciągu liczbowego");

                    //deklaracje lokalne 
                    
                    float a; //dla przechowania wartości wczytanego wyrazu ciągu liczbowego
                    float S; //dla przechowania obliczonej średniej harmonijnej wyrazów ciągu liczbowego

                    //wywołanie metody
                    ushort n = podanieN(0);   
                    
                    //obliczenie średniej harmonicznej wyrazów ciągu liczbowego

                    S = 0.0F; //ustawienie początkowego stanu obliczeń
                                //obliczenie średniej harmonicznej wyrazów ciągu liczbowego według zależności iteracyjnej
                    for (int i = 1; i <= n; i++)
                    {
                        //wczytanie wartości i-tego wyrau liczkowego
                        Console.Write("\n\tPodaj wartość {0}-go wyrazu ciągu liczbowego: ", i);
                        do
                        {


                            while (!float.TryParse(Console.ReadLine(), out a))
                            {

                                //sygnalizacja błędu
                                Console.WriteLine("\n\tError: w podanym zapisnie wyrazu ciągu liczbowego wystąpił niedozwolony znak");

                                //wczytywanie wartości i-tego wyrazu ciągu liczbowego
                                Console.Write("\n\tPodaj ponownie wartość {0}-go wyrazu ciągu liczbowego: ", i);

                            }

                            //a podane poprawnie
                            //sprawdzenie warunku wejściowego a != 0 
                            if (a == 0)
                            { //sygnalizacja błędu
                                Console.WriteLine("\n\tError: podana wartość wyrazu ciągu liczbowego nie może być równa 0");
                                //wczytywanie wartości i-tego wyrazu ciągu liczbowego
                                Console.Write("\n\tPodaj ponownie wartość {0}-go wyrazu ciągu liczbowego: ", i);
                            }

                        } while (a == 0);




                        //obliczanie średniej harmonicznej wyrazów ciągu liczbowego
                        S = S + (1.0F/ a);


                    }

                    S = n / S;

                    //wypiasnie wyniku obliczeń
                    Console.WriteLine("\n\tWyniki obliczeń suma {0} wyrazów ciągu liczbowego jest równa {1,10:F5}", n, S);

                    Console.WriteLine("\n\tNaciśnij jakikolwiek przycisk aby kontynuować");

                    //chwilowe zatrzymanie programu
                    Console.ReadKey(true);


                }

            } while (Wybranaopcja.Key != ConsoleKey.X);
        }
    }
}


3

Pierwsze pytanie to dlaczego w wywołaniu metody "podanieN" w nawiasie musi być jakaś liczba (ja wpisałem 0 bo bez niej pokazuje błąd) i co ona oznacza?

Ponieważ twoja metoda, jak wynika z jej sygnatury static ushort podanieN(ushort n) oczekuje, że dostanie przekazaną liczbę, która zostanie nazwana "n". Po co to robi? Nie wiem, bo za chwilę to "n" przekazywane w argumencie jest zastępowane przez "n" podane z klawiatury.

Możesz to wyrzucić, a zamiast tego zrobić sobie zmienną ushort n wewnątrz funkcji podanieN.

1 użytkowników online, w tym zalogowanych: 0, gości: 1