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

    −52

    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
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    void counting(int in[], int out[]) {
    	int	pls = 0;
    	for (pls = 0; pls < 5; pls++) {
    		++out[in[pls]];
    	}
    }
    int s_t(int ar[] , int r , int  ps , int d  ) {
    	d = ar[ps] ;
    	if(r <= 12 ) {
    		if(d  <  ar[r]   ) {
    			d = ar[r]; ps = r;
    		}
    		return s_t(ar , r + 1, ps, d);
    	}
    	return ps;
    }
    int find_combination(int array[], int array_2[] , int flag  ) {
    	int p[13] = { 0} , flush(int array[]),straight(int array[])	, chck[13] = { 0 } , ks ,sort_select(int arr[],int arr_2[] , int  p, int  up_turn);
    	int s_t(int ar[] , int r , int  ps , int d  );
    	sort_select(array, array_2, 0, 2);
    	counting(array, chck);
    	if( flag == 1) {
    		ks = s_t(chck,0,0,0);
    	} else {
    		sort_select(chck,p, 0, 1);
    		if (chck[0] == 3 &&  chck[1]== 2) {
    			ks = 60;
    		} else if (chck[0] == 4) {
    			ks = 70;
    		} else if (chck[0] == 3) {
    			ks = 30;
    		} else if (chck[0] == 2 && chck[1]  == 2) {
    			ks = 20;
    		} else if (chck[0] == 2) {
    			ks = 10;
    		} else if (straight(array) && flush(array_2)) {
    			ks = 80;
    		} else if (straight(array)) {
    			ks = 40;
    		} else if (flush(array_2)) {
    			ks = 50;
    		} else {
    			ks = 0;
    		}
    	}
    	return ks;
    }
    int straight(int array[]) {
    	int	 b = 1, m = 1;
    	if(array[0] == 0 && array[1] == 1  && array[2] == 2 && array[3] == 3 && array[4] == 12 ) {
    		b = 1;
    	} else {
    		while (m  != 5) {
    			if ( 1 !=  (array[m] - array[m - 1]) ) {
    				b = 0; break;
    			}
    			m++;
    		}
    	}
    	return b;
    }
    void test_straight(int array[], int *flag  ) {
    	int	 m = 1; *flag = 0;
    	while (m  != 5) {
    		if   (  1 != (array[m ]     -   array[m  - 1 ])) {
    			if (array[m] > array[m + 1  ]) {
    				array[m] = -1; *flag += 1;
    			} else  {
    				array[m - 1 ] = -1; *flag += 1;
    			}
    		}
    		m++;
    	}
    }
    int flush(int array[]) {
    	int	f = 0, d = 1;
    	for (f = 1; f < 5; f++) {
    		if (array[0] != array[f] ) {
    			d = 0; break;
    		}
    	}
    	return d;
    }
    void test_pair(int array[]) {
    	int y = -1,x = 0;
    	while(x < 5) {
    		if( array[x] == y   ) {  x++;
    		} else 	if( array[x] != array[x + 1]  ) {
    			array[x] =  -1; x++;
    		} else {
    			y = array[x]; x += 2;
    		}
    	}
    }
    void swap(int *elementptr1, int *elementptr2) {
    	int hold = *elementptr1;
    	*elementptr1 = *elementptr2; *elementptr2 = hold;
    }

    покер 3

    Запостил: gne4do, 20 Декабря 2016

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

    • > int p[13] = { 0} , flush(int array[]),straight(int array[]) , chck[13] = { 0 } , ks ,sort_select(int arr[],int arr_2[] , int p, int up_turn);
      Ещё один поехавший, спамящий рандомными ключевыми словами и искренне считающий это смешным?
      Ответить
      • Вспоминаю студенческий порт лабы с Фортрана на Турбо Паскаль:
        procedure SUBROUTINE(CHARACTER: char; LOGICAL: boolean);

        И дальше в том же духе.
        Ответить
      • На правах офтопика. Отрывок из произведения «Программирование снизу вверх наискосок» (легко гуглится):

        Пишите со 2-ой по 71-ю позиции, всемерно избегая пробелов. Если комментария никак не избежать, стремитесь писать их как можно конкретнее. Например:
         
         DО J=1 ТО N; /* cycl po N*/ 
         IF J>0 ТНЕN GОТО М; /*perexod to М*/ 
         ЕLSЕ GОТО L; /*perexod k L*/ 
         Х=Х+1; /* pribavit` 1 k Х */ 
         ЕND; 
         М: Х=Х-1; /* ТАК НАДО ФЕДЯ! */ 
         IF А ТНЕN GОТО L;
         L: Х=Х**2; /* ВОЗVЕSТY Х SТЕР. ДВА*/


        и т.п. Всем переменным давайте имена ваших знакомых, любимых блюд, эстрадных ансамблей, сигарет, напитков и т.д. Легко видеть, что фрагменты типа:
         
         /*PL1*/
         IF КАТJА >= 18 ТНЕN DО 
         САLL GАSТRОNОМ; 
         САLL ТАХI;
         GОТО ХАТА; 
         ЕND; 
         ЕLSЕ GОТО VЕRА; 
        
         /* АSSЕМВLЕR */
         GLОРING СSЕСТ
         ...
         МАRINА ЕQU DURА
         ...
         L АН,МАRUSJА
         SТ UН,АNJUТА
         ВХLЕ LЕТS,IRINА,DRINК(АGDАМ)


        поражают изяществом, остроумием и тонким вкусом.
        Ответить
      • я вот как раз хотел спросить что это за язык, и причем тут си

        >>sort_select(int arr[]
        сколько нубов наебнулось об этот синтаксис,лол!
        Ответить
      • К сожалению, это валидный си. Это прототипы функций перемешанные с переменными.
        Ответить
        • Да, я уже увидел. Но что они делают внутри другой функции?!
          Ответить
          • Функция вызывает другие функции, находящиеся ниже по коду. Однопроходный компилятор должен знать их прототипы. Но никто не мешает разместить эти прототипы выше функции по коду.
            Ответить
            • >> должен знать их прототипы
              Самое страшное что НЕ должен) отсутствие прототипа это варнинг, а не еррор
              Ответить
              • Серьёзно? Охренеть. И это в языке со статической питуизацией.
                #янезнаюсииплюсы #говнокодобразовательный
                Ответить
                • статичность типизации тут непричем.

                  конпилятор имеет право подумать что раз прототпа нет, то функция получает инты и инта же возвращает

                  ТАкой вот плевок из прошлого.

                  К щастью, можно явно ключом попросить компилятора третировать ворнинги как ерроры

                  И кстати я говорил о плейнсях, не уверен что в плюсах так можно

                  [1717][bayan@intdevsrv:~]$ cat foo.c
                  void main() {
                  sorok_tyscah_obezjan_v_zhopu_sunuli_banan(42);
                  }
                  [1717][bayan@intdevsrv:~]$ cc foo.c
                  foo.c: In function 'main':
                  foo.c:1: warning: return type of 'main' is not 'int'
                  /tmp/ccm3ZSo0.o: In function `main':
                  foo.c:(.text+0xf): undefined reference to `sorok_tyscah_obezjan_v_zhopu_sunuli_banan'
                  collect2: ld returned 1 exit status
                  [1717][bayan@intdevsrv:~]$


                  как видишь, сломался линкер. А компилятор скушал
                  Ответить
                  • В плюсах уже еррор:
                    a.cpp: In function 'int main()':
                    a.cpp:2:45: error: 'sorok_tyscah_obezjan_v_zhopu_sunuli_banan' was not declared in this scope
                     sorok_tyscah_obezjan_v_zhopu_sunuli_banan(42);
                                                                 ^

                    Хоть где-то сделали проверки строже.
                    Ответить
              • Ага, и если размер какого-нибудь аргумента не совпадёт с дефолтным интом, будет весело.
                Ответить
                • или количество аргументов
                  или кол конвеншен
                  Ответить
                  • Да, это тоже приводит к неприятностям. Но тогда обычно что-нибудь распидорашивается и сразу заметно, что где-то ошибка.

                    Мерзко, когда в программе везде дефолтное соглашение cdecl (в котором стек чистит вызывающий блок, поэтому несовпадение количества аргументов к повреждению стека не приводит) и может даже тест отработать, а потом вдруг в какой-нибудь из аргументов придёт случайный мусор.
                    Ответить
                    • В крестах от кривых прототипов хотя бы манглинг имён спасает.
                      Ответить
                      • В крестах и без прототипа скомпилировать нельзя. Но на всякий хитрый манглинг найдётся extern "C".
                        Ответить
                        • > без прототипа
                          Без - нельзя. С кривым - запросто. Слава богу, что линкер это заметит (если не extern "C").
                          Ответить
                          • а что, в мангленге в имени отражаются ВСЕ типы аргументов?
                            Ответить
                            • Да, там взаимно-однозначно всё. Иначе перегрузка работать не будет.
                              Ответить
                              • а возвращаемое значение являеца частью сигнатуры?
                                Ответить
                                • Точно не помню, но вроде нет.
                                  Ответить
                                  • а вот в .NET является, и потому там можно сделать перегрузку функции которая отличается только типом возвращаемого значения

                                    К несчастью, ни один ЯП этого не умеет, так что надо писать на голом IL
                                    Ответить
                                    • > ни один ЯП этого не умеет

                                      Haskell умеет.
                                      Ответить
                                      • Haskell под CLR умеет?
                                        Ответить
                                        • > Haskell под CLR умеет?
                                          Вроде были попытки, но вроде ничего путного из этого пока не вышло. Слишком мало людей, которым это нужно.
                                          Ответить
                                • Для обычных функций — обычно нет, для шаблонов — может. См. уже правила манглинга
                                  https://mentorembedded.github.io/cxx-abi/abi.html
                                  Ответить
          • > Но что они делают внутри другой функции
            Они туда инкапсулированы.
            Ответить
            • В Qt, к слову, этот ебанутый приём часто юзают:
              https://github.com/qt/qt/blob/0a2f2382541424726168804be2c90b91381608c6/src/gui/text/qfont_x11.cpp#L134
              Ответить
              • фу
                хотяб заинклудили
                Ответить
                • если бы Qt-шники инклюдили всё и везде где надо объявление, он бы компилился вдвое дольше
                  Ответить
                  • Прекомпайлед хедеры нинужны?
                    Ответить
                    • Конечно
                      Я всегда отключаю PCH.
                      Люблю чтобы препроцессор препроцессил каждый раз пару мегабайт
                      Ответить
              • Но ведь Qt придумали в компании Trolltech.
                Ответить
        • А как это отличить от локальных переменных?

          Как-то так?
          void nop1() {
            int x; // локальная переменная x
            int (*f) (int); // локальная переменная f
          }
          
          void nop2() {
            extern int x; // глобальная переменная x, см. ниже
            int f (int); // глобальная функция f, см. ниже
          }
          
          int x; // глобальная переменная x
          
          int f (int) { // глобальная функция f
            return 42;
          }
          Ответить

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