Otro matiz. He demostrado que mi algoritmo funciona correctamente. Imprimí los valores que obtuve tras la ejecución de la función. El funcionamiento de los demás algoritmos es un misterio.
Sin embargo, la suma de comprobación parece ser correcta.
ZS. Sin embargo, cometiste un error al escribir la función según mi solución:
Mi función no es
а
Pero gracias de todos modos.
No, no me he equivocado, he corregido el tuyo. Piensa bien, ¿qué hace tu línea? Intenta cambiarla y verás. La suma de comprobación y el tamaño serán incorrectos.
Nikolai Semko: No, no me he equivocado, he corregido el tuyo. Piensa bien, ¿qué hace tu línea? No hace nada. Prueba a cambiarlo y verás. La suma de comprobación y el tamaño serán incorrectos.
El resultado es exactamente el mismo. No hay ningún error.
Sí, no hace nada. Pero tiene más sentido con ella. ))
Pregunta. ¿Por qué en este código, después de cambiar el tamaño del array, sigue imprimiendo lo mismo que antes del cambio?
//+------------------------------------------------------------------+//| Erase and Resize.mq5 |//| Peter Konow |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Peter Konow"#property link"https://www.mql5.com"#property version"1.00"//--------------------------------------------------------------------//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2};
ulong q1 = GetMicrosecondCount();
//--------------------------------
PeterArray(Arr,3);
//--------------------------------ulong q2 = GetMicrosecondCount();
//--------------------------------Print("Array new size ",ArraySize(Arr)," Тime of operation ",q2-q1);
ArrayPrint(Arr);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+int PeterArray(int &Arr[],int val) // вариант Peter Konow
{
int deleted=0,q=0;
for(int a1=0; a1<ArraySize(Arr); a1++)
{
if(deleted)Arr[q]=Arr[q+deleted];
if(Arr[q]==val){deleted++; q--;}
q++;
}
ArrayResize(Arr,ArraySize(Arr) - deleted);
return (q);
}
//+------------------------------------------------------------------+
Esto pone en duda la validez de los algoritmos de comprobación de sumas de verificación. Entonces, cuando calculamos la suma de comprobación, ¿hacemos un bucle a través del array que sigue manteniendo sus elementos anteriores?
Sugiero comprobar los algoritmos a mi manera. Al emitir una matriz de 20 valores.
Esto será una comprobación de la corrección, no de la velocidad.
Pregunta. ¿Por qué en este código, después de cambiar el tamaño del array, sigue imprimiendo lo mismo que antes del cambio?
Esto pone en duda la validez de los algoritmos de comprobación de sumas de verificación. Entonces, cuando calculamos la suma de comprobación, ¿hacemos un bucle a través del array que sigue manteniendo sus elementos anteriores?
Sugiero comprobar los algoritmos a mi manera. Al emitir una matriz de 20 valores.
Esta será una prueba de corrección, no de velocidad.
Sugiero un millón, ya que hay un millón en la prueba. Que todo el mundo se siente y compare)).
Lo he descubierto, era el cambio de campo en la estructura, no toda la estructura...
Si la estructura es de tipo simple, debería funcionar.
Otro matiz. He demostrado que mi algoritmo funciona correctamente. Imprimí los valores que obtuve tras la ejecución de la función. El funcionamiento de los demás algoritmos es un misterio.
Sin embargo, la suma de comprobación parece ser correcta.
ZS. Sin embargo, cometiste un error al escribir la función según mi solución:
Mi función no es
а
Pero gracias de todos modos.
ZS. Sin embargo, cometiste un error al escribir la función según mi solución:
Mi función no es
а
en su código es lo mismo que
No, no me he equivocado, he corregido el tuyo. Piensa bien, ¿qué hace tu línea? No hace nada. Prueba a cambiarlo y verás. La suma de comprobación y el tamaño serán incorrectos.
El resultado es exactamente el mismo. No hay ningún error.
Sí, no hace nada. Pero tiene más sentido con ella. ))
en su código, es igual a
Sí.
Sí.
Oh sí, lo siento.
Me acordé.
Su código fue tomado de aquí.
Tu línea no estaba allí y recuerdo que tuve que añadir esa línea para que funcionara correctamente.
Pero tiene más sentido con ella. ))
Hay una operación matemática extra en ella. ))
Pregunta. ¿Por qué en este código, después de cambiar el tamaño del array, sigue imprimiendo lo mismo que antes del cambio?
Esto pone en duda la validez de los algoritmos de comprobación de sumas de verificación. Entonces, cuando calculamos la suma de comprobación, ¿hacemos un bucle a través del array que sigue manteniendo sus elementos anteriores?
Sugiero comprobar los algoritmos a mi manera. Al emitir una matriz de 20 valores.
Esto será una comprobación de la corrección, no de la velocidad.Pregunta. ¿Por qué en este código, después de cambiar el tamaño del array, sigue imprimiendo lo mismo que antes del cambio?
Esto pone en duda la validez de los algoritmos de comprobación de sumas de verificación. Entonces, cuando calculamos la suma de comprobación, ¿hacemos un bucle a través del array que sigue manteniendo sus elementos anteriores?
Sugiero comprobar los algoritmos a mi manera. Al emitir una matriz de 20 valores.
Esta será una prueba de corrección, no de velocidad.Sugiero un millón, ya que hay un millón en la prueba. Que todos se sienten y comparen)).
La suma de comprobación no se ha calculado correctamente.
Compruébelo usted mismo. Cuenta los elementos que quedan en la parte eliminada del array.
Por supuesto, esto no es todavía una prueba de que la comprobación sea errónea, pero ya hay algunas dudas.
La suma de comprobación se calcula a partir de los elementos de esa fila:
Y los últimos 6 elementos fueron eliminados previamentepor ArrayResize.
Pero la función sigue contándolos de todos modos.