Cancellare un array di elementi definiti - pagina 20

 
Peter, hai uno stile di programmazione unico. In breve, si programma nonostante, non a causa di.
 
Реter Konow:

Giusto. Ma come facciamo a sapere che gli algoritmi forniti non lasciano spazi vuoti? Il checksum non lo prova. E nemmeno il numero di elementi. Dopo tutto, la funzione conta gli elementi che c'erano prima che l'array fosse ridimensionato.

Hai colpito un'implementazione, però, risolvendo un bug negli array statici.

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;
  }

Ora, se è statico, cancelliamo la coda.

File:
 
Реter Konow:

Giusto. Ma come facciamo a sapere che gli algoritmi forniti non lasciano spazi vuoti? Il checksum non lo prova. E nemmeno il numero di elementi. Dopo tutto, la funzione conta gli elementi che c'erano prima che l'array fosse ridimensionato.

Dovresti guardare le ultime versioni del codice, non la prima.
Un tale checksum, che tiene conto della sequenza degli elementi nell'array, è stato usato per molto tempo:

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

corretto un errore nel 3° test e modificato la mia funzione

File:
 
Nikolai Semko:

Si guarderebbero le ultime versioni del codice, non la prima.
È da molto tempo che non si usa un tale checksum, che tiene conto della sequenza degli elementi nell'array:

Avete bisogno di una prova dimostrabile di correttezza. Una fila di 20 numeri è sufficiente per questo. Se l'algoritmo supera questo test, può essere testato per la velocità.

Il test effettuato è un test alla cieca.

Forse tutti gli algoritmi funzionano correttamente, e forse i leader cadranno fuori posto.

 
Реter Konow:

Avete bisogno di una prova dimostrabile di correttezza. Una fila di 20 numeri è sufficiente per questo. Se l'algoritmo supera questo controllo, può essere testato per la velocità.

L'obiettivo del checksum non è di assicurare che gli array siano gli stessi se il checksum è lo stesso, ma di assicurare che siano diversi se il checksum è diverso.

 
Nikolai Semko:

Lo scopo del checksum non è di assicurare che gli array siano gli stessi se il checksum è lo stesso, ma di assicurare che siano diversi se il checksum è diverso.

Nikolai, non è difficile usare il mio esempio e controllare gli algoritmi con un array di 20 elementi, vero? Solo l'output nei risultati?

 
Реter Konow:

Avete bisogno di una prova dimostrabile di correttezza. Una fila di 20 numeri è sufficiente per questo. Se l'algoritmo supera questo test, può essere testato per la velocità.

Il test effettuato è un test alla cieca.

Forse tutti gli algoritmi funzionano correttamente, e forse i leader lasceranno i loro posti.

Se non vi fidate del checksum, qual è il problema?

 
Реter Konow:

Nikolai, non è difficile usare il mio esempio e controllare gli algoritmi con un array di 20 elementi, vero? Semplicemente visualizzarlo nei risultati?

Con una matrice di 20 elementi è impossibile stimare la velocità della funzione. E questo è il punto di questo thread.

 
Nikolai Semko:

Con un array di 20 elementi, è impossibile stimare la velocità di una funzione. E questo è il punto di questo ramo.

C'è anche un requisito per l'algoritmo - il corretto posizionamento degli elementi all'interno dell'array, dopo aver rimosso gli elementi non necessari. Questo controllo deve essere stato eseguito prima. Poi c'è un controllo della velocità.