Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
1

Как решить квадратное уравнение?

26.10.2013, 07:51. Показов 6143. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане. Прошу помощи. Необходимо переписать код с c# в python. Пробовал преобразовывать через sharpdevelop, но выдает много синтаксических ошибок. Ранее питона не изучал.
Собственно сам код:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication2
{
    public class Program
    {
        static void Main(string[] args)
        {
            equation eq = new equation();
            eq.print();
            Console.WriteLine(eq.calculate());
            Console.ReadKey();
        }
    }//class program
 
 
    public class equation
    {
        private float a;
        private float b;
        private float c;
 
        public equation()
        {
            a = input("a", "Введите первый коэффициент, не равный нулю:");
            b = input("b", "Введите второй коэффициент, не равный нулю:");
            c = input("c", "Введите третий коэффициент:");
        }
 
        public equation(float a, float b, float c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
            if (a == 0) throw new InvalidOperationException("Уравнение не является квадратным");
            
        }
 
        public void print()
        {
            Console.WriteLine("Полученное уравнение: {0}x^2+{1}x+{2}=0", a, b, c);
        }
 
        public string calculate()
        {
            double d;
            string result = string.Empty;
 
            d = b * b - 4 * a * c;
            Console.WriteLine("Дискриминант равен {0}", d);
            if (d < 0)// с комплексными - сделано
            {
                result += string.Format("x1 = ({0}+i*({1}^(1/2)))/(2*{2})", -b, d, a);
                
                result += string.Format("x2 = ({0}-i*({1}^(1/2)))/(2*{2})", -b, d, a);
            }
            else if (d == 0)
            {
                if (-b / (2 * a) % 1 == 0)
 
                    result += string.Format("x = {0:0.##}", -b / (2 * a));
                else
 
                    result += string.Format("x = {0:0.##}/{2:0.##}", -b, 2 * a);
            }
            else if (d > 0)
            {
                if (((-b + Math.Sqrt(d)) / (2 * a)) % 1 == 0)
 
                    result += string.Format("x1 = {0:0.##}", (-b + Math.Sqrt(d)) / (2 * a));
               
                else
                    result += string.Format("x1 = ({0:0.##})/({1:0.##})", (-b + Math.Sqrt(d)), a * 2);
                
                if (((-b - Math.Sqrt(d)) / (2 * a)) % 1 == 0)
 
                    result += string.Format("x2 = {0:0.##}", (-b - Math.Sqrt(d)) / (2 * a));
                
                else
 
                    result += string.Format("x2 = ({0:0.##})/({1:0.##})", (-b - Math.Sqrt(d)), a * 2);
            }
 
            return result;
        }
 
        //проверяет коэффициенты на соответствие требованиям.
        private float input(string name, string msg)
        {
            Console.WriteLine(msg);
            string temp = Console.ReadLine();
            const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            const string regexp2 = @"0*([\.,]?0*)?";
            while ((name != "c" && (regCheck(temp, regexp2) || !regCheck(temp, regexp))) ||
            (name == "c" && !regCheck(temp, regexp)))
            {
                Console.WriteLine("Ошибка!\nЗначение {0} введено неверно!\n" +
                                  "Введите верное число, или q для выхода:", name);
                if (temp == "q")
                    Environment.Exit(0);
                temp = Console.ReadLine();
            }
            return Convert.ToSingle(temp, new CultureInfo("en-US"));
        }
 
        //Костыль на регулярки.длина совпадения будет не равна длине переданной строки, вернет фалс
        public static bool regCheck(string str, string regexp)
        {
            Match m = Regex.Match(str, regexp);
            if (m.Length != str.Length)
                return false;
            else
                return true;
        }
    }
}


И юнит тесты:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ConsoleApplication2;
using System.Text.RegularExpressions;
 
namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void GetTwoComplex()
        {
            equation eq = new equation(5f, 5f, 4f);
 
            var test = eq.calculate();
 
            Assert.AreEqual(test, "x1 = (-5+i*(-55^(1/2)))/(2*5)x2 = (-5-i*(-55^(1/2)))/(2*5)");
        }
 
        [TestMethod]
        public void GetOneRoot()
        {
            equation eq = new equation(4f, 8f, 4f);
 
            var test = eq.calculate();
 
            Assert.AreEqual(test, "x = -1");
        }
        [TestMethod]
        public void GetTwoRoot()
        {
            equation eq = new equation(8f, 14f, 6f);
 
            var test = eq.calculate();
 
            Assert.AreEqual(test, "x1 = (-12)/(16)x2 = -1");
 
        }
 
        [TestMethod]
        [ExpectedException(typeof(InvalidOperationException))]
        public void ArgZero()
        {
            equation eq = new equation(0f, 3f, 1f);
 
 
        }
        [TestMethod]
        public void regCheck_Number()
        {  const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            var b = equation.regCheck("12", regexp);
            Assert.AreEqual(b, true);
        }
          
        [TestMethod]
        public void regCheck_NotNumber()
        {
            const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            var b = equation.regCheck("12.asd", regexp);
            Assert.AreEqual(b, false);
        }
        
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2013, 07:51
Ответы с готовыми решениями:

Решить квадратное уравнение
Дано квадратное уравнение ax^2+bx+c=0. Напишите функцию, которая принимает на вход три числа a, b,...

Решить квадратное уравнение ( найти x1, x2 ), Разобрать три возможных варианта
from math import sqrt a = input(&quot;a = &quot;) b = input(&quot;b = &quot;) c = input(&quot;c = &quot;) d = ((b * b) -...

Квадратное уравнение
На вход программы подаётся запись квадратного уравнения. Гарантируется, что коэффициент уравнения...

Квадратное уравнение. Python
a = int(input('Коэффицент a: ')) b = int(input('Коэффицент b: ')) c = int(input('Коэффицент c:...

Квадратное уравнение по Виета и Дискриминанту
Доброго времени суток! Очень прошу написать Вас программу (на Python), которая предоставит выбор...

44
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
09.11.2013, 12:18  [ТС] 21
Author24 — интернет-сервис помощи студентам
Wolkodav, допустим на примере python2(который выше) получится со своими коэффициентами? я так понимаю считывание будет как
Python
1
2
3
file_name = r"c:\prog.py"
file = open(prog.py)
f= read()
а как считать результат?
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.11.2013, 12:24 22
Xendler, откуда? Метод calculate вернёт вам ответ, а уж что вы с ним будете делать, сугубо ваше дело.
1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
09.11.2013, 12:30  [ТС] 23
Wolkodav, Не много не понял как именно нужно составить новый код, дабы подставить сразу нужные значения(сразу в коде) и обратиться именно к калькулейту.
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.11.2013, 12:33 24
Xendler, возьмите мой класс, затем считайте данные откуда вам надо, затем создайте объект класса, затем вызовите метод calculate, вы получите решение данного уравнения, затем делайте с этим решение, что хотите...
1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
09.11.2013, 13:37  [ТС] 25
Wolkodav, попытался составить что то типо такого, но вылетает исключение, что якобы не существует класса Equation
Python
1
2
3
4
5
6
7
from PythonApplication5 import Equation
def calculate():
    self.a = 3
    self.b = 5
    self.c = 6
calculate()
print ('x',x)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.11.2013, 19:57 26
Цитата Сообщение от Xendler Посмотреть сообщение
не могли бы вы показать на примере этого
Python
1
2
3
r, i = -B / 2.0 / A, math.sqrt(-D) / 2.0 / A
print('x1 = {}{:+}i'.format(r, i))
print('x2 = {}{:+}i'.format(r, -i))
1
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.11.2013, 20:37 27
Xendler, ну значит нету там этого класса)
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
10.11.2013, 07:19  [ТС] 28
Wolkodav, ну а как там его не может быть, если он есть?=)
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
10.11.2013, 10:20 29
Xendler, да у вас не класса нету,
Цитата Сообщение от Xendler Посмотреть сообщение
Python
1
2
3
4
5
6
def calculate():
    self.a = 3
    self.b = 5
    self.c = 6
calculate()
print ('x',x)
Просто объясните мне что вы тут делаете?

Добавлено через 27 секунд
Вы понимаете, что тут написали или нет?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.11.2013, 10:31 30
Цитата Сообщение от Xendler Посмотреть сообщение
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication2
{
    public class Program
    {
        static void Main(string[] args)
        {
            equation eq = new equation();
            eq.print();
            Console.WriteLine(eq.calculate());
            Console.ReadKey();
        }
    }//class program
 
 
    public class equation
    {
        private float a;
        private float b;
        private float c;
 
        public equation()
        {
            a = input("a", "Введите первый коэффициент, не равный нулю:");
            b = input("b", "Введите второй коэффициент, не равный нулю:");
            c = input("c", "Введите третий коэффициент:");
        }
 
        public equation(float a, float b, float c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
            if (a == 0) throw new InvalidOperationException("Уравнение не является квадратным");
            
        }
 
        public void print()
        {
            Console.WriteLine("Полученное уравнение: {0}x^2+{1}x+{2}=0", a, b, c);
        }
 
        public string calculate()
        {
            double d;
            string result = string.Empty;
 
            d = b * b - 4 * a * c;
            Console.WriteLine("Дискриминант равен {0}", d);
            if (d < 0)// с комплексными - сделано
            {
                result += string.Format("x1 = ({0}+i*({1}^(1/2)))/(2*{2})", -b, d, a);
                
                result += string.Format("x2 = ({0}-i*({1}^(1/2)))/(2*{2})", -b, d, a);
            }
            else if (d == 0)
            {
                if (-b / (2 * a) % 1 == 0)
 
                    result += string.Format("x = {0:0.##}", -b / (2 * a));
                else
 
                    result += string.Format("x = {0:0.##}/{2:0.##}", -b, 2 * a);
            }
            else if (d > 0)
            {
                if (((-b + Math.Sqrt(d)) / (2 * a)) % 1 == 0)
 
                    result += string.Format("x1 = {0:0.##}", (-b + Math.Sqrt(d)) / (2 * a));
               
                else
                    result += string.Format("x1 = ({0:0.##})/({1:0.##})", (-b + Math.Sqrt(d)), a * 2);
                
                if (((-b - Math.Sqrt(d)) / (2 * a)) % 1 == 0)
 
                    result += string.Format("x2 = {0:0.##}", (-b - Math.Sqrt(d)) / (2 * a));
                
                else
 
                    result += string.Format("x2 = ({0:0.##})/({1:0.##})", (-b - Math.Sqrt(d)), a * 2);
            }
 
            return result;
        }
 
        //проверяет коэффициенты на соответствие требованиям.
        private float input(string name, string msg)
        {
            Console.WriteLine(msg);
            string temp = Console.ReadLine();
            const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            const string regexp2 = @"0*([\.,]?0*)?";
            while ((name != "c" && (regCheck(temp, regexp2) || !regCheck(temp, regexp))) ||
            (name == "c" && !regCheck(temp, regexp)))
            {
                Console.WriteLine("Ошибка!\nЗначение {0} введено неверно!\n" +
                                  "Введите верное число, или q для выхода:", name);
                if (temp == "q")
                    Environment.Exit(0);
                temp = Console.ReadLine();
            }
            return Convert.ToSingle(temp, new CultureInfo("en-US"));
        }
 
        //Костыль на регулярки.длина совпадения будет не равна длине переданной строки, вернет фалс
        public static bool regCheck(string str, string regexp)
        {
            Match m = Regex.Match(str, regexp);
            if (m.Length != str.Length)
                return false;
            else
                return true;
        }
    }
}
Язык, на котором столь монструозно решается вшивое квадратное уравнение, всё ещё существует?! Однако! Задача ровно в 6 действий, считая с двумя альтернативами.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
10.11.2013, 11:50  [ТС] 31
Wolkodav, честно? пишу интуитивно=) Т.к. языку в универе не учат, а просто говорят - делайте. На данный момент состоит задача написать в VS13 присоединенную программу, которая будет обращаться к основной и сразу выводить ответ с заранее введенными коэффициентами. Собственно выше попытался обратиться к основной программе, потом обратиться к классу и методу.
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
10.11.2013, 12:13 32
Xendler, вот оно и водно, хотя бы введение прочитайте в язык, просто, вы не обижайтесь, но пишите редкостную охинею...
Python
1
2
3
4
5
from PythonApplication5 import Equation
def calculate():
    equation = Equation(3, 5, 6) # Создаём объект класса
    x = equation.calculate() # Тут вызываем метод класса ( он у нас привязан к объекту)
    print ('x',x) # Выводим ответ.

Не по теме:

А по поводу того, что не учат, а говорят, просто делайте, не за что не поверю, что вас с бухты-барахты дали это делать. На пары надо ходить чаще... Бывало что учат плохо, но вот так, ну не было ниразу...



Добавлено через 1 минуту

Не по теме:

Xendler, в конце концов вы же писали на C#, зная один яп, можно без особых трудностей освоить основы другого языка, тем более python, местами он в разы понятнее C( любого, от обычного до C#)

1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
10.11.2013, 13:16  [ТС] 33

Не по теме:

Wolkodav, местами он действительно лучше. Но вот насчет обучения я серьезно. посещаю все пары без исключения по языкам программирования. Шарпу так и вообще пришлось обучаться у друзей-программистов.



Добавлено через 12 минут
Wolkodav, к сожалению идет ошибка
Python
1
No module named 'PythonApplication5'
хотя в программе указана ссылка до основного кода
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
10.11.2013, 20:44 34
Xendler, ну вам явно сказали, что не видит он модуль 'PythonApplication5', киньте все в одну папку...
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
11.11.2013, 02:36  [ТС] 35
Wolkodav, ок, теперь запустилось. Но при запуске просто выдает :
Python
1
Press any key to continue
без всякого вывода решения
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
14.11.2013, 08:53  [ТС] 36
не подскажете из-за чего не выводит?
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.11.2013, 19:48 37
Xendler, код полный в студию.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
15.11.2013, 00:30  [ТС] 38
Wolkodav,
основной код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import math
import sys
import cmath
class Equation:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
 
    def D(self):
        return self.b * self.b - 4 * self.a * self.c
 
    def calculate(self):
        D = self.D()
        print ('D=',D)
        if D == 0:
            return (-self.b) / (2.0 * self.a)
        if D>0:
            return ((-self.b) + math.sqrt(D)) / (2.0 * self.a), ((-self.b) - math.sqrt(D)) / (2.0 * self.a)
        else:
            return ((-self.b) + cmath.sqrt(D)) / (2.0 * self.a), ((-self.b) - cmath.sqrt(D)) / (2.0 * self.a)
 
def main():
    A = input("input A: ")
    A = float(A)
    if A == 0:
        print ("Not a quadratic equation")
        sys.exit()
    B = input("input B:")
    B = float(B)
    C = input("input C: ")
    C = float(C)
    equation = Equation(A, B, C)
    x = equation.calculate()
    print ('x',x)
if __name__ == '__main__':
    main()


дополнительный код
Python
1
2
3
4
5
6
7
8
9
import sys
import math
import cmath
 
from PythonApplication5 import Equation
def calculate():
    equation=Equation(3,5,6)
    x = equation.calculate()
    print ('x',x)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.11.2013, 01:21 39
Цитата Сообщение от Xendler Посмотреть сообщение
На данный момент состоит задача написать в VS13 присоединенную программу, которая будет обращаться к основной и сразу выводить ответ с заранее введенными коэффициентами.
что-то я ничего не понял: что значит "присоединённую программу" и причём тут Visual Studio вообще ?
надо бы сначала написать тесты для решателя квадратных уравнений, потом написать решатель квадратных уравнений, а уже потом думать, как там, куда и что присоединять

переписывать C#-код из первого сообщения смысла нет, потому что там некачественный код
можно воспроизвести тесты, чтобы они делали примерно то же самое, что и C#-тесты из первого сообщения

тесты гарантируют, что программа, получая любые коэффициенты, возвращает для них правильный результат, что программа правильная
они не просто так делаются
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
15.11.2013, 09:28  [ТС] 40
accept, мы пишем просто через PTVS в VS. пишем там программу на питоне, потом создаем дополнительный код, чтобы он обращался к основному и, с заранее заданными в доп. коде коэф, выводил сразу решение.
0
15.11.2013, 09:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2013, 09:28
Помогаю со студенческими работами здесь

Как решить дифференциальное уравнение второго порядка?
всем привет) подскажите, пожалуйста, как решить краевую задачу со 2 производной 2 рода на python'e,...

Квадратное уравнение, вывести корни в порядке возрастания
Добрый день! Попапалась задача, казалось бы простая: Даны действительные коэффициенты a, b, c,...

Решите квадратное уравнение и выведите все его корни
Даны действительные коэффициенты a, b, c, при этом a&lt;&gt;0 . Решите квадратное уравнение ax^2+bx+c=0 и...

Проблемка : задачка Квадратное уравнение, на 26 тесте пишет рантайм еррор. Всё просмотрел, не знаю что делать
import math a, b, c = map(int, input().split()) x1 = 0 x2 = 0 dis = b**2 - 4 * a * c krd =...

Решить уравнение
Даны действительные числа а0,….., а6. Получить х=1,3,4 значения p(x+1)-p(x), где...

Решить уравнение
Нужно написать код для решения задачи


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru