PDA

Просмотр полной версии : переход с паскаляABC на C#


lovepsone
14.09.2011, 17:53
Вот решил заняться программированием, (перед этим изучал php и mysql) начал изучать сразу паскаль, после 2-ух дней читания книги по паскалю и 1-одной недели практики на нем, решил перейти на c# и попробовал конвертировать скрипт квадратного уравнения с паскаля на c#.
Вот код паскаля (может где то ошибся не пинайте сильно)
program lovepsone;
var x1,x2,x3,a,b,c,d: real;
begin
writeln('введите числа a,b,c для квадратного уравнения');
write('a='); readln(a);
write('b='); readln(b);
write('c='); readln(c);
if(a<>0)and(b<>0)and(c<>0)then d:=b*b-4*a*c;
if(d>0)and (a<>0)and(b<>0)and(c<>0) then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('x1=',x1:2:2);
writeln('x2=',x2:2:2);
end
else if(d=0)and(a<>0)and(b<>0)and(c<>0)then
begin
x1:=(-b)/(2*a);
write('x1=',x1:2:2);
end
else if(b=0)and(a<>0)and(c<0)then
begin
x1:=sqrt(-c/a);
x2:=(-sqrt(-c/a));
writeln('x1=',x1:2:2);
writeln('x2=',x2:2:2);
end
else if(b=0)and(a<>0)and(c>0)then write('Из отрицательного числа квадрат не выделишь')
else if(c=0)and(a<>0)and(b<>0)then
begin
x1:=(-b);
x2:=0;
writeln('x1=',x1:2:2);
writeln('x2=',x2:2:2);
end
else if(a=0)then write('"a" не должно ровняться нулю') else write('нет корней в данном уравнении');
end.
на паскале вроде работает все нормально!
вот код на c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace equation
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void solution_Click(object sender, RoutedEventArgs e)
{
int a = 0, b = 0, c = 0;
double D = 0, x1 = 0, x2 = 0;
string str = "";
try
{
a = Convert.ToInt32(textBox_a.Text);
}
catch
{
output.Items.Clear();
output.Items.Add("Можно вводить только числовые значения");
textBox_a.Select(0, textBox_a.Text.Length);
}
try
{
b = Convert.ToInt32(textBox_b.Text);
}
catch
{
output.Items.Clear();
output.Items.Add("Можно вводить только числовые значения");
textBox_b.Select(0, textBox_b.Text.Length);
}
try
{
c = Convert.ToInt32(textBox_c.Text);
}
catch
{
output.Items.Clear();
output.Items.Add("Можно вводить только числовые значения");
textBox_c.Select(0, textBox_c.Text.Length);
}
if (a != 0 & b != 0 & c != 0) // ставим условие: если коэффициенты 'а,b,c' не ровны 0 то находим дискриминант
{
D = (Math.Pow(b, 2)) - (4 * a * c); // находим дискриминант

if (a == 0) // ставим условие: если 'а=0', то пишем что 'a' не может быть равным нулю
{
output.Items.Clear();
output.Items.Add("'a' не может быть равным нулю");
}
else if (D < 0) // ставим условие: если 'D<0', уравнение не имеет действительных корней
{
output.Items.Clear();
output.Items.Add("Дискриминант d < 0. Решение квадратного уравнения невозможно.");
}
else if (D == 0) // ставим условие: если 'D=0', то имеем один корень
{
x1 = -b / 2 * a;
output.Items.Clear();
str = "D = " + D;
output.Items.Add(str);
str = "X = " + x1;
output.Items.Add(str);
}
else if (D > 0) // ставим условие: если 'D>0', то имеем два корня
{
x1 = (-b - (Math.Sqrt(D))) / (2 * a);
x2 = (-b + (Math.Sqrt(D))) / (2 * a);
output.Items.Clear();
str = "D = " + D;
output.Items.Add(str);
str = "X1 = " + x1;
output.Items.Add(str);
str = "X2 = " + x2;
output.Items.Add(str);
}
}
if (a != 0 & b == 0 & c != 0) // ставим условие: если коэффициенты 'а,c' не ровны 0, но 'b=0',
{ // тогда получается не полное квадратное уравнение
if (a == 0) // ставим условие: если 'а=0', то пишем что 'a' не может быть равным нулю
{
output.Items.Clear();
output.Items.Add("'a' не может быть равным нулю");
}
else if (c < 0)
{
x1 = (Math.Sqrt(-c / a));
x2 = (-(Math.Sqrt(-c / a)));
output.Items.Clear();
output.Items.Add(str);
str = "X1 = " + x1;
output.Items.Add(str);
str = "X2 = " + x2;
output.Items.Add(str);
}
else if (c > 0)
{
output.Items.Add("Из отрицацельного числа квадрат не извлечешь");
}
}
if (a != 0 & b != 0 & c == 0) // ставим условие: если коэффициенты 'а,b' не ровны 0, но 'c=0',
{ // тогда получается не полное квадратное уровнение
x1 = -b;
x2 = 0;
output.Items.Clear();
output.Items.Add(str);
str = "X1 = " + x1;
output.Items.Add(str);
str = "X2 = " + x2;
output.Items.Add(str);
}
else if (a == 0) // ставим условие: если 'а=0', то пишем что 'a' не может быть равным нулю
{
output.Items.Clear();
output.Items.Add("'a' не может быть равным нулю");
}
else
{
output.Items.Clear();
output.Items.Add("уравнение не имеет решений");
}
}
}
}
Но вот тут то что то не правильно и не могу понять что (выборочно читал книгу по c#)
в общем проблема в том что кода придаю все значения переменным программа пишет что "уравнение не имеет решений". (вот к примеру a=1, b=2,c=-3)
В чем ошибка то ???

TOM_RUS
14.09.2011, 21:17
"&" двойные надо.