równanie kwadratowe

0

Witam napisałem kod równania kwadratowego ale nie działa mi wyjątek try-catch. W którym miejscu popełniłem błąd? Chodzi mi o to, żeby przy podaniu 1zmiennej a wynoszącej 0 wyświetlał by się komunikat "Podaj inna liczbę jak 0". Proszę o pomoc

        float a, b, c, delta;
        double x1, x2;
  Console.WriteLine("Podaj pierwsza liczbę do obliczenia rowniania kwadratowego");
            a = float.Parse(Console.ReadLine()); 
           try
            {
                Console.WriteLine("Podaj pierwsza liczbę do obliczenia rowniania kwadratowego");
                a = float.Parse(Console.ReadLine());
          }
            catch
            {
                Console.WriteLine("Podaj inna liczbe jak 0");
            }
            Console.WriteLine("Podaj druga liczbę do obliczenia rownania kwadratowego");
          b = float.Parse(Console.ReadLine());
          Console.WriteLine("Podaj trzecią liczbę do obliczenia rownania kwadratowego");
        c = float.Parse(Console.ReadLine());
          delta = b * b - 4 * a * c; 
           Console.WriteLine("Delta wynosi: " + delta); 
           x1 = (-b + Math.Sqrt(delta)) / (2 * a); 
          x2 = (-b - Math.Sqrt(delta)) / (2 * a); 
           if (delta < 0) Console.WriteLine("Nie istnieja pierwiastki"); 
            else if (delta > 0) Console.WriteLine("Istnieja pierwiastki i wynosza:\nx1={0}, x2={1}", x1, x2);

        Console.ReadKey();
1

Nie stosuj try catch jeśli możesz to zrobić zwykłym ifem. Poza tym czemu miałby wywalić wyjątek przy parsowaniu 0?
Użyj metody TryParse i później sprawdź czy liczba nie jest zerem.

0

Dobrze rozumiem nie będę stosował try-catch. Czy mógłbyś mi pomóc i podać jak ma zadziałać poprawnie ten IF?
Zastosowałem tak:

 Console.WriteLine("Podaj pierwsza liczbę do obliczenia rowniania kwadratowego");

         a = float.Parse(Console.ReadLine()); 
               if (a == 0) Console.WriteLine("Podaj inna liczbe");
               else 

               Console.WriteLine("Podaj druga liczbę do obliczenia rownania kwadratowego"); 

i niestety dalej nie działa jak należy :(

0
            float a;
            if(float.TryParse(Console.ReadLine(),out a))
            {
                if (a == 0)
                    Console.WriteLine("Liczba to 0");
            }

I stosuj znaczniki kolorujące składnie, bo zaraz wpadnie moderator i będzie po temacie :)

0
 float a, b, c, delta;
            double x1, x2;

            Console.WriteLine("Podaj pierwsza liczbę do obliczenia rowniania kwadratowego");

                a = float.Parse(Console.ReadLine());
                if (float.TryParse(Console.ReadLine(), out a))
                {
                    if (a == 0)
                        Console.WriteLine("Liczba to 0");
                }

                    Console.WriteLine("Podaj druga liczbę do obliczenia rownania kwadratowego");
            b = float.Parse(Console.ReadLine());
            Console.WriteLine("Podaj trzecią liczbę do obliczenia rownania kwadratowego");
            c = float.Parse(Console.ReadLine());
            delta = b * b - 4 * a * c;
            Console.WriteLine("Delta wynosi: " + delta);
            x1 = (-b + Math.Sqrt(delta)) / (2 * a);
            x2 = (-b - Math.Sqrt(delta)) / (2 * a);
            if (delta < 0) Console.WriteLine("Nie istnieja pierwiastki");
            else if (delta > 0) Console.WriteLine("Istnieja pierwiastki i wynosza:\nx1={0}, x2={1}", x1, x2);

            Console.ReadKey();

Dziękuje za wskazówki. Zastosowałem kod co mi podałeś ale dalej nie działa jak należy...w którym miejscu popełniam błąd?

0

b i c też parsuj przez TryParse. I powiedz co nie działa jak należy.

0

a dlaczego TryParse? Kiedy podaję pierwszą liczbę jako 0 zgodnie z tym kodem poprawionym nic się nie wyświetla żaden komunikat, że liczba to 0. Dopiero jak podam inna liczbę jak 0 to wyświetla mi się 'Podaj druga liczbe'. Chciałbym, żeby przy podaniu przy pierwszej liczbie 0 wyświetlał mi się komunikat np "Liczba to 0 poddaj inna liczbe". I prosi znowu o podanie pierwszej liczby

0
a = float.Parse(Console.ReadLine());
if (float.TryParse(Console.ReadLine(), out a))
{
     if (a == 0)
        Console.WriteLine("Liczba to 0");
} 

Dwa raz wczytujesz do zmiennej a.

A TryParse dlatego, że zwykłe Parse wywali wyjątek jak nie uda się skonwertować.

0

Może dlatego że dwa razy pobierasz liczbę od użytkownika?

a = float.Parse(Console.ReadLine());//to jest nie potrzebne
if (float.TryParse(Console.ReadLine(), out a))//tu już jest Console.ReadLine
0

tak skasowałem

 a = float.Parse(Console.ReadLine()); 

ale dalej mam błąd, przy podaniu pierwszej liczby 0 wyświetla się komunikat: "Liczba to 0" i zamiast zapytać znowu podaj pierwszą liczbę to od razu wyświetla "Podaj druga liczbe"

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