Кресты / Говнокод #3246 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 hromjo, (Updated )

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

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

      массив состоит из 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;
    	//...
    }

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

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8