Очистка массива от заданного (ых) элементов - страница 20

 
Пётр у тебя уникальный стиль программирования. Если коротко, то ты программируешь не благодаря, а вопреки.
 
Реter Konow:

Верно. Но откуда мы знаем, что предоставленные алгоритмы не оставляют пустых мест? Контрольная сумма этого не доказывает. Количество элементов тоже. Ведь функция считает элементы, которые были до изменения размера массива. 

Хотя вы натолкнули на реализацию, исправления косяка в статичных массивах.

int arrayFilter2(int &Test[],const int value)
  {
   int s,_s=s=ArraySize(Test);
   bool result=false;

   for(int i=0,j=0; i<_s; i++,j++)
     {
      if(Test[i]==value)// || Test[i]==NULL)
        {
         result=true;
         s--;
         j--;
         continue;
        }
      if(result)
         Test[j]=Test[i];
     }

   if(s<_s)
      if(ArrayResize(Test,s))
         if(ArraySize(Test)==_s)
            ArrayFill(Test,s,_s-s,NULL);

   return s;
  }

Теперь если статика, то очищаем хвост.

Файлы:
 
Реter Konow:

Верно. Но откуда мы знаем, что предоставленные алгоритмы не оставляют пустых мест? Контрольная сумма этого не доказывает. Количество элементов тоже. Ведь функция считает элементы, которые были до изменения размера массива. 

Ты бы заглянул в последние варианты кода, а не в первые.
Уже давно используется такая контрольная сумма, которая учитывает последовательность элементов в массиве:

double ControlSumm(int &a[]) 
  {
   double sum=0;
   for(int i=0; i<ArraySize(a); i++) sum+=(double)a[i]/(i+1);
   return sum;
  }
 

исправил ошибку в 3-м тесте и подправил свою ф-ю

Файлы:
 
Nikolai Semko:

Ты бы заглянул в последние варианты кода, а не в первые.
Уже давно используется такая контрольная сумма, которая учитывает последовательность элементов в массиве:

Нужно наглядное доказательство правильности. Для этого достаточно ряда из 20-ти чисел. Если алгоритм проходит эту проверку, можно тестировать на скорость.

Проведенная проверка, - это проверка в "слепую".

Возможно, все алгоритмы работают правильно, а возможно, лидеры уйдут со своих мест.

 
Реter Konow:

Нужно наглядное доказательство правильности. Для этого достаточно ряда из 20-ти чисел. Если алгоритм проходит эту проверку, можно тестировать на скорость.

Задача контрольной суммы не чтобы гарантировать, что массивы одинаковые, если контрольная сумма совпадает, а гарантировать, что они разные, если разная контрольная сумма.

 
Nikolai Semko:

Задача контрольной суммы не чтобы гарантировать, что массивы одинаковые, если контрольная сумма совпадает, а гарантировать, что они разные, если разная контрольная сумма.

Николай, ведь не сложно использовать мой пример и проверить алгоритмы с массивом из 20 элементов? Просто вывести в результатах?

 
Реter Konow:

Нужно наглядное доказательство правильности. Для этого достаточно ряда из 20-ти чисел. Если алгоритм проходит эту проверку, можно тестировать на скорость.

Проведенная проверка, - это проверка в "слепую".

Возможно, все алгоритмы работают правильно, а возможно, лидеры уйдут со своих мест.

ну так проверьте если не доверяете контрольной сумме,в чём проблема то ?

 
Реter Konow:

Николай, ведь не сложно использовать мой пример и проверить алгоритмы с массивом из 20 элементов? Просто вывести в результатах?

С массивом из 20 элементов невозможно оценить скорость работы функции. А это смысл этой ветки.

 
Nikolai Semko:

С массивом из 20 элементов невозможно оценить скорость работы функции. А это смысл этой ветки.

Есть еще требование к алгоритму, - правильное размещение элементов внутри массива, после удаления ненужных элементов. Эта проверка должна была быть осуществлена вначале. Потом, проверка на скорость.