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"

0

No i tak powinien działać mój kod. Dałem Ci tylko przykład jak używać TryParse, dalej sam trochę pomyśl. Podpowiem że trzeba tu użyć pętli i przerwać ją jeśli użytkownik wpiszę poprawnie dane.

0

Dzięki i tak ale chodziło mi o pomoc, żeby przy podaniu liczby 0 znowu pytał o podaj pierwsza liczbę...może ktoś inny mi pomoże?

0

Zastosuj prostą pętlę, a nie czekasz na gotowca.

0

Dzięki za pomoc naprawdę.. jakbym wiedział co wpisać to bym nie pisał z problemem na forum

0

Proszę -> http://msdn.microsoft.com/pl-pl/library/32dbftby.aspx

A jak to nie pomoże to zapraszam do działu "Ogłoszenia drobne".

0
 
a = float.Parse(Console.ReadLine());
            while (a == 0)
                Console.WriteLine("podaj inna liczbe jak 0");

Gdzie popełniam błąd? Jest ktoś kto mi pomoże? Pętla mi się nie chce zatrzymać i już nie wiem jak to poprawić.

0

Ty nawet nie próbujesz coś pomyśleć.

            float a;
            do
            {
                if (float.TryParse(Console.ReadLine(), out a))
                {
                    if (a == 0)
                        Console.WriteLine("Źle, to nie może być 0, wpisz jeszcze raz");
                }
                else
                    Console.WriteLine("To nawet nie jest liczba, jeszcze raz");
            }
            while (a == 0);

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