Pomoc w zadaniu z C# - funkcja kwadratowa

0

Witam. Mam problem z zadaniem. Treść zadania brzmi:
Napisz aplikację do obliczania miejsc zerowych funkcji kwadratowej. Wczytaj od użytkownika liczby a b i c - zgodnie ze wzorem ax^2+bx+c. Wyznacz i wypisz deltę. Przygotuj enum dla możliwych wyników (2 m.z., 1 m.z., brak m.z.) i przypisz wartość zgodnie z wyliczoną deltą. Za pomocą switcha wypisz w odpowiedni sposób wyniki (lub komunikat o braku wyników). Zabezpiecz program przed podaniem przez użytkownika błędnych danych.
Część już napisałam:

class Program
{
public enum wynik
{
dwamz,
jednomz,
zeromz
}
static void Main()
{
Console.WriteLine("Podaj liczbe a:");
double a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Podaj liczbe b:");
double b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Podaj liczbe c:");
double c = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Twoje liczby a, b i c to: " + a + " , " + b + " , " + c);

        double delta = (b * b) - 4 * (a * c);
        Console.WriteLine("Delta wynosi: " + delta);

        wynik Wynik = wynik.dwamz| wynik.jednomz | wynik.zeromz;

        switch(delta)
        {
            case 1:
        }
    }
}

Niestety problem zaczyna się przy enum i switchu. Po pierwsze nie do końca wiem jak do tego enum się odwoływać, a po drugie co wrzucić do switcha? Czy zmienną deltę czy wynik? Może widzicie jakieś błędy w tym co już napisałam.

0

Za poradą wywaliłam na razie switcha i wrzuciłam ifa

if (delta == 0)
{
double x = -b / (2.0 * a);
}
else if (delta >0)
{
double x1 = (-b + System.Math.Sqrt(delta)) / (2 * a);
double x2 = (-b - System.Math.Sqrt(delta)) / (2 * a);
}
else
{
Console.WriteLine("Blad! Delta jest ujemna");
}

0

Jako że sam napisałem "nie nastawiaj się na zero"

// typowe wzorce takiego porównania  
// if( Math.Abs(xxx)<EPS    ) ...
// if( Math.Abs(xxx-yyy)<EPS    ) ...


const double EPS = 1E-7;

if (delta>=0 && delta<=EPS) // prawie zero
{
double x = -b / (2.0 a);
}
else if (delta >0)
{
double x1 = (-b + System.Math.Sqrt(delta)) / (2 a);
double x2 = (-b - System.Math.Sqrt(delta)) / (2 * a);
}
else
{
Console.WriteLine("Blad! Delta jest ujemna");
}
0

no dobra to uznajmy, że temat delty jest załatwiony. w takim razie jak stosować tego enuma? - Klaudia Capik 3 minuty temu

jest praktycznie zbędny. MIAŁBY sens, gdyby był duży odstęp czasowy, i należało przechować informację o znaku delty.
Co więcej jest szkodliwy, bo akurat wartości delty nie możesz "zapomnieć"
Nie ma żadnych racjonalnych powodów mieć DWIE ZMIENNE

Oczywiście da sie napisac taki kod wg wymagań.

0
const double EPS = 1E-7;

Wynik wynik;   // daję typ z wielkie litery a zmiennej z małej, bo tak powinno być.

if (delta>=0 && delta<=EPS) // prawie zero
{
  wynik = Wynik.JednoMZ;
}
else if (delta >0)
{
  wynik = Wynik.DwaMZ
}
else
{
 wynik = Wynik.BrakMZ
}

... radź sobie sama

0

Przykład utworzenia i użycia enuma.

using System;

class Program
{
    enum Importance
    {
        None,
        Trivial,
        Regular,
        Important,
        Critical
    }

    static void Main()
    {
        // Step 1: create an enum local.
        var value = Importance.Critical;

        // Step 2: test against a known Importance value.
        if (value == Importance.Critical)
        {
            Console.WriteLine(true);
        }
    }
}

src: https://www.dotnetperls.com/enum

0
switch (wynik)
{
	case Wynik.JednoMZ:
		Console.WriteLine("Jedno miejsce zerowe: x = " + x.ToString());
		break;
	case Wynik.DwaMZ:
		Console.WriteLine("Dwa miejsca zerowe: x1 = " + x1.ToString() + " x2 = " + x2.ToString());
		break;
	case Wynik.ZeroMZ:
		Console.WriteLine("Brak miejsc zerowych.");
		break;
}

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