Löschen eines Arrays mit definierten Element(en) - Seite 20

 
Peter, Sie haben einen einzigartigen Programmierstil. Kurz gesagt: Sie programmieren trotz, nicht wegen.
 
Реter Konow:

Richtig. Aber woher wissen wir, dass die bereitgestellten Algorithmen keine Leerstellen hinterlassen? Die Prüfsumme beweist es nicht. Auch die Anzahl der Elemente spielt keine Rolle. Schließlich zählt die Funktion die Elemente, die vor der Größenänderung des Arrays vorhanden waren.

Sie haben jedoch eine Implementierung gefunden, die einen Fehler in statischen Arrays behebt.

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

Wenn es statisch ist, löschen wir das Heck.

Dateien:
 
Реter Konow:

Richtig. Aber woher wissen wir, dass die bereitgestellten Algorithmen keine Leerstellen hinterlassen? Die Prüfsumme beweist es nicht. Auch die Anzahl der Elemente spielt keine Rolle. Schließlich zählt die Funktion die Elemente, die vor der Größenänderung des Arrays vorhanden waren.

Sie müssten sich die letzten Versionen des Codes ansehen, nicht die erste.
Eine solche Prüfsumme, die die Reihenfolge der Elemente im Array berücksichtigt, wird schon seit langem verwendet:

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

einen Fehler im 3. Test korrigiert und meine Funktion verbessert

Dateien:
 
Nikolai Semko:

Sie sollten sich die letzten Versionen des Codes ansehen, nicht die erste.
Es ist schon lange her, dass eine solche Prüfsumme verwendet wurde, die die Reihenfolge der Elemente im Array berücksichtigt:

Sie brauchen einen nachweisbaren Beweis für die Richtigkeit. Eine Reihe von 20 Zahlen ist dafür ausreichend. Wenn der Algorithmus diesen Test besteht, kann er auf seine Geschwindigkeit getestet werden.

Der Test wird als Blindtest durchgeführt.

Vielleicht funktionieren alle Algorithmen richtig, und vielleicht fallen die Spitzenreiter aus der Reihe.

 
Реter Konow:

Sie brauchen einen nachweisbaren Beweis für die Richtigkeit. Eine Reihe von 20 Zahlen ist dafür ausreichend. Wenn der Algorithmus diese Prüfung besteht, kann er auf seine Geschwindigkeit getestet werden.

Ziel der Prüfsumme ist es nicht, sicherzustellen, dass die Arrays gleich sind, wenn die Prüfsumme gleich ist, sondern dass sie unterschiedlich sind, wenn die Prüfsumme unterschiedlich ist.

 
Nikolai Semko:

Der Zweck der Prüfsumme besteht nicht darin, sicherzustellen, dass die Felder gleich sind, wenn die Prüfsumme gleich ist, sondern dass sie unterschiedlich sind, wenn die Prüfsumme unterschiedlich ist.

Nikolai, es ist nicht schwer, mein Beispiel zu verwenden und die Algorithmen mit einem Array von 20 Elementen zu überprüfen, nicht wahr? Nur Ausgabe in den Ergebnissen?

 
Реter Konow:

Sie brauchen einen nachweisbaren Beweis für die Richtigkeit. Eine Reihe von 20 Zahlen ist dafür ausreichend. Wenn der Algorithmus diesen Test besteht, kann er auf seine Geschwindigkeit getestet werden.

Der Test wird als Blindtest durchgeführt.

Vielleicht funktionieren alle Algorithmen richtig, und vielleicht verlassen die Führer ihre Plätze.

Wenn Sie der Prüfsumme nicht trauen, wo liegt dann das Problem?

 
Реter Konow:

Nikolai, es ist nicht schwer, mein Beispiel zu verwenden und die Algorithmen mit einem Array von 20 Elementen zu überprüfen, nicht wahr? Sie einfach in den Ergebnissen anzeigen?

Bei einem Array mit 20 Elementen ist es unmöglich, die Geschwindigkeit der Funktion abzuschätzen. Und genau darum geht es in diesem Thema.

 
Nikolai Semko:

Bei einem Array mit 20 Elementen ist es unmöglich, die Geschwindigkeit der Funktion abzuschätzen. Und genau darum geht es in diesem Zweig.

Es gibt auch eine Anforderung an den Algorithmus - die korrekte Platzierung von Elementen innerhalb des Arrays, nachdem unnötige Elemente entfernt wurden. Diese Prüfung muss zuvor durchgeführt worden sein. Dann gibt es eine Geschwindigkeitskontrolle.