Еще нюанс. Я доказал правильность работы своего алгоритма. Вывел через принт значения которые получились после выполнения функции. Насколько правильно работают остальные алгоритмы, остается загадкой.
Хотя, вроде контрольная сумма доказывает правильность.
ЗЫ. Все таки одну ошибку при написании функции по моему решению ты допустил:
У меня стоит не
а
Но, все равно спасибо.
Нет, я не допустил ошибку, а исправил твою. Хорошо подумай, что делает твоя строчка? Просто попробуй и поменяй, и увидишь. Будет не та контрольная сумма и не тот размер.
Nikolai Semko: Нет, я не допустил ошибку, а исправил твою. Хорошо подумай, что делает твоя строчка? Она ничего не делает. Просто попробуй и поменяй, и увидишь. Будет не та контрольная сумма и не тот размер.
Вопрос. Почему в этом коде после изменения размера массива, он все равно печатается таким же, как до изменения?
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Это ставит под сомнение правильность проверки алгоритмов контрольной суммой. То есть, при подсчете контрольной суммы, мы сделаем цикл по массиву, который еще продолжает сохранять прежние элементы?
Предлагаю проверить алгоритмы моим способом. Выведя массив из 20-ти значений.
Это будет проверка на правильность, а не на скорость.
Вопрос. Почему в этом коде после изменения размера массива, он все равно печатается таким же, как до изменения?
Это ставит под сомнение правильность проверки алгоритмов контрольной суммой. То есть, при подсчете контрольной суммы, мы сделаем цикл по массиву, который еще продолжает сохранять прежние элементы?
Предлагаю проверить алгоритмы моим способом. Выведя массив из 20-ти значений.
Это будет проверка на правильность, а не на скорость.
Предлагаю миллион, т.к. в тесте миллион. Пусть все сидят и сравнивают.)))
Разобрался, в струтуре происходило смещение поля а не всей структуры...
Если структуры простых типов, то по идеи должно работать.
Еще нюанс. Я доказал правильность работы своего алгоритма. Вывел через принт значения которые получились после выполнения функции. Насколько правильно работают остальные алгоритмы, остается загадкой.
Хотя, вроде контрольная сумма доказывает правильность.
ЗЫ. Все таки одну ошибку при написании функции по моему решению ты допустил:
У меня стоит не
а
Но, все равно спасибо.
ЗЫ. Все таки одну ошибку при написании функции по моему решению ты допустил:
У меня стоит не
а
в вашем коде это равнозначно
Нет, я не допустил ошибку, а исправил твою. Хорошо подумай, что делает твоя строчка? Она ничего не делает. Просто попробуй и поменяй, и увидишь. Будет не та контрольная сумма и не тот размер.
Результат точно такой же. Ошибки нет.
Да, не делает ничего. Но с ней понятнее. ))
в вашем коде это равнозначно
Да.
Да.
А да, сорри.
Вспомнил.
Твой код брал отсюда.
Там не было твоей строчки и помню, эту строчку мне пришлось добавить, чтобы правильно работало.
Но с ней понятнее. ))
В ней лишняя математическая операция.))
Вопрос. Почему в этом коде после изменения размера массива, он все равно печатается таким же, как до изменения?
Это ставит под сомнение правильность проверки алгоритмов контрольной суммой. То есть, при подсчете контрольной суммы, мы сделаем цикл по массиву, который еще продолжает сохранять прежние элементы?
Предлагаю проверить алгоритмы моим способом. Выведя массив из 20-ти значений.
Это будет проверка на правильность, а не на скорость.Вопрос. Почему в этом коде после изменения размера массива, он все равно печатается таким же, как до изменения?
Это ставит под сомнение правильность проверки алгоритмов контрольной суммой. То есть, при подсчете контрольной суммы, мы сделаем цикл по массиву, который еще продолжает сохранять прежние элементы?
Предлагаю проверить алгоритмы моим способом. Выведя массив из 20-ти значений.
Это будет проверка на правильность, а не на скорость.Предлагаю миллион, т.к. в тесте миллион. Пусть все сидят и сравнивают.)))
Контрольная сумма подсчитывается неверно.
Проверь сам. Она считает элементы, которые остались в удаленной части массива.
Конечно, это еще не доказательство, неверности проверки, но уже есть сомнение.
Контрольная сумма подсчитывается из элементов этого ряда:
Причем 6 последних элементов предварительно были удалены ArrayResize.
Но функция все равно их считает.