1. C++ / Говнокод #3246

    +149

    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
    template<typename T>void mescolare(T array1[], T array2[])
    {
    int size_array = sizeof(array1)/sizeof(array1[0])-1;
    srand(time(0));
    int fg;
    int *zer=new int[size_array];	
    for(int d=0;d<=size_array;d++)
    	{
    		fg = rand()%size_array;
    		for(int v=0;v<=size_array;v++)
    		{
    			if(zer[v]==fg){
    				zer[v]=fg;
    				fg = rand()%size_array;
    			}else{
    				zer[v]=fg;
    				break;
    			}
    		}
    		array2[d]=array1[fg];
    	}
    }

    А это мы перемешивам элементы массива!

    Запостил: hromjo, 17 Мая 2010

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

    • что-то не пойму. это MC++?
      Ответить
      • Тебя спугнули шаблоны?
        Ответить
        • нет. попутался немного, извиняюсь.
          вообще, очень странная запись
          int size_array = sizeof(array1)/sizeof(array1[0])-1;
          Ответить
          • Да, весьма. Начиная с того, что array1 - не массив (тяжёлое наследие си), ну и добивая этим -1. Подозреваю, что если T==int... Стоять! А где delete[]???
            Ответить
            • Дался тебе этот делит, добавят памяти, она сейчас дешевая, и поживут с утечками.
              Ответить
              • в плюсах утечки, в GC утечки так какого х.. тогда еб..ть мозги плюсами если разницы нет?
                Ответить
            • new переопределён?
              Ответить
    • Вложенный цикл по v - такая няшка!
      Ответить
      • няшно то, что во Внешнем и Внутреннем цикле будет обращение к переменной за приделами массива )

        массив состоит из N элементов,
        цикл обращается к N+1 элементам.
        Ответить
    • Код, кстати, может не сработает - никогда массив не копируется в процедуру. Будет передан указатель на первый элемент:

      #include <iostream>
      using std::cout;

      void f (int arr[]) {
      cout << "Arr: " << arr << " Arr[0]: " << arr[0] << std::endl;
      cout << "Sizeof Arr: " << sizeof(arr) << " sizeof Arr[0]: " << sizeof(arr[0]) << std::endl;
      }

      int main() {
      int test[] = { 5, 6, 7, 8, 10, 13};
      f(test);
      }

      Вывод:
      Arr: 0xbfae88b4 Arr[0]: 5
      Sizeof Arr: 4 sizeof Arr[0]: 4

      Ну, на 32х битной ОС будет указатель всегда 4 байта.
      Ответить
      • улучшенная версия:

        #include <iostream>
        using std::cout;

        void f (int arr[]) {
        cout << "Arr: " << arr << " Arr[0]: " << arr[0] << std::endl;
        cout << "Sizeof Arr: " << sizeof(arr) << " sizeof Arr[0]: " << sizeof(arr[0]) << std::endl;
        cout << "Wrong size: " << (sizeof(arr) / sizeof(arr[0])) << std::endl;
        }

        int main() {
        int test[] = { 5, 6, 7, 8, 10, 13};
        cout << "Real size: " << sizeof test / sizeof test[0] << std::endl;
        f(test);
        }

        Вывод:
        Real size: 6
        Arr: 0xbfe2ece4 Arr[0]: 5
        Sizeof Arr: 4 sizeof Arr[0]: 4
        Wrong size: 1
        Ответить
    • весьма странное говно, попахивает школотой перешедшей на плюсы:
      см. ничего не говорящие названия переменных, странные названия счетчиков, уже упомянутое отсутствие delete
      Ответить
    • Для получения размера массива в функции можно сделать как-то так:
      template<class T, int N>
      void test(T(& array1)[N])
      {
      	cout << "Size of array is " << N << endl;
      	//...
      }

      Правильно?
      Ответить
      • >Правильно?
        Нет.
        >"Size of array is " << N
        N - кол-во элементов массива.
        Ответить
        • Угу.
          Но я как раз и имел в виду количество элементов массива. В исходном гк именно это пытались получить строкой int size_array = sizeof(array1)/sizeof(array1[0])-1;
          Ответить
          • >int size_array
            Одно дело написать это в говнокоде в названии переменной, а другое исправить говнокод, повторив ошибки.
            Ответить
    • а функция называется mescolare, это итальянское слово.

      может быть, это черта национального характера? как-то не слышал я особо о крутых итальянских программистах ;)
      Ответить
      • А как же суровый итальянский спагетти-код?
        Ответить

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