Pomoc w zadaniu z C# - funkcja kwadratowa

Pomoc w zadaniu z C# - funkcja kwadratowa
Klaudia Capik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:18
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.

AK
Skąd i po co wkleiłeś to "orowanie" enumów???
AK
a deltę się sprawdza if'em, swicth nie ma nic do tego. Przy czym w obliczeniach numerycznych nie spodziewaj się dokładnego zera
Klaudia Capik
Tak znalazłam w jakimś przykładzie na internecie
AK
owszem to jest poprawne syntaktycznie, ale bezsensowne w tym projekcie
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99881)
Klaudia Capik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:18
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");
}

Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.9963476)
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

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

Kopiuj
// 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");
}

Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 2x, ostatnio: AnyKtokolwiek
Klaudia Capik
no dobra to uznajmy, że temat delty jest załatwiony. w takim razie jak stosować tego enuma?
Klaudia Capik
No dobrze ale muszę go zastosować bo takie jest polecenie w zadaniu :(
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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ń.


Bo C to najlepszy język, każdy uczeń ci to powie
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Kopiuj
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


Bo C to najlepszy język, każdy uczeń ci to powie
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 22 godziny
  • Postów:5133
0

Przykład utworzenia i użycia enuma.

Kopiuj
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

edytowany 1x, ostatnio: WeiXiao
Klaudia Capik
dzięki za pomoc :)
Tobiasz Stamborski
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:16
0
Kopiuj
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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.