[C#] Metoda - oblicznie pierwiastków trójmianu


(Iamnothouse) #1

Czemu ten program nie działa ?

Ma wyliczać pierwiastki równania:

x^2+px+q

Ale musi być to w metodzie, oto mój kod programu:

using System;

using System.Collections.Generic;


using System.Text;


namespace ConsoleApplication5

{

    class Program

    {

        static int troj(double p, double q, out double Result)

        {

            double delta; double x1; double z; double x2;  


            delta = p*p - (4 * 1 * q);

            if (delta < 0) Console.WriteLine("Delta mniejsza od zera!");

            if (delta == 0)

            { x1= (-1 * p) / 2;

            Console.WriteLine("Pierwiastkiem tego rówania jest: " + x1);

            }

            if (delta > 0) 

            {

            z=Math.Sqrt(delta);

            x1 = (-1 * p) + (-1 * z) / 2;

            x2 = (-1 * p) + z / 2;

            Console.WriteLine("Pierwiastkami tego rówania są: " + x1 + x2);

            }


        }


            static void Main(string[] args)

        {

            double p;

            double q;

            double Result;


            Console.WriteLine("Podaj p: ");

            p = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("podaj q: ");

            q = Convert.ToDouble(Console.ReadLine());

            troj(p, q, x1,x2);

            Console.ReadKey();


        }

    }

}

(Pablo_Wawa) #2

Szczerze mówiąc nie znam się zupełnie na C#, ale (w innych obiektowych językach) jak się deklaruje jakąś klasę (class Program), to trzeba potem stworzyć jakiś obiekt tej klasy poprzez obj=new Program(), a potem użyć tego obiektu wywołując obj.troj(p, q, x1,x2).

Ale może w C# jest inaczej...


(Krzychu91prog) #3

@Pablo_Wawa

Ja się uczyłem że metody statyczne można wywoływać bez obiektu danej klasy :slight_smile:

@IamNotHouse

Gdy dał treść błędu jaki wyrzuca kompilator lub opisał co się dzieje a co powinno dziać. Bez kompilatora nie powiem ci dużo. Widzę, że zmienne x1 i x2 w funkcji main nie są nigdzie tworzone i widze że funkcja troj nie zwraca żadnej wartości pomimo że deklaracja mówi że zwraca int.


(Drobok) #4

Ja również w c# mocny nie jestem :slight_smile:

-nie zwracasz wartości w metodzie typu int (powinno być void, bądź return w każdym wypadku z jakąś wartością int)

-używasz x1, x2 jako argumentów metody, czego w definicji nie masz (nie powinno ich tam w ogóle być)

-masz out double Result, którego wg mnie tam być nie powinno

-system.generic jest niepotrzebny


(Grzelix) #5

Bez wnikania w szczegóły czytając tylko błędy wypisywane przez kompilator można poprawić ten kod:

using System;

using System.Collections.Generic;


using System.Text;


namespace ConsoleApplication4

{

    class Program

    {

        static void troj(double p, double q)

        {

            double delta; double x1; double z; double x2;


            delta = p * p - (4 * 1 * q);

            if (delta < 0) Console.WriteLine("Delta mniejsza od zera!");

            if (delta == 0)

            {

                x1 = (-1 * p) / 2;

                Console.WriteLine("Pierwiastkiem tego rówania jest: " + x1);

            }

            if (delta > 0)

            {

                z = Math.Sqrt(delta);

                x1 = (-1 * p) + (-1 * z) / 2;

                x2 = (-1 * p) + z / 2;

                Console.WriteLine("Pierwiastkami tego rówania są: " + x1 + x2);

            }


        }


        static void Main(string[] args)

        {

            double p;

            double q;

            double Result;


            Console.WriteLine("Podaj p: ");

            p = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("podaj q: ");

            q = Convert.ToDouble(Console.ReadLine());

            troj(p, q);

            Console.ReadKey();


        }

    }

}
  1. metoda przyjmująca 2 parametry i przyjmująca 3 parametry to dwie różne metody, także zachowuj dokładność w tej kwestii.

  2. jeśli nic nie zwracasz w metodzie (jak w przypadku twojej metody troj) to jest to typ void jak wspomniał @drobok

  3. parametr typu out jest poprawny ale w twoim kodzie nie korzystasz z niego więc nie widzę sensu jego istnienia w danym miejscu