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


(Kriston Pl) #1

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();

            }}}}

(Wojtekbogocki) #2

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


(Ace4 Ur) #3

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.


(Kriston Pl) #4

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:


(Barry06) #5

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.


(kowal.luk) #6

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.


(somekind) #7

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.


(Kriston Pl) #8

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