연립일차방정식은 ax+by+c=0, a'x+b'y+c'=0 의 형태이다, 이때 연립일차방정식의 해를 자동으로 구해주는 프로그램을 만들어라.
from math import lcm
from fractions import Fraction as frac #해를 float형이 아닌 분수 꼴로 나타내기 위해서
e1=list(map(int, input().split())) #첫 번째 방정식
e2=list(map(int, input().split())) #두 번째 방정식
A,B,C=e1
a,b,c=e2 #계수들을 따로 뽑음
if (A*b==a*B): #해가 하나가 아닌 경우
if (A*c==a*C): #해가 무수히 많은 경우
print('해가 무수히 많습니다.')
else: #해가 없는 경우
print('해가 없습니다.')
else:
l=lcm(B, b)
f1=int(l/B)
f2=int(l/b)
for i in range(3): #y의 계수를 맞추는 과정(가감법)
e1[i]*=f1
e2[i]*=f2
e3=[]
for j in range(3): #y를 소거하고 x만 남기는 과정
e3.append(e1[j]-e2[j])
x=frac(e3[2], e3[0]) #x의 값
y=(-A*x - C)/B #구한 x의 값을 첫 번째 방정식에 대입하여 y을 구하는 과정
print('x =',x,'y =',y)
2022年02月11日 06:03
import re
s = input() #입력
s = re.sub('x+|y+|=0| ]',',',s) # x+ y+ 또는 =0 문자를 쉼표로 대체
eqs = []
eqs = s.split(',')#쉼표로 끊어서 eqs 리스트에 저장
while '' in eqs:
eqs.remove('') #eqs의 모든 필요없는 값('') 삭제
a = int(eqs[0])
b = int(eqs[1])
c = int(eqs[2])
d = int(eqs[3])
e = int(eqs[4])
f = int(eqs[5])#각각을 문자로 저장
if(a/d==b/e and b/e==c/f): #부정(해가 무수히 많음) 조건
print("부정")
elif(a/d==b/e and b/e != c/f): #불능(해가 없음) 조건
print("불능")
else:#아니다(해가 하나다)
print("x=" + str((d*f-c*e)/(a*e-b*d)))#x값 계산 및 문자로 변환하여 출력
print("y=" + str((a*f-c*d)/(b*d-d*e)))#y값 계산 및 문자로 변환하여 출력
"""
x값 공식 유도
ax + by + c = 0
dx + ey + f = 0 에서
아래 식 양변에 a/d 를 곱해서 변형:
ax + by + c = 0
ax + (ae/d)y+ af/d = 0,
가감법 시행:
(b - ae/d)y = af/d - c, (bd - ae)y = af - cd
-->> y = af-cd/bd-ae
y값 공식도 같은 방법으로 유도 가능
"""
2022年04月02日 10:16
eq_1 = input("첫번째 방정식의 계수를 입력해주세요(ex.x+3y+1=0이면 1,3,1):") #방정식1입력
eq_2 = input("두번째 방정식의 계수를 입력해주세요(ex.x+3y+1=0이면 1,3,1):") #방정식2입력
eq_1_list = eq_1.split(',')
eq_2_list = eq_2.split(',')
x_1 = int(eq_1_list[0]);y_1 = int(eq_1_list[1]);c_1 = int(eq_1_list[2])
x_2 = int(eq_2_list[0]);y_2 = int(eq_2_list[1]);c_2 = int(eq_2_list[2]) #각 방정식의 계수들만 따로 뽑아오기
#해가 특수한 경우
if x_1/x_2 == y_1/y_2 == c_1/c_2:
print("x는 모든실수, y는 모든 실수")
elif x_1/x_2 == y_1/y_2 != c_1/c_2:
print("해가 없다")
#일반적인 경우
else:
p = x_1/x_2 #가감법 사용을 위해 곱해주는 값을 p로 정의
eq_list = [] #가감법 계산 후 계수들을 x,y,상수 위치대로 정리하기 위한 리스트
for i in range(3):
eq_list.append(int(eq_1_list[i])-int(eq_2_list[i])) #가감법 계산 eq_list[0]==0
y = -(int(eq_list[2]))/int(eq_list[1]) #ty+u = 0 의 일차방정식 해 계산
x = (int(c_1)-int(y_1)*y)/int(x_1) #위에서 구한 y값을 대입하여 x계산
print(x,y)
int equation(const double var1, const double var2) { double t_var1[3]; double t_var2[3]; double x, y;
printf("연립 방정식>>\n");
printf("%lgx + %lgy = %lg\n", var1[0], var1[1], var1[2]);
printf("%lgx + %lgy = %lg\n", var2[0], var2[1], var2[2]);
/* x, y의 계수가 모두 0이면 잘못된 방정식 */
if(var1[0] == 0 && var1[1] == 0) {
return 0;
}
if(var2[0] == 0 && var2[1] == 0) {
return 0;
}
/* 두 방정식 x의 계수가 각각 0이면 */
if(var1[0] == 0 && var2[0] == 0) {
y = var1[2] / var1[1];
if(y != (var2[2] / var2[1])) {
return 0;
}
printf("y = %lg\n", y);
return 1;
}
/* 두 방정식 y의 계수가 각각 0이면 */
if(var1[1] == 0 && var2[1] == 0) {
x = var1[2] / var1[0];
if(x != (var2[2] / var2[0])) {
return 0;
}
printf("x = %lg\n", x);
return 1;
}
/* x의 계수를 같게 하기 위해서 두 방정식의 x계수를 상대방 방정식에 곱함 */
for(int i = 0; i < 3; i++) {
t_var1[i] = var1[i] * var2[0];
t_var2[i] = var2[i] * var1[0];
}
if(var1[0] != 0) {
y = (t_var2[2] - t_var1[2]) / (t_var2[1] - t_var1[1]);
x = (var1[2] - var1[1] * y) / var1[0];
} else {
y = var1[2] / var1[1];
x = (var2[2] - var2[1] * y) / var2[0];
}
printf("\n방정식 해>>\n");
printf("x = %lg\n", x);
printf("y = %lg\n", y);
return 1;
}
int main() { double var1[3]; double var2[3]; printf("방정식 a1x + b1y = c1의 \n a1 b1 c1 실수값 입력: "); scanf("%lf %lf %lf", &var1[0], &var1[1], &var1[2]); printf("방정식 a2x + b2y = c2의 \n a2 b2 c2 실수값 입력: "); scanf("%lf %lf %lf", &var2[0], &var2[1], &var2[2]);
if(equation(var1, var2) == 0) {
fprintf(stderr, "\n방정식 오류...\n");
return 1;
}
return 0;
}
2022年06月03日 07:39
자바로 풀어봤습니다.
import java.util.Scanner;
public class test {
// x 계수 찾기
public static Integer findCoeffx(String equation) {
if(equation.split("x|X")[0].equals("")) {
return 1;
}else if(equation.split("x|X")[0].equals("-")){
return -1;
}else if((equation.contains("x")|equation.contains("X"))==false){
return 0;
}else {
return Integer.parseInt(equation.split("x|X")[0]);
}
}
// y 계수 찾기
public static Integer findCoeffy(String equation) {
if(equation.split("x|X|y|Y")[1].equals("+")) {
return 1;
}else if(equation.split("x|X|y|Y")[1].equals("-")){
return -1;
}else if(equation.split("y|Y")[0].equals("")|equation.split("y|Y")[0].equals("-")) {
return 0;
}else if((equation.contains("y")|equation.contains("Y"))==false) {
return 0;
}else {
return Integer.parseInt(equation.split("x|X|y|Y")[1]);
}
}
// 상수 찾기
public static Integer findConstant(String equation) {
if(equation.contains("=")==false) {
return 0;
}else {
return Integer.parseInt(equation.split("=")[1]);
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] equations = new String[2];
int[] coeffx = new int[2];
int[] coeffy = new int[2];
int[] constant = new int[2];
// 일차방정식 입력 받기
int count = 0;
float answery, answerx;
String inputX, inputY;
while(true) {
System.out.printf("%d번째 일차방정식(ax+by=c):", count+1);
equations[count] = scan.next();
// 일차방정식의 계수 뽑아서 배열에 저장
coeffx[count] = findCoeffx(equations[count]);
coeffy[count] = findCoeffy(equations[count]);
constant[count] = findConstant(equations[count]);
// 만약 계수가 0이면 다시 입력
if(coeffx[count]==0|coeffy[count]==0|constant[count]==0) {
System.out.println("잘못 입력하셨습니다. 다시 입력하시오.");
}else {
count++;
}
// 방정식을 2개 입력했는지
if(count==2) {
break;
}
}
// y 값 구하기
int diffy = coeffy[0]*coeffx[1] - coeffy[1]*coeffx[0];
int diffConstant = constant[0]*coeffx[1] - constant[1]*coeffx[0];
answery = (float)diffConstant/diffy;
// x 값 구하기
answerx = (constant[0]-coeffy[0]*answery)/coeffx[0];
// 결과 출력
System.out.printf("x : %f\n", answerx);
System.out.printf("y : %f", answery);
}
}
# ax + by + c = 0
# dx + ey + f = 0
from fractions import Fraction as frac
eq1 = list(map(int, input("첫번째 연립방정식의 계수>> ").split()))
eq2 = list(map(int, input("두번째 연립방정식의 계수>> ").split()))
a = eq1[0]
b = eq1[1]
c = eq1[2]
d = eq2[0]
e = eq2[1]
f = eq2[2]
if a/d == b/e and b/e != c/f:
print("해가 없음")
elif a/d == b/e == c/f:
print("x, y는 모든 실수")
else:
g_eq1 = list(map(lambda k: k*d, eq1))
g_eq2 = list(map(lambda k: k*a, eq2))
pm = []
for i in range(0,3):
pm.append(g_eq1[i] - g_eq2[i])
y = frac(-(pm[2]), pm[1])
x = frac(-(b*y)-c, a)
print("x = {0}, y = {1}".format(x, y))
초보라 간단한 문제도 오래 걸리네요 열심히 해보겠습니당
2022年07月09日 19:25
# Codingdojang 273
import numpy as np
equ_1_a,equ_1_b,equ_1_c=input("일차방정식_1을 입력 하시오.(ax+by+c=0):").split()
equ_2_a,equ_2_b,equ_2_c=input("일차방정식_2을 입력 하시오.(a'x+b'y+c'=0):").split()
list_1=[equ_1_a,equ_1_b,equ_1_c]
list_2=[equ_2_a,equ_2_b,equ_2_c]
list_1_int=np.array([int(i) for i in list_1]) # list는 나눗셈 연산이 안돼서 numpy array를 적용 하였습니다.
list_2_int=np.array([int(j) for j in list_2])
list_1_int=list_1_int/list_1_int[0]
list_2_int=list_2_int/list_2_int[0]
new_eq=list_1_int-list_2_int
ans_y=-1*new_eq[2]/new_eq[1]
ans_x=-1*(list_1_int[1]*ans_y+list_1_int[2])
print("X 값:%d,Y 값:%d"%(ans_x,ans_y))
2022年09月06日 14:50
p1 = input("첫번째 연립방정식의 계수를 입력하시오 (ex.x+2y+3 = 0 이면 1,2,3):")
p2 = input("두번째 연립방정식의 계수를 입력하시오 (ex.x+2y+3 = 0 이면 1,2,3):")
p1_list = p1.split(',')
p2_list = p2.split(',')
print(p1_list)
print(p2_list)
if int(p1_list[0]) /int(p2_list[0]) == int(p1_list[1]) / int(p2_list[1]) == int(p1_list[2]) / int(p2_list[2]) :
print('해가 무수히 많습니다')
elif int(p1_list[0]) /int(p2_list[0]) == int(p1_list[1]) / int(p2_list[1]) != int(p1_list[2]) / int(p2_list[2]) :
print('해가 없습니다')
else :
m = int(p2_list[0]) / int(p1_list[0])
y = -(m*int(p1_list[2])-int(p2_list[2])) / (m*int(p1_list[1])-int(p2_list[1]))
x = -(int(p1_list[1])*y+int(p1_list[2]))/ int(p1_list[0])
print(f'X값 : {x:.4f} Y값 : {y:.4f}')
feq = list(map(int,input("Input a,b,c (ax+by+c=0):".split(',')))
seq = list(map(int,input("Input a',b',c' (a'x+b'y+c'=0):".split(',')))
lists_1 = []
x = 0
y = 0
div_1 = feq[0]
div_2 = seq[0]
for i in range(3):
feq[i] = feq[i]/div_1
seq[i] = seq[i]/div_2
for j,k in zip(feq,seq):
lists_1.append(round(float(j-k),2))
if lists_1[2] == 0:
y = 0
else:
y = lists_1[2]*(-1)/lists_1[1]
feq[1] = feq[1] * y
x = (feq[1]*(-1)+feq[2]*(-1))/feq[0]
print("X=",x," ","Y=",y)
풀이 작성