Błąd kompilacji - visual c# (początkujący)

Witam, od dwóch godzin uczę się programowania w c#… Poniżej jest troszkę zmodyfikowany przeze mnie kod z książki problem pojawi się podczas kompilacji, pojawia się następujący error.

Co mam zrobić żeby było ok ? Skończyły mi się pomysły :frowning:

using System;

class pierwiastek

{ 

    public static void main(string[] args)

{

        int parametra = 1, parametrb = -5, parametrc = 4;

        double delta, wynik;

        Console.WriteLine("paramtery rownania: \n");

        Console.WriteLine("a: " + parametra + "b:" + parametrb + "c:" + parametrc) ;


        if (parametra == 0){

            Console.WriteLine("to nie jest rownanie kwadratowe: a =0!");

        } 

        else 

            delta = parametrb * parametrb - 4 * parametra * parametrc;

        if (delta < 0){

            Console.WriteLine("delta < 0");

            Console.WriteLine("to rownianie nie ma rozwiazania w zbiorze licz rzeczywistych");

        }

        else{

            if (delta == 0){

                wynik = - parametrb / 2* parametra;

                Console.WriteLine("rozwiązanie: x = " + wynik);

            }

            else{

                wynik = ( - parametrb + Math.Sqrt(delta)) / 2 * parametra;

                Console.WriteLine("Rozwiązanie: x1 =" + wynik);

                wynik = ((- parametrb - Math.Sqrt(delta))) / 2 * parametra;

                Console.WriteLine(", x2 = " + wynik );

                Console.ReadLine();

            }}}}

Nie znam się zbytnio na C# ale wydaje mi się, że powinieneś przypisać jakąś wartość zmiennej delta zanim coś z nią zrobisz :slight_smile:

Jak sam kod błędu mówi, że została użyta zmienna bez wartości.

Musisz ustawić przypisanie do delty w taki sposób by przy każdej sytuacji posiadała jakąś wartość.

-> Problem leży w if->else.

Powiem tak rozumiem co oznacza kod błędu tylko nie wiem jak to się przekłada na mój program, delta dostaje wartość w linijce 15, błąd pojawia się w 16 lini kodu… Gdy deklaruje na początku np delta = 1 wszystko jest ok, mogę dać tam nawet 100000 z tym że przecież linijka 15 oblicza później deltę. Mamy jeszcze zmienną wynik ona również nie jest deklarowana i wszystko gra, bo jest obliczana w kolejnych linijkach. Troszkę zgłupiałem :confused:

Ale nie masz gwarancji, że instrukcja z 15 linijki się wykona - jeśli parametra będzie równy zero, delta nie zostanie wyliczona, a dalszy kod (od 16 linijki) się wykona. Prawdopodobnie zgubiłeś tam nawiasy klamrowe - wyliczenie delty i kolejne obliczenia powinny się znaleźć w parze takich nawiasów, by były wykonywane tylko gdy “parametra” będzie różny od zera.

ktoś już napisał sedno sprawy. gdy masz instrukcje warunkowe kompilator nie ma pewności ze tam wejdzie, dlatego trzeba zainicjować zmienną jakąś wartością, najlepiej neutralną dla danego problemu. ogółem chodzi o przydzielenie pamięci dla zmiennej, należało by trochę wcześniej poprogramować w C bądź też C++ to by się rozumiało, a takto na sucho trzeba zrozumieć co ktoś tłumaczy.

Nie mieszaj, pamięć jest przydzielana dla zmiennej w momencie jej deklaracji.

Chodzi tu tylko o to, że kompilator C# “chce” najbardziej jak to jest tylko możliwe pomóc programiście, dlatego wyłapuje takie błędy. Gdyby tego nie zrobił (tak jak nie robią kompilatory C/C++), program mógłby zwracać głupie wyniki, a znalezienie błędu w napisanym i kompilującym się programie byłoby dużo trudniejsze.

Jako tako kapuje kwestia “wprawy w rozumowaniu”, dziękuje za wytłumaczenie.