Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизОшибка в delphi 7 Найти похожие ветки
← →
Defunct © (2004-11-18 19:30) [80]begin...end © (18.11.04 18:58) [75]
"плохой вечер хорошего дня"
> Неприятно, знаешь ли,
IMHO вы сами себя выставляете.
> Можете продолжать поливать меня грязью. Но лучше не надо - не позорьтесь.
Я вас ничем не поливал, помоему как раз наоборот.
PS: я на вас не обижаюсь. несдержанность это недуг.
Gero © (18.11.04 18:59) [76]
> Зачем вбивать себе в голову какие-либо ограничения?
Ограничения - сродни стандарту.
А все стандартное легко запоминается и работа со стандартным сводится к механической работе.
Например, не используя exit, мы вольны для отладки поставить точку останова на предпоследнюю строку процедуры и посмотреть значения переменных перед выходом из процедуры. Если же будет применен exit, то такой вариант отладки уже не пройдет.
Придется отлаживать нестандартно - ставить несколько точек останова на каждый exit.
В общем речь о том, чем меньше ветвлений, прыжков и т.п. тем прозрачнее алгоритм. Goto, Break, Exit, Cont., вносят дополнительные ветвления. А нужны ли нам эти ветвления если без них можно обойтись? Вот собсно об этом я и говорю.
← →
Defunct © (2004-11-18 19:35) [81]begin...end ©
> Их так просто заметить, что их не замечаете даже Вы - автор кода.
Ваша цель была найти ошибки, вы их нашли с чем вас и поздравляю.
Моя цель была показать, что break не нужен, и что без break ошибки лучше видны. С чем я тоже успешно справился.
← →
Gero © (2004-11-18 19:42) [82]
> А все стандартное легко запоминается и работа со стандартным
> сводится к механической работе.
Согласен. Break, Continue и пр. - вполне стандартные операторы.
← →
Defunct © (2004-11-18 19:49) [83]Gero © (18.11.04 19:42) [82]
Как говорится, остались при своем imho.
← →
Defunct © (2004-11-18 21:47) [84]begin...end © (18.11.04 18:58) [75]
Могу вам подыграть ;>
А еще я один раз написал в форуме:
(Sender.Handle as TControl).Left := ...
или что-то в этом духе.
Можете добавить в свой аресенал.
← →
KSergey © (2004-11-19 08:24) [85]Все же позволю себе написать. Хотя, понятно, вс еостанутся при своих имхах.
[63] Defunct © (18.11.04 16:41)
KSergey © (18.11.04 16:08) [61]
Это Gero так считает.
Нет, не он один. Я тоже так считаю.
[69] Defunct © (18.11.04 18:05)
2. Вы хотите порадоваться тем, что приперли меня к стенке знаком равенства.
Да при чем тут, блин, знак равенства?!! Неужели вы и вправду не видите проблем в своем коде и принципиальное отличие от приведенного с for? НЕ ВЕРЮ!
[70] Defunct © (18.11.04 18:15)
> begin...end ©
> Видите ли: если сделать на основе Вашего "абстрактного" кода "неабстрактный", то он тоже не будет работать.
Я вас огорчу, вот абстрактный код[23]:
while NoError(Arr[i]) and (i<High(Arr)) do
Begin
<Код>
end;
Сколько можно повторять, что он НЕ СООТВЕТСВУЕТ коду из [26]. Неужели ткнуть надо в чем именно? Да плевать на Inc и тонкости в операторе сравнения, это понятно что сделаете правильно. В вашем коде - ПРИНЦИПИАЛЬНая ошибка! Вернее не ошибка, а отличие. Ну посмотрите же внимательно, мне бы не хотелось тыкать... Впрочем, begin...end на нее уже указал, хотя я бы начал с другого варианта, ну да не важно. При этом, даже перестановка местами проверок - накладывает на разработчика заботу следить на опцией BoolEval. Зачем??
[28] Defunct © (18.11.04 00:28)
А я вам гарантирую, что без Break, Continue, Goto, Exit, Inline и прочее упомянутое можно запросто обойтись, причем всегда.
Да разве же кто-то спорит?
[69] Defunct © (18.11.04 18:05)
То что я хотел показать (без break можно обойтись всегда), я показал.
Безусловно, хотя тут вы уже лукавите.
> [69] Defunct © (18.11.04 18:05)
> Я ни разу в программах на Паскале и Delphi, за последние
> ~10 лет, не использовал ни break, ни goto, ни exit, а continue
> считал и считаю верхом алогизма (особенно если крутится
> вложенный цикл).
Во, вот тут наконец-то мы слышим правду. Безусловно, это личное дело каждого, но моя позиция противополжна. Хотя, конечно, это религия, тут спорить смысла нет.
И еще по поводу Exit.
Стандартный кусок:if Проверка_1 then Выход;
Действия_1;
if Проверка_2 then Выход;
Действия_2;
if Проверка_3 then Выход;
Основные действия;
Ну Выход я написал условно, чтобы показать алгоритм. Смысл в том, что в случае выполнения проверок (на ошибки) дальше делать тут нечего. Да, можно вложить кучу if"ов. Но на мой взгляд - это ужас! Можно воспользоваться исключениями, как писали мастера выше. Но зачем изличне расходовать ресурсы?? Ведь очевидно, что Exit - легче, чем обработка исключений.
← →
Fay © (2004-11-19 09:33) [86]Все мётлы и веники - на помойку! Туда им дорога!!
Ах, как клёво подметать ломами да лопатами!!!
← →
Defunct © (2004-11-19 15:35) [87]> Да при чем тут, блин, знак равенства?!! Неужели вы и вправду не видите проблем в своем коде и принципиальное отличие от приведенного с for?
Я не вижу к чему вы прицепились в той одной строчке, абстрактного примера. см [81]
Зато проблему в for я вижу отчетливо - чтобы прервать цикл надо использоватать, с моей точки зрения левый, оператор break.
> Да разве же кто-то спорит?
Тогда будьте добры, укажите вашу цель этого разговора.
Потому что здается мне, ваша цель просто показать что я ошибся?
← →
begin...end © (2004-11-22 10:59) [88]
> [85] KSergey © (19.11.04 08:24)
Сергей, оцените ситуацию объективно.
1. Defunct утверждает (см. [81]), что он успешно доказал: "без break ошибки лучше видны". Как мы видели, в процессе этого доказательства правильный код Gero (с Break, см. [17]) был превращён в неправильный код Defunct (без Break, см. [23]). В [23] НА 3 СТРОЧКИ КОДА ПРИХОДИТСЯ 2 ОШИБКИ. Правда, потом пропорция изменилась: теперь НА 3 СТРОЧКИ КОДА ПРИХОДИТСЯ 1 ОШИБКА. Всё равно - многовато. Таким образом, мы получили, по крайней мере, единичное опровержение утверждения "без break ошибки лучше видны".
2. В [70] Defunct приводит код, и характеризует его: "неабстрактным и рабочим, я его сделал еще до того как вы сегодня проснулись". В то же время очевидно, что ЭТОТ КОД ТОЖЕ НЕ РАБОТАЕТ. А Defunct, видимо, даже не потрудился выполнить его с включённой опцией Range Checking.
А вот теперь скажите, Сергей - стоит ли разговаривать серьёзно с человеком, упорно называющим свой неработающий код "рабочим"? И утверждающим, что он что-то "доказал", когда на самом деле он доказал обратное?
← →
KSergey © (2004-11-22 13:48) [89]> Defunct © (19.11.04 15:35) [87]
> > Да при чем тут, блин, знак равенства?!! Неужели вы и вправду
> не видите проблем в своем коде и принципиальное отличие
> от приведенного с for?
> Я не вижу к чему вы прицепились в той одной строчке, абстрактного примера. см [81]
Плохо.
Либо см. [72], либо вот еще более простая ситуация: массив имеет нулевую длину. Законно? А тогда как быть с кодом из [70]?? При том, что цикл с for будет работать корректно.
Заметьте, я ни в коей мере покусаюсь на "абстрактность".
> > Да разве же кто-то спорит?
> Тогда будьте добры, укажите вашу цель этого разговора.
Хотелось бы увидеть или аналогичное по празрачности решение без for, либо... ну вы поняли ;)
А то, что в принципе без break обойтись можно - это безусловно, но цель-то наша, как мне видится, не в искуственных ограничениях религиозного толку, а в познании шаблонов прозрачного. лаконичного кода.
PS
а личто я использую goto! ;) один раз правда, но посоветовавшись с одним мужичком услышал от него верную, на мой взгляд, фразу: "если тебе удобнее и код здесь будет более прозрачен - так зачем себя насиловать и городить неестественные решения?"
← →
Defunct © (2004-11-23 06:00) [90]KSergey © (22.11.04 13:48) [89]
> Либо см. [72], либо вот еще более простая ситуация: массив имеет нулевую длину. Законно?
Понимаете, моей целью не было написать рабочий пример. Моей целью было написать абстрактный пример, который покажет суть того, как именно избавиться от break. Следовательно, меня абсолютно не волнуют ни опции компилятора, ни ситуации когда этот код не будет работать. Потому что я могу привести сколько угодно ситуаций, когда код Gero тоже не будет работать. Например:
Arr : Array[50..67] of TForm;
Вот теперь скажите, законно ли набрасываться на какой-то абстрактный кусочек кода, который просто показывает КАК можно избежать использования break?
> Хотелось бы увидеть или аналогичное по празрачности решение без for, либо...for i := 0 to High(A) do
begin
if <ошибка> then break;
<код>
if <что-то> then break
end;
Аналогичное по прозрачности:i := 0;
while (i<High(A)) and (not NeedToBreak) do
if <ошибка> then NeedToBreak := True else
begin
<код>
Inc(i);
if <что-то> then NeedToBreak := True
end;
Может вам с первого взгляда покажется, что кода написано больше. Зато логика цикла остается ровной. Условие выхода из цикла записано только в одном месте, и вы не будете гадать почему цикл был покинут или почему при отладке не попали на нужную вам строку.
Теперь попробую с Repeat, здесь помоему еще прозрачнее:I := 0;
if not <ошибка> then
Repeat
<Код>
inc(i);
Until <что-то> and (i<High(A));
А в общем случае, лучше пользоваться правилом - "пиши проще" и избегать циклов с множеством условий выхода:
- разбивать сложный цикл на простые
- вынести как можно больше, часто ненужных, проверок из тела цикла
так что, например у меня, никогда бы не складывалась ситуация описанная Gero. Поскольку я никогда не использовал break, вообще не вижу ситуации когда бы последний был бы востребован.
вот сегодня написал, вполне рабочий код, и без всяких break.
хотя судя по возгласам некоторых, break в таких случаях применять просто необходимо:while not ProgressForm.BreakStatus do
begin
StepForward;
<код>
<BreakStatus зависит от того нажмет ли пользователь на кнопу стоп, либо время в StepForward будет больше заданного>
end;
И вполне прозрачная логика, не находите?
> а личто я использую goto! ;) один раз правда
Goto - это инструмент других языков (Basic, Asm, fortran). Если вам довелось разок его применить, значит писали либо что-то низкоуровневое (имеется в виду системный уровень), либо наоборот - переходили с одного языка на другой.
begin...end © (22.11.04 10:59) [88]
> А вот теперь скажите, Сергей - стоит ли разговаривать серьёзно с человеком, упорно называющим свой неработающий код "рабочим"?
А вы умеете серьезно разговаривать?
Что-то не заметил.
← →
KSergey © (2004-11-23 08:36) [91]> Defunct © (23.11.04 06:00) [90]
> Вот теперь скажите, законно ли набрасываться на какой-то
> абстрактный кусочек кода, который просто показывает КАК
> можно избежать использования break?
Да, т.к. повторю еще раз: он отличается функционально от оригинала. Не отличающийся я в вашем исполнении так и не увидел, увы... Задача же - показать функционально инедтичный код, а не код, примерно равный по функциональности, но работающий верно в других условиях. Это можно понять, наконец? При этом эти доп. условия по определению дожны быть указаны, т.к. являются неотъемлемой частью шаблона. Пусть и абстрактного.
> Аналогичное по прозрачности:
Нууу.... Я бы так не сказал, хотя решить сие без голосования - наверное не выйдет ;) Впрочем, доверюсь вам.
Хотя, а что же делать в немколько более сложном случае:for i := Low(A) to High(A) do
begin
if <проблема_1> then break;
<код>
if <проблема_2> then break;
<код>
if <что-то> then break
end;
Обрастать else if"ами? Нет уж, увольте. Хотя это, конечно же, опять дело вкуса, спорить тут, видимо, смысла нет.
> И вполне прозрачная логика, не находите?
Нахожу, только это не в тему совсем.
> Теперь попробую с Repeat, здесь помоему еще прозрачнее:
А постоянно приводить функционально совершенно не идентичный код - это нормально по-вашему???!!
← →
begin...end © (2004-11-23 09:16) [92]
> [91] KSergey © (23.11.04 08:36)
> > Теперь попробую с Repeat, здесь помоему еще прозрачнее:
>
> А постоянно приводить функционально совершенно не идентичный
> код - это нормально по-вашему???!!
Вот-вот... И, к тому же - опять неработающий...
> I := 0;
> if not <ошибка> then
> Repeat
> <Код>
> inc(i);
> Until <что-то> and (i<High(A));
Мда... Куда уж прозрачней...
← →
KSergey © (2004-11-23 09:44) [93]> [92] begin...end © (23.11.04 09:16)
> Вот-вот... И, к тому же - опять неработающий...
> Until <что-то> and (i<High(A));
То, что вы выделили - мелочь, по-моему. Код по структуре принципиально отличается. Пока не буду писать чем.
← →
Verg © (2004-11-23 09:50) [94]
> [90] Defunct © (23.11.04 06:00)
> KSergey © (22.11.04 13:48) [89]
> > Либо см. [72], либо вот еще более простая ситуация: массив
> имеет нулевую длину. Законно?
>
> Понимаете, моей целью не было написать рабочий пример. Моей
> целью было написать абстрактный пример, который покажет
> суть того, как именно избавиться от break. Следовательно,
> меня абсолютно не волнуют ни опции компилятора, ни ситуации
> когда этот код не будет работать.
Это что, типа прозрачность в ущерб работоспособности?
А зачем тогда if not <ошибка> then?
Без этого if-а было бы еще прозрачнее.
Давайте прозрачный нерабочий код писать и сидеть наслаждаться "крысотой"!
Да уж Open Source отдыхает...
← →
begin...end © (2004-11-23 15:39) [95]
> [93] KSergey © (23.11.04 09:44)
> То, что вы выделили - мелочь, по-моему. Код по структуре
> принципиально отличается. Пока не буду писать чем.
> I := 0;
> if not <ошибка> then
> Repeat
> <Код>
> inc(i);
> Until <что-то> and (i<High(A));
1. Если массив пуст, то проверяется выполнение условия <ошибка> для несуществующего элемента.
Прочие недостатки относятся к случаю <ошибка> = False:
2. Если массив состоит из одного элемента, то после первого прохода i > High(A), и цикл никогда не закончится (если, конечно, не учитывать его вылет из-за ошибки).
3. Независимо от количества элементов массива: если окажется, что <что-то> = False при любом i, то цикл никогда не закончится.
Кто больше?
> [94] Verg © (23.11.04 09:50)
> Да уж Open Source отдыхает...
Да, на всеобщее обозрение такой код лучше не выставлять, - слишком прозрачный.
← →
KSergey © (2004-11-23 15:52) [96]> [95] begin...end © (23.11.04 15:39)
Да нет, я все же не о том.
Под "принципиально отличается" по структуре я имел в виду то, что if вынесен за пределы цикла! Т.е. в нем уже не может идти речь о проверке каких-либо элементов, тем более на каждой итерации. Изначальный же код выполнял if на каждой итерации. Налицо то, что код <ошибка> уже не применим, т.е. предлагаемый код не соответствует исходному по сути. Либо надо было оговаривать изменения в "абстракциях" (кусочках между <..>).
Про то, что для одного элемента выполнится цикл в любом случае - это как-то Defunct вообще игнорирует упорно до сих пор ;)
← →
Defunct © (2004-11-23 18:48) [97]> Да, т.к. повторю еще раз: он отличается функционально от оригинала. Не отличающийся я в вашем исполнении так и не увидел, увы... Задача же - показать функционально инедтичный код, а не код, примерно равный по функциональности, но работающий верно в других условиях. Это можно понять, наконец? При этом эти доп. условия по определению дожны быть указаны, т.к. являются неотъемлемой частью шаблона. Пусть и абстрактного.
Я вашу точку зрения понял. А вы мою?
> Хотя, а что же делать в немколько более сложном случае:
> for i := Low(A) to High(A) do
> begin
> if <проблема_1> then break;
> <код>
> if <проблема_2> then break;
> <код>
> if <что-то> then break
> end;
Помоему я уже написал, как быть в общем случае. Только вы приняли это решение, за не относящееся к теме:while not BreakStatus do
begin
<код>;
<Процедура в которой рассматриваются все проблемы и условия пребывания>
end;
> А постоянно приводить функционально совершенно не идентичный код - это нормально по-вашему???!!
А упорно не хотеть понять мою точку зрения это нормально?
Читать сообщения не полностью тоже нормально?
> Про то, что для одного элемента выполнится цикл в любом случае - это как-то Defunct вообще игнорирует упорно до сих пор ;)
А if перед стартом цикла? Вы его конечно проигнорировали.
> Until <что-то> and (i<High(A));
здесь была опечатка
если вы посмотрите на время когда я постил примеры (5:00) утра, думаю можно быть более снисходительным.
Verg © (23.11.04 09:50) [94]
не уподобляйтейсь begin...end.
← →
begin...end © (2004-11-23 19:31) [98]
> [97] Defunct © (23.11.04 18:48)
Defunct, дело в том, что мне просто не нравятся голословные утверждения.
Вот Вы говорите в [81]:
> Моя цель была показать, что break не нужен, и что без break
> ошибки лучше видны. С чем я тоже успешно справился.
Надеюсь, это действительно Ваши слова, и я ничего не переврал?
Так вот - пожалуйста, покажите, ГДЕ в этой ветке Вы показали, что без Break ошибки лучше видны?
Ведь Вы ДО СИХ ПОР не привели кода, функционально соответствующего коду Gero [17]. Вместо этого Вы один за одним приводите варианты кода, в которых - ошибка на ошибке. На мой взгляд, это является прямым опровержением Вашего мнения. По крайней мере, для тех случаев, которые описываются в этой ветке.
> > Until <что-то> and (i<High(A));
> здесь была опечатка
А Вы можете наконец привести код, не содержащий опечаток?
И ещё - посмотрите, сколько человек согласно / не согласно (как я понял) с Вашим мнением о том, что "без break ошибки лучше видны".
Не согласны с этим утверждением (в алфавитном порядке):
1. Anatoly Podgoretsky (Мастер) [55]
2. begin...end [62]
3. Gero [8]
4. Ihor Osov"yak (Мастер) [50]
5. KSergey [85]
6. Palladin (Мастер) [31]
7. Verg (Мастер) [94]
8. Игорь Шевченко (Мастер) [30]
Согласны с этим утверждением:
1. Defunct
Вас это ни на какие мысли не наводит?
← →
Verg © (2004-11-23 20:21) [99]
> [97] Defunct © (23.11.04 18:48)
> Verg © (23.11.04 09:50) [94]
> не уподобляйтейсь begin...end.
Не бредонось. Чес-слово, иногда такое несешь, что аж стыдно за наше поколение.....
"Следи за собой, будь осторожен" (С) Кино.
← →
Defunct © (2004-11-23 20:30) [100]> И ещё - посмотрите, сколько человек согласно / не согласно (как я понял) с Вашим мнением о том, что "без break ошибки лучше видны".
Ключевая фраза здесь - (как я понял).
Я и не смневался, что вы можете сказать, что все в этой ветке против моего мнения.
Для того чтобы разбить вашу теорию, достаточно посмотреть на первый пост, приведенный вами в качестве аргумента - AP [55]. Там нет ни слова о том согласен уважаемый AP или не согласен с моим мнением. Следовательно, дальше рассматривать приведенный Вами список даже нет смысла.
Мне очень интересно, какова цель ваших "атак"? Причем не только в этой ветке. Вас раздражает мой nick-name?
← →
Verg © (2004-11-23 20:32) [101]
> 100] Defunct © (23.11.04 20:30)
Советую спать ночами, а не насиловать организм....
← →
begin...end © (2004-11-23 20:41) [102]
> [100] Defunct © (23.11.04 20:30)
> Для того чтобы разбить вашу теорию, достаточно посмотреть
> на первый пост, приведенный вами в качестве аргумента -
> AP [55]. Там нет ни слова о том согласен уважаемый AP или
> не согласен с моим мнением.
Там есть выражение согласия с постом [31], поэтому прочитайте [31] внимательнее.
Но если Вы не считаете это очевидным, то пожалуйста - всё равно будет 7 против 1.
> Вас раздражает мой nick-name?
А вот здесь Вы глубоко заблуждаетесь. Меня раздражают голословные утверждения, и об этом я уже сказал в [98]. А уж кто эти самые голословные утверждения делает, а уж тем более, какой nick-name у того, кто их делает - мне абсолютно всё равно. Может быть, просто так получается, что Вы их делаете чаще, чем другие?
А Вы всё же, пожалуйста, ответьте на вопрос, заданный в [98]: "ГДЕ в этой ветке Вы показали, что без Break ошибки лучше видны?". Если можете ответить, конечно.
← →
Defunct © (2004-11-23 20:44) [103]Verg © (23.11.04 20:21) [99]
Именно это я и подумал, прочитав [94].
без обид.
поясню:
В [94] вы критиковали предложение:
>> Понимаете, моей целью не было написать рабочий пример.
> Это что, типа прозрачность в ущерб работоспособности?
По вашему абстрактный пример может быть работоспособным?
Если да, тогда действительно выходит - прозрачность в ущерб работоспособности. Если нет, тогда Вы просто не поняли о чем я говорю.
> А зачем тогда if not <ошибка> then?
> Без этого if-а было бы еще прозрачнее.
Потому что мне, как автору поста, захотелось его там написать. Точно также как и Gero захотелось написать if IsError(Arr) then break.
> Давайте прозрачный нерабочий код писать и сидеть наслаждаться "крысотой"!
Давайте не будем искажать и переворачивать все вверх дном.
Используете break, хорошо, на то ваше право. Я не использую break, на то есть мое право. begin...end в мягкой форме говорит, что я пишу все программы по-ламерски раз не использую break, на то есть его право.
> Да уж Open Source отдыхает...
А это вообще не понятно к чему. Я не насколько дальновиден, чтобы увидеть связь OpenSource с оператором break и/или как-то связать с темой о циклах.
← →
Verg © (2004-11-23 20:51) [104]
> [103] Defunct © (23.11.04 20:44)
Надо б тебе валерьянки попить, или к врачу...
Ты что, выспался и решил еще понести, еще большую пургу?
← →
Defunct © (2004-11-23 21:07) [105]Verg © (23.11.04 20:51) [104]
Очень интересная манера донести свое мнение.
PS: А на тебя-то что нашло? (я про [94])
← →
Verg © (2004-11-23 21:11) [106]
> А на тебя-то что нашло? (я про [94])
Да "гонево" от тебя уже пошло тако-ое!. На самом деле непонятно стало - то ли ты издеваешься, то ли у тебя что-то с головой случилось....
← →
Defunct © (2004-11-23 21:15) [107]Verg © (23.11.04 21:11) [106]
Дык, просто надоело выслушивать поучения от некоторых.
> Да "гонево" от тебя уже пошло тако-ое!.
В общем да...
← →
begin...end © (2004-11-24 09:30) [108]
> [107] Defunct © (23.11.04 21:15)
Правильно ли я понял - ответа на вопрос, повторенный в конце [102], и приведения кода (например, с циклом repeat) без опечаток, функционально соответствующего [17], - от Вас ожидать не следует?
← →
KSergey © (2004-11-24 10:22) [109]> [97] Defunct © (23.11.04 18:48)
> Помоему я уже написал, как быть в общем случае. Только вы
> приняли это решение, за не относящееся к теме:
>
> while not BreakStatus do
> begin
> <код>;
> <Процедура в которой рассматриваются все проблемы и условия
> пребывания>
> end;
Издеваетесь? ;)
Нельзя ли уточнить вот это:<Процедура в которой рассматриваются все проблемы и условия пребывания>
Я прекрасно понял вашу точку зрения.
Но вы упорно делаете вот что: приводите "абстрактный код" в котором кучу проверок, которые я рисую в своем "абстрактном коде" сводите в лаконичную фразу по-русски "Процедура в которой...".
А если эту фразу написать на дельфи, а? Будет ли она столь лаконичной?
Вы упорно приводите другие абстрактрые коды.
Я же считаю, что если код с for не выкидывая из него обязательные (предположим, для некоего алгоритма) куски (ну нельзя без них!) переложить на вариант без break - то выйдет куда более пространный код. Можно спорить о его прозрачности, но он будет существенно более многословным!
Вот потому я и бьюсь уже который день, пытаясь вытянуть не расплывчатую фразу "вот тут все проверки", а конкретный код, без упрощений!
Неужели нельзя его написать, наконец??! Чтобы можно было все же предметно разговаривать и голосовать, а??
> А if перед стартом цикла? Вы его конечно проигнорировали.
Да нет же! Я все внимательно читал. Но согласитесь, если if вставлен внутрь цикла - то наверное не от дури, а лишь потому, что за цикл его вынести нельзя (работает с конкретным элементом массива, например). Если это было не очевидно - прошу прощения, что не уточнил.
Так свет увидит наконец функционально полностью идентичный код тому, что приведен в [17] и [91]???
ЗЫ
С одним бодался-бодался (ровно о том же) - так он жаловаться ушел... Уж извините.
← →
KSergey © (2004-11-25 11:10) [110]Ну что, все, не увидим мы ответов тов. Defunct?
← →
ASoft (2004-11-25 12:03) [111]Привет, Sicilla!
У меня на D7 такая хрень была, но в целом, программа работала. Именно при проверке Step"ом переменная в цикле (for) показывала черти-что. До D7, никакой Дельфией не пользовался.
Что касается, выбирать из Break-Continue, я пользуюсь ими по мере надобности, когда считаю, что мне нужны данные операторы.
Ну и кашу заварил...:)
← →
KSergey © (2004-11-25 12:15) [112]> [111] ASoft (25.11.04 12:03)
Это не черти что, это работа оптимизатора. Автор же рассказывает не совсем понятно о чем...
← →
begin...end © (2004-11-28 14:07) [113]> [110] KSergey © (25.11.04 11:10)
"Жаль, что нам так и не удалось послушать начальника транспортного цеха" (© Жванецкий).
← →
KSergey © (2004-11-28 14:11) [114]> begin...end © (28.11.04 14:07) [113]
"...услышать..", если не ошибаюсь, было в оригинале ;)
Впрочем, не суть важно ;)
← →
KSergey © (2004-11-29 07:46) [115]Пишу от имени и по поручению Defunct. Текст авторский, без изменений.
KSergey © (24.11.04 10:22) [109]
> Так свет увидит наконец функционально полностью идентичный код тому,
что приведен в [17] и [91]???
> Gero © (17.11.04 23:35) [17]
> for i := 0 to High(Arr) do
> begin
> if IsError(Arr[i]) then Break;
> <Код>
> end;
Для цикла while я инвертирую функцию IsError -> NoError;i := 0;
CanGo := NoError(Arr[0]);
while CanGo do
begin
<Код>
inc(i);
if i<High(Arr) then CanGo := NoError(Arr[i])
else CanGo := False
end;
Для repeat отсавлю оригинальную IsError.i := 0
if i<High(Arr) then
Repeat
if not IsError(Arr[i]) then
begin
<Код>
end;
inc(i);
Until (i>=High(Arr)) or IsError(Arr[i-1]);
PS
Вот объяснения от Defunct:
меня кажется забанили из-за тов. Soft"a....
У нас с ним один IP (работаем через NAT).
Так что извините с задержкой ответа.
Можете его запостить в той ветке:
← →
KSergey © (2004-11-29 07:50) [116]Ну а теперь наш ответ чемберлену ;)
Ну то, что код стал более многословным - стоило ожидать. На мой взгляд - он менее прозрачен, ну да тут спорить наверное смысла нет, это уже религия. Соответственно, при усложнении сей код будет еще усложняться и все более запутываться. Хотя это опять мое мнение.
Единственный прокол, который я вижу - в цикле Repeat ф-ция IsError будет вызываться дважды для каждого элемента массива (кроме последнего). Хорошо ли это??
← →
kostan © (2004-11-29 09:12) [117]может не совсем в тему....
ВНИМАНИЕ! Ошибка компилятора Delphi !
Обнаружена была давно (на сайте Borland есть ссылка)
реально НЕЛЬЗЯ использовать напрямую переменную цикла
в вычислениях!
пример:
for i:=1 to 1000 do
begin
gg=i*i*20;
end;
выдаст не верный результат
НАДО так !! (через переменную)
for i:=1 to 1000 do
begin
b=i
gg=b*b*20;
end;
← →
TButton © (2004-11-29 09:21) [118]
> а зачем Continue вообще нужен?
> также как и Goto и Exit его место на помойке IMHO.
+
> > Тогда уж и Break в придачу.
>
> Абсолютно точно, и break туда же.
> IMHO те кто пользуется
> Goto, Break, Continue, Exit
> просто не могут нормально реализовать логику программы.
>
> > А можно и циклы вобще выкинуть. Нафиг они нужны?
>
> не извращайте идею.
>
> C помощью 7-ми операторов можно реализовать любую логику:
> 1. пустой оператор - ;
> 2. оператор присваивания :=
> 3. Условный оператор if <> then <оператор> else <оператор>
> 4. Оператор цикла с пердусловием while <условие> do <оператор>
> 5. Оператор цикла с постусловием repeat <оператор> until
> <условие>
> 6. Оператор цикла с границами for <от> to <до> do <оператор>
> 7. Составной оператор begin <оператор>.. end.
>
> два доп. оператора case и with можно применять для красоты
> и наглядности программы.
>
> Continue, Break, Goto, Exit лишь запутывают логику программы
> и делают программу трудно читаемой.
ну тады мое имхо. имхо место ложек и вилок на помойке, поварежек, шумовок и т.п. там же. кастрюли, сковородки и чайники тоже абсолютно не нужны. имхо, те кто всем этим пользуется - не могут правильно организовать свой быт.
ведь можно обойтиси всего двумя предметами
1. глиняная миска
2. китайские палочки.
← →
ЮЮ © (2004-11-29 09:23) [119]>выдаст не верный результат
И кто здесь чего выдаёт? если gg используется только для профанации, то, возможно, и будет "подсчитана неправильно", да только об этом никто не узнает.
← →
KSergey © (2004-11-29 09:23) [120]> [117] kostan © (29.11.04 09:12)
Может когда и было... Проверять лень, но сомнение меня разбирает...
Страницы: 1 2 3 4 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.75 MB
Время: 0.043 c