2022年8月29日 星期一

Python a410: 解二元一次方程式

a410: 解二元一次方程式

'''

二元一次方程组的练习题铺天盖地地涌向同学们,同学们正苦恼于一次次地四则运算、移项、合并同类项等等。

  他们知道你很聪明,想请你帮他们编一个解二元一次方程组的程序。

  我们假定二元一次方程组的一般格式如下:(a,b,c,d,e,f为常数,x,y为未知数)

    ax+by=c

    dx+ey=f

  程序读入a,b,c,d,e,f后,输出解。

  当然,方程组也有可能存在无解或有无穷解的情况:如果(x,y)没有相对应的实数对满足方程组则无解;相反,如果(x,y)有多组对应的实数对满足方程组则有无数解。

  如果无解,就输出“No answer”;如果有无穷解,就输出“Too many”。


ax+by=c

dx+ey=f


Δ  = |a  b|  = a*e - b*d

       |d  e|


Δx = |c  b| = c*e - b*f

        |f   e|


Δy = |a  c| = a*f - c*d

        |d  f|


1.

Δ不為0

x = Δx/Δ

y = Δy/Δ  ---> 此方程式有一組解


2.

若Δ=0且Δx,Δy也為0,則此二元一次方程式有無限多組解


3.

若Δ=0但Δx,Δy不為0,則此二元一次方程式無解

'''

print ('a410: 解2元1次方程式  ax+by=c , dx+ey=f')

while True:

    try:

        a, b, c, d, e, f = map(int, input('請輸入6個整数,a,b,c,d,e,f --> ').split(' '))    # 將輸入的六個數字分配給 a、b、c、d、e、f 變數

        delta= a*e-d*b

        delta_x =  (c*e-f*b)

        delta_y = a*f-d*c

        print( delta ,  delta_x ,  delta_y)

        

        if (delta != 0):     # 如果分母不為 0

            x =str( round (delta_x / delta  ,2 ) )# 根據公式算出 x

            y =str( round (delta_y / delta  ,2 ) )# 根據公式算出 y

            print('此方程式有一組解')

            print('x=', x)

            print('y=', y)

        else:                 # 如果分母為 0

            if (delta_x == 0 ) and  (delta_y == 0) :

                print('Too many')    # 如果分子為 0,則有無窮解 ( x 和 y 可以是任意數 )

            else:

                print('No answer')   # 分子不為零則無解

    except:

        break



>>> %Run a410.py

a410: 解2元1次方程式  ax+by=c , dx+ey=f

請輸入6個整数,a,b,c,d,e,f --> 1 1 2 1 -1 0

-2 -2 -2

此方程式有一組解

x= 1.0

y= 1.0

請輸入6個整数,a,b,c,d,e,f --> 1 1 2 2 0 0

-2 0 -4

此方程式有一組解

x= -0.0

y= 2.0

請輸入6個整数,a,b,c,d,e,f --> 

>>> 

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...