как найти ArrayMaximum () и минимальная (), не абсолютные значения? - страница 4

 
Yedelkin:
Не соглашусь. Потому что логику Вашу не понял. Ну, увидел кошку в комнате; ну, зашёл, наследил, прибил найденную кошку к стене, вытер остатки экзекуции, даже протёр за собой свои следы. И что? Цель-то достигнута. Или Вас беспокоит, что код Карлсона оказался в три раза короче Вашего? - Так это мелочи, сразу бы так и написали.

 

Если код Карлсона оформить в функцию, то он будет порядка 8 строк, у меня 17 - не в три, где то в два раза короче. Но отличия моей реализации:

-можно искать не только максимум, но и минимум;

-в коде проверка на ошибки передаваемых параметров;

-можно искать максимум или минимум произвольного ранга, а не только второго.

Так же, код, который изменяет содержимое памяти, а потом восстанавливает ее, потенциально опасен. Представьте, что функция будет составлять большее количество строк, ее логика усложнится, внутри ее окажется ошибка, а она обязательно там окажется - она не восстановит содержимое массива, передаваемого ей в качестве параметра. Это же просто ужасно. Ты вызываешь функцию с просьбой найти максимум в массиве, а она вместо этого может портит его содержимое. А представьте, что мы работаем в многопоточной, асинхронной среде, где к одному участку памяти могут обращаться из нескольких мест, а она непредсказуемым образом меняется, хотя не должна.

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

 
gdtt:

Если код Карлсона оформить в функцию, то он будет порядка 8 строк, у меня 17 - не в три, где то в два раза короче. Но отличия моей реализации:

-можно искать не только максимум, но и минимум;

-в коде проверка на ошибки передаваемых параметров;

-можно искать максимум или минимум произвольного ранга, а не только второго.

Так же, код, который изменяет содержимое памяти, а потом восстанавливает ее, потенциально опасен. Представьте, что функция будет составлять большее количество строк, ее логика усложнится, внутри ее окажется ошибка, а она обязательно там окажется - она не восстановит содержимое массива, передаваемого ей в качестве параметра. Это же просто ужасно. Ты вызываешь функцию с просьбой найти максимум в массиве, а она вместо этого может портит его содержимое. А представьте, что мы работаем в многопоточной, асинхронной среде, где к одному участку памяти могут обращаться из нескольких мест, а она непредсказуемым образом меняется, хотя не должна.

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

Спасибо за разъяснение. Кажется, понял, о чём речь. Буду осмысливать :)
 
Это баян, и лет ему уже наверно двадцать, но не потерял актуальности до сих пор.
Наберите в поисковике "Законы мерфи программист". 

Вот кое-что:
• Указание начинающему программисту. Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
• Закон необходимости ошибок. Программист может обнаружить ошибку только в чужой программе.
• Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала.
• В любой программе есть ошибки.
• Если язык программирования необычайно полезен и популярен в этой стране, то за ее пределами он никому не нужен.
• Любая программа стремится занять всю доступную память.
• Самая грубая ошибка будет выявлена, лишь когда программа пробудет в производстве, по крайней мере, полгода.


На код, который у меня получается, всегда смотрю под этим углом зрения.
 

gdtt:

 


 

Если код Карлсона оформить в функцию, то он будет порядка 8 строк, у меня 17 - не в три, где то в два раза короче. Но отличия моей реализации:

-можно искать не только максимум, но и минимум;

-в коде проверка на ошибки передаваемых параметров;

-можно искать максимум или минимум произвольного ранга, а не только второго.

Так же, код, который изменяет содержимое памяти, а потом восстанавливает ее, потенциально опасен. Представьте, что функция будет составлять большее количество строк, ее логика усложнится, внутри ее окажется ошибка, а она обязательно там окажется - она не восстановит содержимое массива, передаваемого ей в качестве параметра. Это же просто ужасно. Ты вызываешь функцию с просьбой найти максимум в массиве, а она вместо этого может портит его содержимое. А представьте, что мы работаем в многопоточной, асинхронной среде, где к одному участку памяти могут обращаться из нескольких мест, а она непредсказуемым образом меняется, хотя не должна.

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

Здравствуйте коллеги.

Очевидно, что я не отбрасывается код ..

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



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

На данный момент я просто хотел простая идея сделать еще один шаг дальше, мои проблемы и другие. Затем найдите, что это лучший код, чтобы найти максимальное и минимальное относительное.



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

PS 2: Карлсон код может быть легко изменены, для поиска третьего элемента, четвертый элемент, и т.д. .. не только для второго.



Очевидно, что если код является ущербной Карлсон для будущих реализаций, будут вынуждены использовать альтернативные идеи, может быть, те, что вы предложили всем вам.

В любом случае, благодарю всех вас за ваш вклад идей. 

 

 
void qSortW(double &A[][3],int  low, int high){
      int i = low;                
      int j = high;
      double x = A[(low+high)/2][2];  // x - опорный элемент посредине между low и high
      do {
          while(A[i][2] < x) ++i;  // поиск элемента для переноса в старшую часть
          while(A[j][2] > x) --j;  // поиск элемента для переноса в младшую часть
          if(i <= j){           
              // обмен элементов местами:
              double temp = A[i][0];
              double temp2 = A[i][1];
              double temp3 = A[i][2];             
              A[i][0] = A[j][0];
              A[i][1] = A[j][1];
              A[i][2] = A[j][2];              
              A[j][0] = temp;
              A[j][1] = temp2;
              A[j][2] = temp3;
              // переход к следующим элементам:
              i++; j--;
          }
      } while(i < j);
      if(low < j) qSortW(A, low, j);
      if(i < high) qSortW(A, i, high);
  } 
Быстрая сортировка многомерного массива
A[][3]
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
Причина обращения: