1. Си / Говнокод #4190

    +128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 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;
    }

    Hello, C!

    Запостил: Second_Fry, 07 Сентября 2010

    Комментарии (26) RSS

    • снова чья-та говнолаба, та сколько можно их постить?
      Ответить
    • Неуд с плюсом. Поставлю трояк, если хотя бы скомпилится.
      Ответить
      • показать все, что скрытоКомпилиться нормально, работает нормально, перебор всех вариантов есть, что еще нужно?)
        Ответить
        • мозг еще нужен. если у матрицы коэффициентов не нулевой определитель, то она обратима и есть решение. в противном случае либо решения нет, либо одна из переменных будет свободной

          то, что ты накодил - это лютый, безумный пиздец
          Ответить
          • Какой еще матрицы? Что эта программа должна делать? Она решает систему линейных уравнений.
            Ответить
            • Туплю да, перечитал, а разница решать через матрицу или искать отдельно?
              Иначе все равно будет высчитыние определителя и проверка на наличие решения - код это не облегчит.
              Ответить
              • разумеется нет разницы между 'написать один раз, как надо' и 'написать говнопрогу для каждого частного случая'
                Ответить
                • Через матрицы высчитывается только кусок кода, только когда обе проверки вернули четверку. Иначе даже с матрицами надо делать все те же самые шаги проверки. Нет?
                  Ответить
                • Т.е. формула Крамера не облегчит жизнь здесь совершенно никак.
                  Ответить
                  • какое слово в предложении "решение в общем случае" тебе нужно объяснить?
                    Ответить
                    • Объяснить, что ты понимаешь под общим решением.
                      2 уравнения в системе - находим определитель. Не равен 0 - все понятно. Равен 0 - начинается перебор всех случаев, т.е. a=0? b=0? c=0? d=0?.
                      Если будет уравнения в системе, придется делать еще больше проверок.
                      Ответить
                      • >>решение в общем случае
                        >общим решением.

                        в шары долбишься?
                        Ответить
                        • Хорошо, я слился -_-

                          P.S. Все равно дополнительные проверки делать придется...
                          Ответить
                          • какие еще проверки?
                            Гаусс для кого алгоритм разработал?
                            Ответить
                            • К сожалению, алгоритм Гаусса я еще не прошел -_-, но уже читаю википедию. Быть может 4 првоерки я сведу к одной.
                              Ответить
                      • если определитель равен нулю, то делишь оба уравнения на их свободные члены и сравниваешь коэффициенты. если они не равны, то система несовместна, если равны, то одна из переменных будет свободной
                        Ответить
    • Детки учатся программировать.
      >>Any variable is answer
      русские детки.

      Я тоже когда-то писал программу решения квадратного уравнения. Как раз мы его тогда в школе проходили.
      Ответить
      • Это - жестокий и негуманный способ решения СЛАУ 2 порядка.
        Радует и огорчает отсутствие прерывания вычислений при найденном решении - вглядываться в goto-джунгли вредно для здоровья.
        Ответить
        • Надо проставить прерывания и усовершенствовать алгоритм. Спасибо :D
          Ответить
          • Прерывания?! о_0
            Ответить
            • брекпоинты всмысле)

              не интеррапты, нет
              Ответить
              • некоторые совмещают http://www.ctyme.com/intr/rb-0007.htm
                я даже видел тулзу для чистки бинарей от таких чудес, проникших в релиз :)
                Ответить
          • именно!

            имхо тут ну никак не обойтись без исключений:
            if(ch1==4 && ch2==4){
              if(a/b!=d/e)
                throw (b*f-c*e)/(d*b-a*e);
            }

            а чо? я думаю его препод по С будет в восторге!
            Ответить
    • Портировали с php?
      Ответить
      • Нет, просто знаю php, видимо это плохо на меня влияет.
        Ответить

    Добавить комментарий