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();
}
}
}
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…
@Pablo_Wawa
Ja się uczyłem że metody statyczne można wywoływać bez obiektu danej klasy
@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
(Drobok)
12 Grudzień 2011 12:31
#4
Ja również w c# mocny nie jestem
-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
(Grzelix)
12 Grudzień 2011 12:43
#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();
}
}
}
metoda przyjmująca 2 parametry i przyjmująca 3 parametry to dwie różne metody, także zachowuj dokładność w tej kwestii.
jeśli nic nie zwracasz w metodzie (jak w przypadku twojej metody troj) to jest to typ void jak wspomniał @drobok
parametr typu out jest poprawny ale w twoim kodzie nie korzystasz z niego więc nie widzę sensu jego istnienia w danym miejscu