Zakończenie programu lub wznowienie jego działania

0

Hejka,
Piszę program i zgubiłam się w pętli , użytkownik na zadane pytanie powinien odpowiedzieć t/n
t- zakończ program
n- wznowienie od nowa
Po uruchomieniu mojego kodu, "t" nie działa, konsola reaguje tak samo, jak "n". Dodatkowo pętla działa podwójnie.
Pomocy, jak to zmienić?

using System;
 
class Program
{
    public static double a, b, c, ile_wynosi_delta, x1, x2;
 
    public static void wprowadz()
    {
        Console.WriteLine("Podaj współczynniki równania kwadratowego \n");
        a = 0;
        b = 0;
        c = 0;
        Console.Write("a: ");
        for (bool sprawdź = double.TryParse(Console.ReadLine(), out a); !sprawdź || a == 0; sprawdź = double.TryParse(Console.ReadLine(), out a))
        {
            if (sprawdź)
                Console.WriteLine("Błąd! Aby funkcja była kwadratowa współczynnik musi być różny od 0!");
            else
                Console.WriteLine("Dopuszczalne są tylko liczby!");
        }
        Console.Write("b: ");
        while (!double.TryParse(Console.ReadLine(), out b))
            Console.WriteLine("Dopuszczalne są tylko liczby!");
        Console.Write("c: ");
        while (!double.TryParse(Console.ReadLine(), out c))
            Console.WriteLine("Dopuszczalne są tylko liczby!");
    }
    public static double delta(double a, double b, double c)
    {
        ile_wynosi_delta = (b * b) - 4 * a * c;
        Console.WriteLine("Delta wynosi: " + ile_wynosi_delta + " \n");
        return ile_wynosi_delta;
    }
 
    public static void x()
    {
        if (ile_wynosi_delta == 0)
        {
            x1 = x2 = -b / (2 * a);
            Console.WriteLine("Dla delty równej 0: \nx1 i x2 wynoszą: " + x1);
            Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
        }
        else if (ile_wynosi_delta > 0)
        {
            x1 = (-b - Math.Sqrt(ile_wynosi_delta)) / (2 * a);
            x2 = (-b + Math.Sqrt(ile_wynosi_delta)) / (2 * a);
            Console.WriteLine("Dla delty większej niż 0:\nx1 = " + x1 + " \nx2 = " + x2);
            Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
        }
    }
 
    public static void ix()
    {
        double Re, Im;
 
        if (ile_wynosi_delta < 0)
        {
            Re = (-b / (2 * a));
            Im = (Math.Sqrt(-ile_wynosi_delta)) / (2 * a);
            Console.WriteLine("Pierwiastki zespolone: ");
            Console.WriteLine("" + Re + "-" + Im + "i");
            Console.WriteLine("" + Re + "+" + Im + "i");
            Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
        }
    }
    static void Main(string[] args)
    {
        wprowadz();
        Console.WriteLine(a + " " + b + " " + c);
        delta(a, b, c);
        x();
        ix();
 
        Char t;
        do
        {
            Console.WriteLine("Czy chcesz zakończyć program? !! Naciśnij (T/N) :-");
            t = Convert.ToChar(Console.ReadLine());
            
        } while (t.Equals(Char.Parse("N")));
     
 
        Console.WriteLine("Podaj współczynniki równania kwadratowego \n");
        a = 0;
        b = 0;
        c = 0;
        Console.Write("a: ");
        for (bool sprawdź = double.TryParse(Console.ReadLine(), out a); !sprawdź || a == 0; sprawdź = double.TryParse(Console.ReadLine(), out a))
        {
            if (sprawdź)
                Console.WriteLine("Błąd! Aby funkcja była kwadratowa współczynnik musi być różny od 0!");
            else
                Console.WriteLine("Dopuszczalne są tylko liczby!");
        }
        Console.Write("b: ");
        while (!double.TryParse(Console.ReadLine(), out b))
            Console.WriteLine("Dopuszczalne są tylko liczby!");
        Console.Write("c: ");
        while (!double.TryParse(Console.ReadLine(), out c))
            Console.WriteLine("Dopuszczalne są tylko liczby!");
 
        ile_wynosi_delta = (b * b) - 4 * a * c;
        Console.WriteLine("Delta wynosi: " + ile_wynosi_delta + " \n");
 
 
        {
            if (ile_wynosi_delta == 0)
            {
                x1 = x2 = -b / (2 * a);
                Console.WriteLine("Dla delty równej 0: \nx1 i x2 wynoszą: " + x1);
                Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
            }
            else if (ile_wynosi_delta > 0)
            {
                x1 = (-b - Math.Sqrt(ile_wynosi_delta)) / (2 * a);
                x2 = (-b + Math.Sqrt(ile_wynosi_delta)) / (2 * a);
                Console.WriteLine("Dla delty większej niż 0:\nx1 = " + x1 + " \nx2 = " + x2);
                Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
            }
        }
 
 
        {
            double Re, Im;
 
            if (ile_wynosi_delta < 0)
            {
                Re = (-b / (2 * a));
                Im = (Math.Sqrt(-ile_wynosi_delta)) / (2 * a);
                Console.WriteLine("Pierwiastki zespolone: ");
                Console.WriteLine("" + Re + "-" + Im + "i");
                Console.WriteLine("" + Re + "+" + Im + "i");
                Console.WriteLine("Wzór funkcji kwadratowej: " + a + "x^2 + " + b + "x + " + c);
            }
 
            {
                wprowadz();
                Console.WriteLine(a + " " + b + " " + c);
                delta(a, b, c);
                x();
                ix();
 
                System.Environment.Exit(1);
            }
        }
    }
3

Brzydkie to bardzo. Niby wydzielone funkcje, ale sprzężone na zmiennych globalnych, niby jest funkcja double delta(), ale wynik nie używany, w dodatku liczenie "ręczne".
Wołane z tysiaca miejsc / łącznie z kodem poza funkcjami.
Zobaczyć w tym chaosie jakie sa przepływy, ponad moje siły

Funkcja wprowadź by była niezłym materiałem, aby tam powstawała decyzja kontynuować / kończyć, gdyby:

  • była typu bool
  • była jedynym miejscem wprowadzania, bez kodu luźnego

Jak doprowadzisz, ze kazda zamierzona funkcjonalność będzie W JEDNYM EGZEMPLARZU, pozbędziesz się zmiennych globalnych 1), będzie można wypowiadać się o przepływie (m.in. pętli / zakończeniu). Raz wprowadzanie, raz obliczenie i ocenianie delty, raz drukowanie itd...

Pierwiastek urojony jest wg mnie źle

  1. a,b,c bym Ci wybaczył - wszytskie inne lokalne, w najmniejszym możliwym bloku kodu (zakresie)
0

Spróbuj zamienić to:

Char t;
do
{
    Console.WriteLine("Czy chcesz zakończyć program? !! Naciśnij (T/N) :-");
    t = Convert.ToChar(Console.ReadLine());
} while (t.Equals(Char.Parse("N")));

na to:

Console.WriteLine("Exit? (T/n)");
char t = Console.ReadKey().KeyChar; // Read char
if(t == 'T' || t == 't') { return; } // If char equals to T or t exit app
4

ale fajna pętla

for (bool sprawdź = double.TryParse(Console.ReadLine(), out a); !sprawdź || a == 0; sprawdź = double.TryParse(Console.ReadLine(), out a))
{
	if (sprawdź)
		Console.WriteLine("Błąd! Aby funkcja była kwadratowa współczynnik musi być różny od 0!");
	else
		Console.WriteLine("Dopuszczalne są tylko liczby!");
}

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