- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
int zerocheck(float a,float b,float c,int d){
if(a==0){
if(b==0){
if(c==0)return 0;
else return 1;
}else{
if(d==1){
y_1=c/b;
return 2;
}else{
y2=c/b;
return 2;
}
}
}else{
if(b==0){
if(d==1){
x1=c/a;
return 3;
}else{
x2=c/a;
return 3;
}
}else{
return 4;
}
}
}
int main() {
float a,b,c,d,e,f;
int ch1,ch2;
.....
ch1=zerocheck(a,b,c,1);
ch2=zerocheck(d,e,f,2);
if(ch1==1)printf("\nNo answer. 0*X + 0*Y = %f",c);
if(ch2==1)printf("\nNo answer. 0*X + 0*Y = %f",f);
if(ch1==0 && ch2==0)printf("\nAny variable is answer!");
if(ch1==0 && ch2==2)printf("\nX - any. Y = %f",y2);
if(ch1==0 && ch2==3)printf("\nX = %f. Y - any",x2);
if(ch1==0 && ch2==4)printf("\n%f*X + %f*Y = %f",d,e,f);
if(ch1==2 && ch2==0)printf("\nX - any. Y = %f",y_1);
if(ch1==2 && ch2==2){
if(y_1==y2)printf("\nX - any. Y = %f",y_1);
else printf("\nY1 (%f) != Y2 (%f)",y_1,y2);
}
if(ch1==2 && ch2==3)printf("\nX = %f. Y = %f",x2,y_1);
if(ch1==2 && ch2==4){
y2=y_1;
x2=(f-e*y2)/d;
printf("\nX = %f. Y = %f",x2,y_1);
}
if(ch1==3 && ch2==0)printf("\nX = %f. Y - any",x1);
if(ch1==3 && ch2==2)printf("\nX = %f. Y = %f",x1,y2);
if(ch1==3 && ch2==3){
if(x1==x2)printf("\nX = %f. Y - any",x1);
else printf("\nX1 (%f) != X2 (%f)",x1,x2);
}
if(ch1==3 && ch2==4){
x2=x1;
y2=(f-d*x2)/e;
printf("\nX = %f. Y = %f",x1,y2);
}
if(ch1==4 && ch2==0)printf("\n%f*X + %f*Y = %f",a,b,c);
if(ch1==4 && ch2==2){
y_1=y2;
x1=(c-b*y_1)/a;
printf("\nX = %f. Y = %f",x1,y2);
}
if(ch1==4 && ch2==3){
x1=x2;
y_1=(c-a*x1)/b;
printf("\nX = %f. Y = %f",x2,y_1);
}
if(ch1==4 && ch2==4){
if(a/b==d/e)printf("\nNo answer. Lines would be parallel or qeual.");
else{
x1=(b*f-c*e)/(d*b-a*e);
y_1=(c-a*x1)/b;
printf("\nX = %f. Y = %f",x1,y_1);
}
}
printf("\n");
print_lines();
return 0;
}
This is obvious 07.09.2010 22:17 # +10
Second_Fry 07.09.2010 23:58 # −4
maniac 07.09.2010 22:31 # +2
Second_Fry 07.09.2010 23:54 # −6
Govnoeb 09.09.2010 00:03 # +3
то, что ты накодил - это лютый, безумный пиздец
Second_Fry 09.09.2010 18:33 # −3
Second_Fry 09.09.2010 18:43 # −3
Иначе все равно будет высчитыние определителя и проверка на наличие решения - код это не облегчит.
xXx_totalwar 09.09.2010 18:47 # +1
Second_Fry 09.09.2010 19:20 # 0
Second_Fry 09.09.2010 19:25 # 0
xXx_totalwar 09.09.2010 19:28 # 0
Second_Fry 09.09.2010 20:43 # 0
2 уравнения в системе - находим определитель. Не равен 0 - все понятно. Равен 0 - начинается перебор всех случаев, т.е. a=0? b=0? c=0? d=0?.
Если будет уравнения в системе, придется делать еще больше проверок.
xXx_totalwar 09.09.2010 20:45 # 0
>общим решением.
в шары долбишься?
Second_Fry 09.09.2010 20:50 # 0
P.S. Все равно дополнительные проверки делать придется...
xXx_totalwar 09.09.2010 20:51 # +2
Гаусс для кого алгоритм разработал?
Second_Fry 09.09.2010 22:01 # 0
Govnoeb 10.09.2010 00:37 # +2
Анонимус 07.09.2010 22:37 # +2
>>Any variable is answer
русские детки.
Я тоже когда-то писал программу решения квадратного уравнения. Как раз мы его тогда в школе проходили.
maniac 07.09.2010 23:51 # +2
Радует и огорчает отсутствие прерывания вычислений при найденном решении - вглядываться в goto-джунгли вредно для здоровья.
Second_Fry 07.09.2010 23:56 # 0
Altravert 08.09.2010 10:18 # +3
Анонимус 08.09.2010 14:32 # 0
не интеррапты, нет
bugmenot 08.09.2010 16:37 # 0
я даже видел тулзу для чистки бинарей от таких чудес, проникших в релиз :)
Govnoeb 09.09.2010 00:11 # +1
имхо тут ну никак не обойтись без исключений:
а чо? я думаю его препод по С будет в восторге!
HyperGeek 08.09.2010 01:10 # +2
Second_Fry 08.09.2010 06:59 # −1