|
|
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Почему иногда вместо Код: pascal 1. нужно использовать Код: pascal 1. ??? В каких именно случаях один из двух вариантов лучше другого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 12:00:10 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
на чинающий, Когда нужно удалять элементы из х ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 12:41:02 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
sinedКогда нужно удалять элементы из х Нет. Когда имеет смысл, не запрашивать постоянно значение из X.Count ... Мы помещаем 1 раз, это значение в переменную I и делаем Dec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 14:46:52 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
sined, если стоит оптимизация и от направления ничего не зависит (к примеру просто счетчик увеличивать), то можно заметить, что проход идет в обратном порядке, т.е. не зависимо от того как написано, отсюда как бы следует (не вдаваясь в причины), что в обратном порядке оптимальнее. но человеку воспринимать удобнее в прямом порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 14:50:15 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
НяшикНет. Когда имеет смысл, не запрашивать постоянно значение из X.Count ... Мы помещаем 1 раз, это значение в переменную I и делаем DecCount запрашивается один раз в любом случае. Вот такой код будет отлично работать Код: pascal 1. 2. и очистит весь список. А вот такой Код: pascal 1. 2. 3. удалит только половину списка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:10:46 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_А вот такойПоправка. Вот такой Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:12:19 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, второй код проверил? Удалит все и вылетит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:14:09 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
_Vasilisk__Vasilisk_А вот такойПоправка. Вот такой Код: pascal 1. 2. 3. 4. 5. Не особо лучше. Смысла в таком коде нет. В while обычно ставят "пока количество больше нуля". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:17:23 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Вроде 10 ка сообщений а несёшь дичь какую - то. Ошибься скорее всего по пьяни. Так как логика такова, что надо сверять текущую связку, с I а не один раз. На сякий случай через отладчик проверь, как работает код (F7) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:18:31 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Так. Дубль 3. Имелось в виду вот это Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:33:38 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Васик. А ты правда с 2007 года программируешь? А то пишешь непонятно чего... А теперь поставь memo и напиши в две строки, ровно две без 3, и запусти свой код. Увидишь что 2 строка не удалиться.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:38:51 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
К слову, что бы быть не монотонным, вот правильный код Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 17:40:41 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
НяшикУвидишь что 2 строка не удалиться..Правильно _Vasilisk_А вот такой ... удалит только половину списка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 18:37:10 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Няшик, Неа, вот правильный: Код: pascal 1. 2. Или даже так: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 18:37:11 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Кхм. Ну всё, началась ахинея. Человек спросил что и для чего, один несёт что в двух случаях count не будет вызван, хотя в таком случае будет Код: pascal 1. При том, ещё от вызванного count будет вызвать dec ... А этот, уже поддерживает его походу ... Правильный код в 20800838 А если уж стоит удалить текст, делайте просто text = ''; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2017, 18:40:03 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
на чинающийПочему иногда вместо Код: pascal 1. нужно использовать Код: pascal 1. ??? В каких именно случаях один из двух вариантов лучше другого? Опыт, сын ошибок трудных, все расставит на свои места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 14:31:48 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
на чинающийПочему иногда вместо Код: pascal 1. нужно использовать Код: pascal 1. ??? В каких именно случаях один из двух вариантов лучше другого?В одном только случае: когда логика задачи такова, что какой-то из этих вариантов лучше другого (а иногда он даже является единственно верным, хотя и не всегда - тоже зависит от логики задачи). Во всех остальных случаях - без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 16:05:42 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Ну и вброс кое-чего на вентилятор... авторВ каких именно случаях один из двух вариантов лучше другого? Собсно, ни в каких. Count в обоих этих выражениях вычисляется однократно. Но если требуется удалять элементы из списка, выражение с downto работает корректно, а цикл с to - нет. В то же время, не следует применять подобные выражения в других языках. К примеру, в Java Count будет вычисляться при каждом проходе цикла, что скажется на производительности программы, а также может вызвать сбои. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 16:08:25 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Правильнее спрашивать - когда имеет значение последовательность прохода, а когда - нет. Имеет, когда обработка элемента n+1 зависит от обработки элемента n. В этом случае нужно думать над порядком прохождения цикла. Как уже было написано, пример - удаление элементов. В остальных случаях ни как написано, ни как реально считается (обычно от большего к меньшему, как бы не было написано в коде), значения не имеет и можно об этом специально не задумываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 16:56:26 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
makhaonИмеет, когда обработка элемента n+1 зависит от обработки элемента nНе только. Навскидку 2 примера: 1. Какой-то кэш-массив, заполнение которого логикой программы предусмотрено сначала. Естественно, что и искать в нем заполненный элементы правильнее и быстрее будет сначала, а не с конца. Хотя с конца тоже можно, но будет дольшн. 2. FIFO обычный. Просто надо 1-й элемент отдать из очереди, хотя остальные от него и не зависят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 17:02:29 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Любезный Count в обоих этих выражениях вычисляется однократно. =_= Ещё один. От куда вы все такие ??? От куда такая уверенность что однократно??? Вы вводе людей в заблуждения. Так как цикл развёртывается в Код: pascal 1. 2. Следовательно, не один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 20:50:54 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
YuRock, авторЕстественно, что и искать в нем заполненный элементы правильнее и быстрее будет сначала, а не с конца. Хотя с конца тоже можно, но будет дольшн. Правильнее будет сделать индекс, если уж на то пошло :) А не перебирать тупо кучу строк. Хотя в вырожденных случаях, когда до 80ти процетов случаев попадают на первые строки, может оказаться лучше искать подряд. авторFIFO обычный фифо вообще списком делается, а не циклом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 21:01:43 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
makhaonА не перебирать тупо кучу строкКто о строках говорил? И какой нафиг индекс, если у меня массив в 100 хэндлов или нулей, из которых обычно заполнены первые 2-3? Зачем? И, да, это абстрактный пример был. По фифо. Список. А по этому списку не циклом ходят? Count в предыдущих примерах - не о списке речь? Разницы вообще я принципиальной не вижу в данных абстрактных случаях - список, массив - одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 21:34:01 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
makhaonфифо вообще списком делается, а не циклом.А, если имеется ввиду, что всегда берется 1-й элемент списка - то понятно. Но опять же это пример цикла, идущего сначала while Count <> 0 do Proc( Items[ 0 ] ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 21:37:20 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
YuRock, авторКто о строках говорил? Строки - как частный случай массива данных. Как будто нельзя массив байт индексировать :) авторИ какой нафиг индекс, если у меня массив в 100 хэндлов или нулей, из которых обычно заполнены первые 2-3? Зачем? Откуда я знаю, что у вас там за очень частный случай :) На 2-3 вообще нет смысла цикл использовать. Три вложенных if-then-else скорее всего будут быстрее скорее всего. Я говорю про общий случай. авторПо фифо. Список. А по этому списку не циклом ходят? А зачем там цикл? Связанный список. Что и зачем там перечислять? Две операции - либо добавить в буфер, либо извлечь. Добавили - сделали ссылку на новый элемент на конце старого, выняли - убрали ссылку и элемент из списка. Эмуляцию Count'а еще, если сильно хочется, можно сделать. Проще и сильно быстрее, чем бегать что-то считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 22:05:18 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
makhaonЯ говорю про общий случай.Ну вот, общий случай. Массив, в котором данные только вначале (в конце только незаполненные элементы). В этом случае есть 2 варианта: 1) идти сначала и проверять, если не заполненный - то break; 2) идти с конца, проверяя на заполненность. Как лучше и быстрее? Очевидно. И элементы не зависят друг от друга. Опять по фифо. Есть очередь по такой схеме. Поток спит и ждет добавления элементов, при добавлении просыпается и обрабатывает все добавленные (их может добавиться много во время обработки первого). И как это сделать без цикла? Впрочем мне все равно, я делаю это циклом while count <> 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 22:42:52 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Обсуждение сферического коня в вакууме. Для "как удобнее/правильнее" - всегда нужно исходить из задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 09:37:45 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
НяшикЛюбезный Count в обоих этих выражениях вычисляется однократно. =_= Ещё один. От куда вы все такие ??? От куда такая уверенность что однократно??? Вы вводе людей в заблуждения. Так как цикл развёртывается в Код: pascal 1. 2. Следовательно, не один раз. Открой уже View|Debug Windows|CPU и посмотри сам, сколько раз вычисляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 10:24:15 |
|
||
|
Требуется субботний ликбез
|
|||
|---|---|---|---|
|
#18+
Няшик=_= Ещё один. От куда вы все такие ??? От куда такая уверенность что однократно??? Для тех, кто на бронепоезде Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. выхлопForward loop Call GetCount. Result: 5 0 1 2 3 4 End loop Call GetCount. Result: 0 After loop count: 0 Backward loop Call GetCount. Result: 5 4 3 2 1 0 End loop Call GetCount. Result: 0 After loop count: 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 16:10:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041822]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
424ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 723ms |

| 0 / 0 |
