• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program liczący pierwiastek C#

Cloud VPS
+1 głos
2,263 wizyt
pytanie zadane 14 stycznia 2021 w C# przez Martita Bywalec (2,520 p.)

Robię program  liczący pierwiastki w Windows Forms. Program nieprawidłowo liczy np. √4 = 4 a powinien podać 2. Użytkownik wpisuje w texbox stopień i w drugim texbox liczbę.
Co jest źle? Co mam poprawić?
Oblicz - przycisk
Wynik - Label
Liczba - textbox
Stopień - textbox
Proszę o pomoc. Wykładowca nie wytłumaczył jak to zrobić i nie mieliśmy takich zadań.

1 odpowiedź

+1 głos
odpowiedź 14 stycznia 2021 przez Velta Maniak (52,890 p.)
wybrane 14 stycznia 2021 przez Martita
 
Najlepsza

Tak właściwie, dlaczego dla zmiennej Stopień obliczasz wskazany pierwiastek?

Od nowa, po kolei. Przypisz sobie odpowiednio wartości z kontrolek do zmiennych (koniecznie musisz zmienić ich nazwy, bo z obecnych nic nie wynika!):

double number = Convert.ToDouble(textBox1.Text);
double degree = Convert.ToDouble(textBox2.Text);

Teraz po prostu oblicz potęgę z ułamka 1 / {stopień} przy wypisaniu:

Wynik.Text = $"Pierwiastek z {number} o stopniu {degree} wynosi {Math.Pow(number, Convert.ToDouble(1 / degree))}";

Sprawdź poradnik na temat interpolacji ciągów znaków. Szybsze i wygodniejsze niż ich klasyczne łączenie!

Żeby wyglądało to lepiej, warto wydzielić sobie logikę obliczania pierwiastka dowolnego stopnia jako liczby rzeczywistej do osobnej funkcji:

public static class NthRoot
{
    public static double Calculate(double number, double degree)
    {
        return Math.Pow(number, Convert.ToDouble(1 / degree));
    }
}

Wtedy możesz zapisać to tak:

Wynik.Text = $"Pierwiastek z {number} o stopniu {degree} wynosi {NthRoot.Calculate(number, degree)}";

 

komentarz 14 stycznia 2021 przez Martita Bywalec (2,520 p.)

Teraz rozumiem dzięki. Jeszcze jedno pytanie czy idzie zrobić to sposobem podobnie jak zrobione jest pole koła tak jak w kodzie poniżej.

private void Oblicz_Click(object sender, EventArgs e)
        {
            double r, v;
            r = Double.Parse(textBox1.Text);
            v = 4.0 / 3 * Math.PI * r * r * r;
            Wynik.Text = "Objętość kuli wynosi: " + v.ToString("N4");
        }

Już chyba wiem

komentarz 14 stycznia 2021 przez Velta Maniak (52,890 p.)

Naturalnie. Możesz zacząć od używania Math.Pow, tak jak wcześniej:

v = 4 / 3 * Math.PI * Math.Pow(r, 3);

Możesz oczywiście wydzielić to do osobnej funkcji:

public static class SphereVolume
{
    public static double Calculate(double r)
    {
        return 4 / 3 * Math.PI * Math.Pow(r, 3);
    }
}

Wtedy:

v = SphereVolume.Calculate(r);
komentarz 14 stycznia 2021 przez Martita Bywalec (2,520 p.)
Próbuje dla siebie wybrać jeden sposób programowania stąd te pytania. To już ostatnie pytanie. Czy da się to zrobić ze ToString()?
komentarz 14 stycznia 2021 przez Velta Maniak (52,890 p.)

W jakim sensie? Chcesz przekonwertować wartość liczby rzeczywistej na ciąg znaków?

Naturalnie, bo typ double dziedziczy także po typie Object. Wystarczy dodać jako metodę:

string vStr = SphereVolume.Calculate(r)
    .ToString();

 

komentarz 14 stycznia 2021 przez Martita Bywalec (2,520 p.)

double number = Double.Parse(textbox1.Text);
double deggre = 
Wynik.Text = "Pierwiastek wynosi " + deggre.ToString();

O coś takiego jak powyżej mi chodzi tylko kod nie dokończony. Tym sposobem zrobiłam pole figur.

Podobne pytania

+1 głos
1 odpowiedź 186 wizyt
pytanie zadane 2 czerwca 2021 w C# przez mateusz45 Gaduła (3,280 p.)
0 głosów
0 odpowiedzi 154 wizyt

93,466 zapytań

142,459 odpowiedzi

322,732 komentarzy

62,846 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...