Wątek przeniesiony 2017-10-30 15:43 z C# i .NET przez Ktos.

Program konsolowy na obliczanie sumy, iloczynu i różnych średnich ciągów liczbowych

0

Witam, po krótce. Mam do zrobienia na projekt program jak w tytule, deadline - dziś do północy. Mam jednak problem i już nie mam siły na niego, albowiem chodzi o średnią harmoniczną (innych jeszcze nie zacząłem, ale to już później) a chodzi głównie o to, że nie mogę, ciągle wychodzi mi zły wynik. Nie wiem jak już mam wpisać wzór na tą średnią by wszystko było okej. Wkleję kawałek kodu, jak to wygląda. Użytkownik wklepuje liczbę n, tj. liczbę wyrazów ciągu a później wartości

{
                    int n; //liczność ciągu liczbowego
                    float a = 0;
                    float Suma = 0.0f;
                    float MianownikHar;


                    Console.WriteLine("\nObliczamy średnią harmoniczną wyrazów ciągu liczbowego");


                    do
                    {
                        Console.WriteLine("Podaj liczność ciągu liczbowego n: ");
                        while (!int.TryParse(Console.ReadLine(), out n))
                        {
                            Console.WriteLine("\n\tERROR w zapisie liczby n wystąpił" + " niedozwolony znak");
                            Console.Write("\n\tPodaj wartość n jeszcze raz!: ");
                        }
                        if (n <= 0)
                        {
                            Console.WriteLine("\n\tLiczba n musi być większa od 0!");
                            Console.Write("\n\tPodaj wartość n jeszcze raz!: ");
                        }
                        for (int i = 1; i <= n; i++)
                        {
                            Console.Write("\n\tPodaj {0} -ą wartość wyrazu ciągu liczbowego: ", i);
                            while (!float.TryParse(Console.ReadLine(), out a))
                            {
                                Console.WriteLine("\n\tERROR w zapisie {0} -go wyrazu ciągu liczbowego" + " wystąpił niedozowolony\n\t\t znak", i);
                                Console.Write("\n\tPodaj wartość wyrazu ciągu liczbowego jeszcze raz!: ");
                            }
                            Suma = Suma + a;

                        }

                    } while (n <= 0);

                    MianownikHar = (1 / (float)a + (1 / (float)a));
                    float ŚredniaHarmoniczna;
                    ŚredniaHarmoniczna = ((float)n / MianownikHar);
                    string KomunikatWynikHar;
                    KomunikatWynikHar = String.Format("\n\n\tŚrednia harmoniczna " + "{0} wyrazów ciągu liczbowego jest równa: {1,6:F3}", n, ŚredniaHarmoniczna);
                    Console.WriteLine(KomunikatWynikHar);
                    Console.WriteLine("Dla kontynuacji działa programu naciśnij dowolny klawisz...");
                    Console.ReadKey();
                }

Jeśli coś źle wkleiłem, napisałem to z góry przepraszam. Konto założyłem dopiero przed chwilą.

1

Mianownik średniej harmonicznej też musisz obliczać w pętli. Obecnie twoja zmienna MianownikHar zawsze wynosi 1/a + 1/a, gdzie a to ostatnia liczba podana przez człowieka.

Zmień swoje Suma = Suma + a; na MianownikHar = MianownikHar + 1/a;.

0

Dobra, super. Ogarnięte. A czy mógłbym prosić o jakąś pomoc ze średnimi: geometryczną, kwadratową, potęgową? Zakładam, że ten kod można zmodyfikować tak by poprzekształcać na podane średnie.

1

Tak, prawie tak samo.

Dodaj sobie zmienne dla każdej z nich, np.: float Geometryczna = 1;, potem w pętli obok tego sumowania dla harmonicznej możesz zrobić Geometryczna = Geometryczna * a, a po wyjściu z pętli zastosuj Math.Pow(), aby podnieść ten iloczyn do potęgi 1/n.

Tak samo z kwadratową: dodajesz do siebie a*a, a potem dzielisz wszystko przez n i z tego liczysz Math.Sqrt(), czyli pierwiastek. Potęgowa tak samo, tylko zamiast SumaKwadratowa = SumaKwadratowa + a*a masz coś w stylu SumaPotegowa = SumaPotegowa + Math.Pow(a, x), ale x musisz znać (do której potęgi podnosić).

0

No dobra, ale teraz jak chcę użyć Math.Pow() to wyskakuje mi błąd, że nie można zastosować konwersji zmiennej typu float na double

0

Bo wynik Math.Pow() to double, a twoje zmienne to float. Możesz zrzutować: costam = (float)Math.Pow(2, 4).

0

Tak, już to rozgryzłem. Dzięki wielkie jeszcze raz, teraz biorę się za kwadratową i w razie problemu będę pisał.

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