|   |   | 
| 
 | OFF: goto - ваше отношение к этому оператору | ☑ | ||
|---|---|---|---|---|
| 0
    
        skunk 06.04.06✎ 06:03 | 
        ваше отношение к этому оператору... что это рудимент... или мощное средство борьбы с рекрусивными вызовами...     | |||
| 1
    
        Vint Kras 06.04.06✎ 06:04 | 
        goto...
  в 1С бы его... | |||
| 2
    
        колодина 06.04.06✎ 06:05 | 
        goto - как декоративная косметика для женщины... в небольших количествах - очень украшает!     | |||
| 3
    
        Vint Kras 06.04.06✎ 06:06 | 
        + тьфу, пля, я про CASE     | |||
| 4
    
        skunk 06.04.06✎ 06:07 | 
        (1) ;)))
  (2)как тут недавно сказал композитор... код в студию... хотелось бы видеть хде он что-то украшает | |||
| 5
    
        колодина 06.04.06✎ 06:09 | 
        (3) согласна... люблю этот оператор....     | |||
| 6
    
        skunk 06.04.06✎ 06:11 | 
        (5)в нашем шопе женщинам 50% скидки ...     | |||
| 7
    
        Vint Kras 06.04.06✎ 06:13 | 
        (6) goto использовал один раз, без него было бы не удобно     | |||
| 8
    
        колодина 06.04.06✎ 06:13 | 
        (7) всего один раз? за сколько лет???????? ужасссссссссс..........     | |||
| 9
    
        Vint Kras 06.04.06✎ 06:14 | 
        (8) в 1С, а зачем ? чего ужасного ?     | |||
| 10
    
        skunk 06.04.06✎ 06:15 | 
        (7)код в студию...     | |||
| 11
    
        колодина 06.04.06✎ 06:15 | 
        (9) а... в 1С... хотя я его за 2 года работы в 1С использовала гораздо чаще... при работе с файлами...     | |||
| 12
    
        skunk 06.04.06✎ 06:18 | 
        (11)может покажешь... уж больно интересно     | |||
| 13
    
        колодина 06.04.06✎ 06:20 | 
        (12) не хочется лазать по конфигурациям... сейчас в 8-ке только работаю.... а там пока без goto обхожусь...     | |||
| 14
    
        skunk 06.04.06✎ 06:24 | 
        кто нить все таки покажет мне код в котором без этого апендика нельзя обойтись     | |||
| 15
    
        колодина 06.04.06✎ 06:27 | 
        (14) обойтись - можно всегда... но иногда именно этот оператор помогает сделать текст более компактным и удобным для анализа.     | |||
| 16
    
        AndrewHV 06.04.06✎ 06:31 | 
        (0)РУДИМЕНТ основной источник неприятностей у программистов с незапамятных времен.     | |||
| 17
    
        Obed 06.04.06✎ 06:32 | 
        Поледний раз использовал, когда на с++ писал, еще в школе :)
  (16) угу, но (15) иногда случается | |||
| 18
    
        Vint Kras 06.04.06✎ 06:33 | 
        (14) вот тут видимо можно, но я посчитал что с ним удобнее:
  Предупреждение("Несколько клиентов с одним ИНН ("+СокрЛП(ДБФ.PAYERINN)+"). Для получателя следует выбрать нужный."); ~Метка2: Послать.Установить("ТекЭлемент", ПлатежныеПоручения.Клиент); ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать); Если Послать.Получить("СтатусВозврата") = 1 тогда Если Послать.Получить("ВыбЗначение").ФлагНеИспользовать=1 тогда Предупреждение("Не, не, не, у этого стоит флаг не использовать..."); Перейти ~Метка2; Иначе Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение")); КонецЕсли; .... Иначе Предупреждение("Не, не, не, всё же надо выбрать..."); Перейти ~Метка1; КонецЕсли; | |||
| 19
    
        smaharbA 06.04.06✎ 06:37 | 
        Вот так без готу не сделать, скажете обычный цыкл, но внимательно позырьте...
  ~М1: //Тут код Перейти ~М2 //Тут тоже ~М2: //И тута... Перейти ~М1 | |||
| 20
    
        AndrewHV 06.04.06✎ 06:38 | 
        (18) Классический пример спагетти-кода в зародыше     | |||
| 21
    
        skunk 06.04.06✎ 06:38 | 
        (15)чисто женская логика ... линейная... как скачки туда сюда можно повышают читабельность текста?
  (18)а в карточке написано вроде мужик | |||
| 22
    
        у лю 427 06.04.06✎ 06:39 | 
        (0) goto нах...     | |||
| 23
    
        Vint Kras 06.04.06✎ 06:39 | 
        +18 есть несколько карточек с одним ИНН (и не надо умничать по этому поводу), есть флаг, отбор по значению, в Метка1 если флаг у одного, то автомат, если ни у кого или нескольких вот етот кусок работает...     | |||
| 24
    
        skunk 06.04.06✎ 06:39 | 
        (19)самй обычный цикл... с условием     | |||
| 25
    
        skunk 06.04.06✎ 06:40 | 
        (22)не верят     | |||
| 26
    
        AndrewHV 06.04.06✎ 06:41 | 
        Использование меток и операторов безусловного перехода ухудшают читабельность кода и его сопровождение. Что и было продемонстрировано в (18), который без дополнительных комментариев (23) понять невозможно.     | |||
| 27
    
        колодина 06.04.06✎ 06:41 | 
        (21) чисто женская логика - это типа оскорбление? или простая констатация факта? кстати, женская логика - как раз нелинейная...     | |||
| 28
    
        skunk 06.04.06✎ 06:44 | 
        (27)как раз она линейная... если сравнивать с программированием... и оператор гоуту там появшись это потверждает... скачем туда сюда... а зачем и почему не ясно...
  зы нет не оскробление... я когда начинаю хамить спрашиваю: "Вы Лева Баранов?" | |||
| 29
    
        smaharbA 06.04.06✎ 06:46 | 
        Началось, а бедные процессоры то не знают что гото это нехорошо...     | |||
| 30
    
        Vint Kras 06.04.06✎ 06:47 | 
        (21) ето ты про чё ?     | |||
| 31
    
        skunk 06.04.06✎ 06:47 | 
        (29)у них логика женская... линейная... мы же мыслим абстрактно... так сказать объектно-процедурно... есть объект... думаем как его иметь     | |||
| 32
    
        skunk 06.04.06✎ 06:48 | 
        (30)читай 26     | |||
| 33
    
        AndrewHV 06.04.06✎ 06:50 | 
        (29) вопрос не в том, что хорошо для процессоров, а в том, что хорошо для программистов. Для процессоров к примеру вообще не существует понятия "Культура программирования".     | |||
| 34
    
        skunk 06.04.06✎ 06:50 | 
        +33 да и на читабельность текста ему покакать     | |||
| 35
    
        Vint Kras 06.04.06✎ 06:51 | 
        (31) в моём случае - внешняя обработка, конфу менять низя, жесткое условие - должен обязательно выбрать карточку !!! ну и 23, у меня это заняло вот столько строк, поимей по другому...     | |||
| 36
    
        skunk 06.04.06✎ 06:52 | 
        (35)швырни в мыло обработкой...     | |||
| 37
    
        Obed 06.04.06✎ 06:55 | 
        (35)
  
  | |||
| 38
    
        skunk 06.04.06✎ 06:56 | 
        (37)конкретная редиска ... (((     | |||
| 39
    
        Obed 06.04.06✎ 06:57 | 
        (38) Стараемся :)     | |||
| 40
    
        skunk 06.04.06✎ 06:59 | 
        на обед сегодня будет бризоль из баранины     | |||
| 41
    
        Obed 06.04.06✎ 07:01 | 
        (40) а у меня обед уже закончился :)     | |||
| 42
    
        skunk 06.04.06✎ 07:02 | 
        вам Денис очень повезло... а у нас еще и завтрак не начинался     | |||
| 43
    
        Obed 06.04.06✎ 07:03 | 
        а нах в такую рань-то вставать? :)     | |||
| 44
    
        Vint Kras 06.04.06✎ 07:04 | 
        (37) а если находясь в списке чел поубирал флаги у одного или нескольких...     | |||
| 45
    
        skunk 06.04.06✎ 07:04 | 
        (43)привычка... сплю три-четыре часа в сутки... если трезвым спать ложусь... вчера было выпито всего четыре бутылки пива... можно сказать, что спать лег трезвым     | |||
| 46
    
        Vint Kras 06.04.06✎ 07:07 | 
        +44 мне суть понятна, флаги, флаги, тогда я выбрал метки, по моему было удобнее, код имеет вполне читабельный вид..     | |||
| 47
    
        Obed 06.04.06✎ 07:08 | 
        (44) чего поубирал?
  (46) на вкус и цвет, как говорится... | |||
| 48
    
        skunk 06.04.06✎ 07:09 | 
        (47)ты тоже не понял кто и что убирает     | |||
| 49
    
        Obed 06.04.06✎ 07:09 | 
        (45) Во блин сумасшедший.... Я тож раньше мог и по трое суток не спать, а что выспаться потом хватало 4-5 часов... а щас.....     | |||
| 50
    
        Obed 06.04.06✎ 07:10 | 
        (48) а ты понял? я чет нет.     | |||
| 51
    
        skunk 06.04.06✎ 07:10 | 
        (49)у меня режим работы такой... 23 года уже старый... блин тогда не зря я на пенсию ушел     | |||
| 52
    
        Vint Kras 06.04.06✎ 07:12 | 
        находясь в списке можно редактировать ? я думаю да. отредактировал, нажал закрыть не выбрав     | |||
| 53
    
        Obed 06.04.06✎ 07:13 | 
        (52) Тогда у тебя СтатусВозврата не 1 будет я так понимаю     | |||
| 54
    
        Obed 06.04.06✎ 07:14 | 
        (51) Да жизнь нелегкая сложилась )))     | |||
| 55
    
        Vint Kras 06.04.06✎ 07:15 | 
        (53) а это в коде не отрабатывает ?     | |||
| 56
    
        skunk 06.04.06✎ 07:15 | 
        (54)а кому в этой жизни легко было...     | |||
| 57
    
        skunk 06.04.06✎ 07:16 | 
        (55)что там не отработает... хотя без всего судить трудно....     | |||
| 58
    
        Obed 06.04.06✎ 07:16 | 
        (55) Здрасте:
  фл=1; Пока фл=1 Цикл фл=0; Послать.Установить("ТекЭлемент", ПлатежныеПоручения.Клиент); ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать); Если Послать.Получить("СтатусВозврата") = 1 тогда ... Иначе Предупреждение("Не, не, не, всё же надо выбрать..."); фл=1; КонецЕсли; КонецЦикла; | |||
| 59
    
        Vint Kras 06.04.06✎ 07:17 | 
        прочтите 23     | |||
| 60
    
        Волшебник модератор 06.04.06✎ 07:18 | 
        Год назад была похожая ветка: OFF: 1C и GoTo  Тогда флейма было гораздо больше. Прогресс! | |||
| 61
    
        Vint Kras 06.04.06✎ 07:18 | 
        (60) ты всё испортил... ща начнеться     | |||
| 62
    
        Obed 06.04.06✎ 07:20 | 
        (59) Не очень понятно... была бы обработка целиком (я так понимая, что с конфой даже), тогда можно было бы понять, а так сложно     | |||
| 63
    
        Obed 06.04.06✎ 07:20 | 
        (60) :)     | |||
| 64
    
        skunk 06.04.06✎ 07:20 | 
        (60)стараемся...     | |||
| 65
    
        Vint Kras 06.04.06✎ 07:25 | 
        отбор по ИНН
  несколько карточек с одним ИНН. есть флаг использовать, не использовать может стоять у одного, у всех, у нескольких, ни у кого, подстановка только того у кого разрешено. форма возвращает список "СтатусВозврата" - 0,1 и выбранное значение код должен работать так, что выбор должен быть произведен в любом случае. задача ясна ? ставим отбор по ИНН ~Метка1 смотрим флаги, если у одного то проставляем его автоматом, если у нескольких то код в 18 | |||
| 66
    
        skunk 06.04.06✎ 07:29 | 
        (65)я же просил скинуть обработку ... skunk_ dog mail dot ru     | |||
| 67
    
        Vint Kras 06.04.06✎ 07:32 | 
        (66) там несколько клиент банков, платежки, выписки, функции достаточно будет ща пришлю...     | |||
| 68
    
        Obed 06.04.06✎ 07:32 | 
        (65) Тогда в ОткрвтьФормуМодально посчитаем сколько флагов стоит, и если один, сразу вернем нужное значение     | |||
| 69
    
        Vint Kras 06.04.06✎ 07:39 | 
        (68) это понятно, но модуль формы менять низя     | |||
| 70
    
        Obed 06.04.06✎ 07:40 | 
        (69) Тогда перед вызовом формы, если авто - тогда и не открываем ее     | |||
| 71
    
        Vint Kras 06.04.06✎ 07:40 | 
        как теги поставить ? я ща код сюда запостю, там строк 30-40....     | |||
| 72
    
        Vint Kras 06.04.06✎ 07:41 | 
        (70) она и не открывается, если один с флагом...     | |||
| 73
    
        Obed 06.04.06✎ 07:42 | 
        (72) ну тогда о чем базар - долнжо и так работать     | |||
| 74
    
        Vint Kras 06.04.06✎ 07:44 | 
        какие теги для кода ?     | |||
| 75
    
        Obed 06.04.06✎ 07:45 | 
  | |||
| 76
    
        Obed 06.04.06✎ 07:46 | 
        блин 1С 
  /1С в квдратных скобках | |||
| 77
    
        Vint Kras 06.04.06✎ 08:00 | ~Метка1: Если Клиент.ВыбратьЭлементыПоРеквизиту("ИНН",ИНН,0,0) = 1 тогда Пока Клиент.ПолучитьЭлемент() = 1 Цикл Если Клиент.ФлагНеИспользовать=0 тогда ФлагИНН=ФлагИНН+1; ВыбКлиент = Клиент.ТекущийЭлемент(); Продолжить; Иначе Если ФлагИНН=0 тогда ВыбКлиент = Клиент.ТекущийЭлемент(); КонецЕсли; КонецЕсли; КонецЦикла; Если ФлагИНН > 1 тогда Предупреждение("Несколько клиентов с одним ИНН ("+ИНН+"). Для получателя следует выбрать нужный."); ~Метка2: Послать.Установить("ТекЭлемент", ВыбКлиент); ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать); Если Послать.Получить("СтатусВозврата") = 1 тогда Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение")); Если Клиент.ФлагНеИспользовать=1 тогда Предупреждение("Не, не, не, у этого стоит флаг не использовать..."); Перейти ~Метка2; КонецЕсли; ВыбКлиент = Клиент.ТекущийЭлемент(); Иначе Предупреждение("Не, не, не, всё же надо выбрать..."); Перейти ~Метка1; КонецЕсли; ИначеЕсли ФлагИНН = 0 тогда Предупреждение("Список клиентов с данным ИНН есть, но у них у всех стоит флаг не использовать. Уберите флаг и попробуйте снова."); ~Метка3: Послать.Установить("ТекЭлемент", ВыбКлиент); ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать); Если Послать.Получить("СтатусВозврата") = 1 тогда Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение")); Если Клиент.ФлагНеИспользовать=1 тогда Предупреждение("Не, не, не, у этого стоит флаг не использовать..."); Перейти ~Метка3; КонецЕсли; ВыбКлиент = Клиент.ТекущийЭлемент(); Иначе Предупреждение("Не, не, не, всё же надо выбрать..."); Перейти ~Метка1; КонецЕсли; КонецЕсли; Иначе тут тожа код... КонецЕсли; По моему код вполне читаем, отработаны все ситуации (на которые у меня ума хватило), выбран будет в любом случае... это единственный раз когда я использовал goto, и по моему без него было бы менее читабельно. теперь судите, что у меня там женское мышление... | |||
| 78
    
        Vint Kras 06.04.06✎ 08:01 | 
        а, пля не отработало...
  а 1С в русской раскладке ? | |||
| 79
    
        Vint Kras 06.04.06✎ 08:01 | я | |||
| 80
    
        Obed 06.04.06✎ 08:01 | 
        (78) в англицкой     | |||
| 81
    
        Vint Kras 06.04.06✎ 08:03 | 
        (80) ну я так и сделал     | |||
| 82
    
        Vint Kras 06.04.06✎ 08:03 | a | |||
| 83
    
        skunk 06.04.06✎ 08:07 | 
        эй заканчиваете флудить в тематической фетке ))
  (77)не суди и не судимым будешь... но код поему можно упростить | |||
| 84
    
        Obed 06.04.06✎ 08:08 | 
  | |||
| 85
    
        Obed 06.04.06✎ 08:09 | 
        Например так     | |||
| 86
    
        Obed 06.04.06✎ 08:09 | Тест | |||
| 87
    
        Obed 06.04.06✎ 08:10 |  
  | |||
| 88
    
        Obed 06.04.06✎ 08:10 | 
        (87) что я делаю не так?     | |||
| 89
    
        Vint Kras 06.04.06✎ 08:11 | 
        вот и у меня ни как..
  g | |||
| 90
    
        Vint Kras 06.04.06✎ 08:13 | 
        хорошо, но по моему код в 77 лучше читается чем в 84 (если не считать что тег не встал)     | |||
| 91
    
        Obed 06.04.06✎ 08:14 | 
        (89) первый 1С без слеша     | |||
| 92
    
        skunk 06.04.06✎ 08:14 | 
        в начале надо ставить тэг   ... затем вот так 
  | |||
| 93
    
        Obed 06.04.06✎ 08:14 | 
        (90) Я ж говорил - на вкус и цвет )))     | |||
| 94
    
        skunk 06.04.06✎ 08:16 | 
        хм... тэг срабатывает даже в середине текста     | |||
| 95
    
        Vint Kras 06.04.06✎ 08:16 | 
        (92) а упростить что хотел ?     | |||
| 96
    
        skunk 06.04.06✎ 08:20 | 
        в (92) я хотел просто показать что сначала надо ставить тэг без слэша... только и всего     | |||
| 97
    
        Vint Kras 06.04.06✎ 08:21 | 
  | |||
| 99
    
        Vint Kras 06.04.06✎ 08:23 | 
        (96) я про 83     | |||
| 100
    
        Мулька 06.04.06✎ 08:31 | 
        100     | |||
| 101
    
        skunk 06.04.06✎ 08:33 | 
        (99)ты бы код выслал... а то меня сейчас думать ломает... вечером посмотрю... если папа опять чего-нить не придумает     | |||
| 102
    
        Иде я 06.04.06✎ 08:39 | 
        Я всегда  использую оператор GOTO. По правилам программирования в каждой программе должен быть оператор GOTO. Обычно я начинаю программу оператором GOTO. И всегда заканчиваю программу этим оператором. Оператор GOTO позволяет писать легкие, кросплатформенные и масштабируемые программы. В среде профессианальных програмистов считается хорошим тоном использовать на каждой странице кода не менее 3-х операторов GOTO. Гуру, которых даже среди профессианалов насчитывается единицы, используют до 15(!)  операторов GOTO на страницу кода. Это делает их программы быстрыми и легкими - как прокисший Данон, не успевает влететь, как уже пора на вылет.  : ) | |||
| 103
    
        skunk 06.04.06✎ 08:43 | 
        эт верно     | |||
| 104
    
        Simod 06.04.06✎ 08:45 | 
        (0) Ни разу не использовал. Согласен с (22).     | |||
| 105
    
        Регистр 06.04.06✎ 08:47 |  
  | |||
| 106
    
        skunk 06.04.06✎ 08:50 | 
        (105)что попробуешь?     | |||
| 107
    
        Obed 06.04.06✎ 08:50 | 
        (106) видать тег :)     | |||
| 108
    
        skunk 06.04.06✎ 08:55 | 
        аха     | |||
| 109
    
        Vint Kras 06.04.06✎ 09:00 | 
        (108) нафиг эту тему завёл ?     | |||
| 110
    
        skunk 06.04.06✎ 09:02 | 
        (109)скучно... зашел в ит отдел ... глянул на код... увидал его... стало интересно кто его еще использует     | |||
| 111
    
        GrayT 06.04.06✎ 09:08 | 
        (0)Стараюсь не использовать. Нет не так. Ни в одной моей программе его нет.     | |||
| 112
    
        skunk 06.04.06✎ 09:10 | 
        (111)из принципа?     | |||
| 113
    
        Колумбарий 06.04.06✎ 09:10 | 
        Мое отношение:
  "Не человек ради догмы, а догма ради человека". Если догма мешает - значит ее можно преступить. | |||
| 114
    
        skunk 06.04.06✎ 09:14 | 
        то есть если без гоуту у тебя не айда... имеешь гоуту     | |||
| 115
    
        Vint Kras 06.04.06✎ 09:18 | 
        может лучше Case of как нить замострячить попробуем ?     | |||
| 116
    
        skunk 06.04.06✎ 09:24 | 
        else ... then
  elsif ... then endif | |||
| 117
    
        Колумбарий 06.04.06✎ 09:26 | 
        2(114) Вы мне? Это всего лишь продолжение принципа  "не человек для субботы, а суббота для человека". Автора помните?     | |||
| 118
    
        igork1966 06.04.06✎ 09:26 | 
        (0)   А как вы относитесь к гомосексуалистам? А никак, я к ним не отношусь. ;-) | |||
| 119
    
        skunk 06.04.06✎ 09:28 | 
        (117)трудно вспомнить то ... чего не знал...
  (118)аналогично | |||
| 120
    
        Рупор абсурда 06.04.06✎ 09:29 | 
        (0) Я использовал его 1 раз ..., лишь потому, что там без него обойтись было вовсе невозможно ...     | |||
| 121
    
        skunk 06.04.06✎ 09:31 | 
        (120)а это становится интересным... покажи     | |||
| 122
    
        Vint Kras 06.04.06✎ 09:31 | 
        (116)
  а так : 
  | |||
| 123
    
        Ангел- Хоронитель 06.04.06✎ 09:31 | 
        (0)всегда когда казалось, что без него не обойтись, немного подумав, понимал, что обойтись можно :)
  (120)можно код посмотреть? | |||
| 124
    
        GrayT 06.04.06✎ 09:34 | 
        (112)Шаблонное мышление, как то вбили в голову что наличие меток = плохо структуированный модуль  А Рупор опять народ разводит :))) | |||
| 125
    
        Колумбарий 06.04.06✎ 09:36 | 
        2(124) Почему разводит? Например для прерывания или продолжения одного цикла есть операторы, а для прерывания или продолжения цикла в цикле - нету.     | |||
| 126
    
        skunk 06.04.06✎ 09:36 | 
        (122)а так... пропадает код ...который можно воткнуть сюда
  else ... then elsif ... then else code of magic endif | |||
| 127
    
        skunk 06.04.06✎ 09:37 | 
        (125)ты и циклы рвешь?     | |||
| 128
    
        Kraft 06.04.06✎ 09:37 | 
        (0) зависит от ситуации. Когда юзаешь чужой код, то не нравитца     | |||
| 129
    
        Колумбарий 06.04.06✎ 09:38 | 
        2(127) вы 117 точно внимательно прочитали?     | |||
| 130
    
        GrayT 06.04.06✎ 09:38 | 
        (125)Этот пример не подходит к определению "без него обойтись было вовсе невозможно"     | |||
| 131
    
        GrayT 06.04.06✎ 09:39 | 
        +130 Кстати выйти из вложенного цикла на верхний уровень (за первый цикл) можно и без метки.....     | |||
| 132
    
        Колумбарий 06.04.06✎ 09:39 | 
        2(130) Я готов послушать как ты внутри вложенного цикла скажешь, что нужно выполнить следующую итерацию внешнего цикла.     | |||
| 133
    
        skunk 06.04.06✎ 09:40 | 
        (129)я же вроде как сказал...     | |||
| 134
    
        Колумбарий 06.04.06✎ 09:41 | 
        2(133) что вы сказали? Что внимательно его прочитали? Или что не знали автора?     | |||
| 135
    
        skunk 06.04.06✎ 09:41 | 
        (132)а какие с этим проблемы...     | |||
| 136
    
        GrayT 06.04.06✎ 09:42 | 
        (134)Не ну это совсем просто - Продолжить :)))     | |||
| 137
    
        Колумбарий 06.04.06✎ 09:44 | 
        2(136) Вы перейдете к следующей итерации вложенного цикла. Во внешнем цикле останется текущая итерация.
  2(135) Ну - это вы мне задали вопрос. После того, как я дал ответ, который является ответом и на него тоже. | |||
| 138
    
        skunk 06.04.06✎ 09:48 | 
        intConditionOne = 1;
  while intCondition = 1 do intConditionTwo = 1 while intConditionTwo = 1 do if intConditionTwo = 1 then intConditionOne = 0; intConditionTwo = 0; endif; enddo; if intConditionOne = 0 then intConditionOne = 1; continue; endif; ... ... intConditionOne = 0; enddo; | |||
| 139
    
        GrayT 06.04.06✎ 09:48 | 
        Блин... Прервать.     | |||
| 140
    
        Колумбарий 06.04.06✎ 09:51 | 
        2(139) Ок. Теперь три вложенных цикла.
  Или два, но прервать нужно внешний. 2(138) Для вас - четыре вложенных цикла. | |||
| 141
    
        skunk 06.04.06✎ 09:55 | 
        (140)у вас не хвататет фантазии... вам код показать     | |||
| 142
    
        GrayT 06.04.06✎ 09:55 | 
        (140) Испугал :)))  Пока сч1 = 1 по 10 Цикл Попытка Пока сч1 = 1 по 10 Цикл Пока сч1 = 1 по 10 Цикл а = 1/0; //:)))) КонецЦикла КонецЦикла Исключение КонецПопытки КонецЦикла | |||
| 143
    
        GrayT 06.04.06✎ 09:55 | 
        Счетчики сами подпраите.     | |||
| 144
    
        igork1966 06.04.06✎ 09:57 | 
        (140) Типа такого:  УсловиеВыхода1 = Ложь; Пока УсловиеВыхода1 Цикл Пока УсловиеВыхода2 Цикл ..... УсловиеВыхода1 = ......... ..... УсловиеВыхода2 = УсловиеВыхода2 Или ВычислениеУсловияВыхода2(); КонецЦикла УсловиеВыхода1 = УсловиеВыхода1 Или ВычислениеУсловияВыхода1(); КонецЦикла | |||
| 145
    
        Колумбарий 06.04.06✎ 09:57 | 
        2(141) Нет, просто в этом коде - что разбираться с intConditionOne, intConditionTwo, intConditionTree, intConditionFour, что использовать Перейти - код не будет отличаться качеством ни в том ни в другом случае.
  Следовательно всегда существует граница, когда дешевле и удобнее использовать Перейти, чем неиспользовать. | |||
| 146
    
        skunk 06.04.06✎ 09:59 | 
        зачем тебе два условия... если из четвертого надо будет попать в первый...     | |||
| 147
    
        skunk 06.04.06✎ 09:59 | 
        очепятка в 146 вместо два читать четыре     | |||
| 148
    
        igork1966 06.04.06✎ 09:59 | 
        (145) Вместо УсловиеВыходаХ  можно использовать номер уровня на который нужно уйти.     | |||
| 149
    
        Колумбарий 06.04.06✎ 09:59 | 
        Рупор просил передать:
  http://avb1c.narod.ru/?=a13 Примерчики: с тэгом <FONT>, с таблицами стилей 2(146) Из любого нужно попасть в первый. | |||
| 150
    
        Колумбарий 06.04.06✎ 10:00 | 
        2(148) Э... У меня опять не хвататет фантазии. Можно код?     | |||
| 151
    
        GrayT 06.04.06✎ 10:00 | 
        (149(Именно это я имел ввиду о разводе Рупора :)     | |||
| 152
    
        GrayT 06.04.06✎ 10:01 | 
        (150) 142 прокомментировать не желаете?     | |||
| 153
    
        Колумбарий 06.04.06✎ 10:03 | 
        2(152) годится, вариант... Правда в каком-то смысле Попытка - это тоже Перейти, но все-таки оформленная как операторные скобки, поэтому с точки зрения структурного программирования более легитимная конструкция, чем Перейти     | |||
| 154
    
        Vozhd 06.04.06✎ 10:07 | 
        (153) Предлагаю рассмотреть вопрос нескольких точек выхода из вложенных циклов. Будете использовать вложенные попытки? И все вернется к (138), только еще и завернутое в обработки исключений? - Жуть...     | |||
| 155
    
        skunk 06.04.06✎ 10:08 | 
        (152)мое мнение тоже не правильно... как и прервать...     | |||
| 156
    
        GrayT 06.04.06✎ 10:08 | 
        (154)Реальную бы задачку, где может такое потребоваться....     | |||
| 157
    
        GrayT 06.04.06✎ 10:10 | 
        (155)Не спорю. Кстати, обычно я твоим способом обычно и пользуюсь     | |||
| 158
    
        skunk 06.04.06✎ 10:11 | 
        (154)да ну брось... хотя Gray прав... покажи реальную задачу     | |||
| 159
    
        skunk 06.04.06✎ 10:12 | 
        (157)я этим способом редко пользуюсь... это так... что бы сильно мозги не напрягать     | |||
| 160
    
        Вильям 06.04.06✎ 10:14 | ||||
| 161
    
        Erlinn 06.04.06✎ 10:15 | 
        Полтораста постов с хвостиком - и никто не читал чудо-книгу Майерса. Эх, молодежь... Кхе-кхе... чему вас только в гимназиях учат...     | |||
| 162
    
        skunk 06.04.06✎ 10:16 | 
        в школе младших командиров учат командовать личным составом подразделения...     | |||
| 163
    
        skunk 06.04.06✎ 10:16 | 
        в гимназиях не обучались     | |||
| 164
    
        GrayT 06.04.06✎ 10:18 | 
        (161)Спасибо за комплимент....     | |||
| 165
    
        Erlinn 06.04.06✎ 10:19 | 
        (160) Mr.William, респект! Один читатель среди писателей.     | |||
| 166
    
        omega_juice 06.04.06✎ 10:21 | 
        видел я такой код, который и без оператора goto был совершенно нечитаем.
  а приличиям следовать надо, но без фанатизма. имхо. | |||
| 167
    
        NS 06.04.06✎ 10:22 | 
        Очень редко, но вроде несколько лет назад разок использовал...
  (156) В поиск - куча реальных задач. | |||
| 168
    
        Ёпрст2 06.04.06✎ 10:22 | 
        (0)За goto в коде еще в школе 2 бала без объяснения ставили, низкая квалификация программирования ...     | |||
| 169
    
        skunk 06.04.06✎ 10:23 | 
        (169)я видал как человека на работу не взяли... открыли его экзапл... а там метка... адью... линейщики нам не нужны     | |||
| 170
    
        NS 06.04.06✎ 10:25 | 
        (168) Всё зависит от ситуации. Я бы поставил 2 балла преподу, которые не разбираясь ставит банан за Goto...     | |||
| 171
    
        Гений 1С гуру 06.04.06✎ 10:25 | 
        Да че вы спорите, идеологи программирования давно уже доказали, что можно работать без GOTO. Т.е. этот оператор ВСЕГДА можно заменить и это повышает читабельность програмы.
  Хотя я юзал пару раз. | |||
| 172
    
        Vint Kras 06.04.06✎ 10:26 | 
        (171) про читабельность я привёл пример     | |||
| 173
    
        Каанкереде 06.04.06✎ 10:27 | 
        Никогда не понимал, зачем нужен этот оператор и никогда его не использовал...   А читать код с готу и метками, это еще тот экстрим. А если еще и карандаша нет, то вообще пипец... | |||
| 174
    
        SynchroFaza Tron 06.04.06✎ 10:28 | 
        Без этого оператора написание Вэб приложений 1С 7.7 стало бы просто невозможным. (173) но про полную нечитабельность кода я согласен.     | |||
| 175
    
        NS 06.04.06✎ 10:29 | 
        (171) Всегда повышает читабельность программы?
  :метка2; Цикл Если условие тогда goto метка1 Иначеесли тогда goto метка2 иначе ........ КонецЕсли; конеццикла; Цикл Если условие тогда goto метка1 Иначеесли тогда goto метка2 иначе ........ КонецЕсли; конеццикла; Цикл Если условие тогда goto метка1 Иначеесли тогда goto метка2 иначе ........ КонецЕсли; конеццикла; :метка1; // Даже без вложенных циклов - ну ка, повысь читабельность.... | |||
| 176
    
        Ёпрст2 06.04.06✎ 10:34 | 
        (175) В таком коде, раньше (когда еще двк были), если создавать динамические переменные, у тебя память бы давно кончилась, когды ты прыгаешь по меточкам ... поубивал бы ..     | |||
| 177
    
        GrayT 06.04.06✎ 10:36 | 
        (179)А при чем тут динамические переменные????     | |||
| 178
    
        Колумбарий 06.04.06✎ 10:36 | 
        2(161) Почему не читали? Читали. Просто Товарищ Христос для нас больший авторитет     | |||
| 179
    
        NS 06.04.06✎ 10:37 | 
        (176) Какие динамические переменные? Ты о чем?
  Такой код во всем мире считается идеальным, и так пишут доктора наук... Доктора - за заслуги в программированиии. И Такой код включен в тесты компиляторов... Как ОЧЕНЬ ХОРОШЫЙ КОД!!! Насколько я понял - ты даже не понимаешь, что такое динамические переменные... | |||
| 180
    
        SynchroFaza Tron 06.04.06✎ 10:38 | 
        (175) Ну что типа:
  Функция Сравнить(ляляля) Если Возврат условие1; иначе Возврат Условие2; Конецесли; Конецфункции Функция обработать() Пока Истина цикл Цикл рез = Сравнить(Параметр); Если рез = условие1 тогда возврат "То что нужно вернуть или просто выход из функции"; иначеесли рез = условие2 тогда продолжить; Конецесли конеццикла; Цикл рез = Сравнить(Параметр); Если рез = условие1 тогда возврат "То что нужно вернуть или просто выход из функции"; иначеесли рез = условие2 тогда продолжить; Конецесли конеццикла; Цикл рез = Сравнить(Параметр); Если рез = условие1 тогда возврат "То что нужно вернуть или просто выход из функции"; иначеесли рез = условие2 тогда продолжить; Конецесли конеццикла; Конеццикла // главный цикл. КонецФункции | |||
| 181
    
        Ёпрст2 06.04.06✎ 10:38 | 
        (177) При том , что можно сравнить с вложенной ркурсией, из которой нет выхода...
  Если создавать динамические переменные, например int i; то под них выделяемая память не очищалась и после 10 минут работы такой программы комп затихал :)) а народ долго не мог понять , в чем дело ... | |||
| 182
    
        SynchroFaza Tron 06.04.06✎ 10:39 | 
        (180) + условия "иначе" сюда можно добавить без проблем.     | |||
| 183
    
        SynchroFaza Tron 06.04.06✎ 10:40 | 
        (180)+ в начале описался: читать "что-то типа:"     | |||
| 184
    
        GrayT 06.04.06✎ 10:40 | 
        (181)int i - Динамическая переменная??? Я в С не силен....     | |||
| 185
    
        Каанкереде 06.04.06✎ 10:40 | 
        (175) ты дал отличный пример неситабельности..... ты что сделать то хотел? скажи, тебе напишут нормальный код..     | |||
| 186
    
        Ёпрст2 06.04.06✎ 10:41 | 
        (179) Для процедурных языков, например Паскаля, статические - это объявленны е глоб переменные в начале модуля, динамические - внутри процедур, в си динам. переменные можно объявлять было где угодно ... В жабе встроенный механизм очистки мусора .. Чего еще рассказать ?     | |||
| 187
    
        NS 06.04.06✎ 10:42 | 
        (181) Я так понимаю, что это был твой код...
  (180) И ты поймешь по продолжить, в каком месте программы искать мето на которое программа перейдет???? Ты сделал вложенный цикл на ровном месте... У тебя может регистров в процессоре не хватить - и Переменная образуется в стеке/памяти - сможешь с трех раз угадать, насколько это замедлит быстродействие программы, у которой все вычисления (все данные для вычислений) хранятся в внутренних регистрах проца???? | |||
| 188
    
        NS 06.04.06✎ 10:42 | 
        (186) С тобой всё ясно - в такой ситуации лучше промолчать...     | |||
| 189
    
        GrayT 06.04.06✎ 10:43 | 
        (186)Да не не надо.......  Динамическая переменная, это когда память динамически выделяется New() | |||
| 190
    
        Каанкереде 06.04.06✎ 10:44 | 
        +(185) о понял... прервать, продолжить - там лучший вариант.     | |||
| 191
    
        SynchroFaza Tron 06.04.06✎ 10:45 | 
        (187) Да, пойму. Если код программы хорошо оформлен - то в этом разобраться непроблема. А что ты за глупость про регистры процессора написал, при чем здесь обычный цикл?     | |||
| 192
    
        Mort 06.04.06✎ 10:46 | 
        (186) Жесть.     | |||
| 193
    
        skunk 06.04.06✎ 10:47 | 
        мдя начинается новая война ... goto против .... чего пока не ясно     | |||
| 194
    
        Vint Kras 06.04.06✎ 10:47 | 
        ширинки застегните !     | |||
| 195
    
        GrayT 06.04.06✎ 10:48 | 
        (191)А он сам как компилятор - оптимизирует циклы за счет использования регистров. И это правильно...     | |||
| 196
    
        Колумбарий 06.04.06✎ 10:49 | 
        Это как война тупоконечников с остроконечниками.  Никто не может мне запретить разбивать яйцов с той стороны, с какой мне удобно. Кто не согласен - пусть подает на меня в суд.     | |||
| 197
    
        NS 06.04.06✎ 10:49 | 
        (185) И что в этом коде нестабильного?     | |||
| 198
    
        skunk 06.04.06✎ 10:50 | 
        ни кто и ни чего не запрещает... а вот использовать / не использовать... и насколько оно кошерно     | |||
| 199
    
        Vint Kras 06.04.06✎ 10:50 | 
        он ввиду нечитабельность     | |||
| 200
    
        Каанкереде 06.04.06✎ 10:50 | 
        (197) "неситабельности" надо читать как "нечитабельности"     | |||
| 201
    
        SynchroFaza Tron 06.04.06✎ 10:50 | 
        (195) наверное я чего не понимаю. При чем здесь регистры процессора? Они что по разному используются при выполнении цикла и оператора GOTO? Неужели нашлись люди которые Дисассемблер 1С делали, что бы посмотреть как там ресурсы машины используются?     | |||
| 202
    
        SynchroFaza Tron 06.04.06✎ 10:51 | 
        (194) НЕСИ ЛИНЕЙКУ!!!     | |||
| 203
    
        Колумбарий 06.04.06✎ 10:51 | 
        2(201) Он имел в виду, что при использовании функции юзается стэк, и регистр для стэка может закончится, если уровней очень много     | |||
| 204
    
        SynchroFaza Tron 06.04.06✎ 10:52 | 
        (201) Я понимаю - но процедура не рекурсивная! О каком стеке идет речь?     | |||
| 205
    
        GrayT 06.04.06✎ 10:52 | 
        (201)Ни какой дизассемблер не нужен, если помнить, что компилятор имеет функции оптимизации кода, как то не вычислять логическое выражение до конца, использовать регистры в циклах, а не переменные и т.д. (старею - склероз)     | |||
| 206
    
        SynchroFaza Tron 06.04.06✎ 10:53 | 
        (204) -> (203)     | |||
| 207
    
        Колумбарий 06.04.06✎ 10:53 | 
        2(204) Но ведь ты рассмотрел частный пример. А если вложенность циклов - 100?     | |||
| 208
    
        GrayT 06.04.06✎ 10:53 | 
        (203)Не совсем     | |||
| 209
    
        Парижская фанера 06.04.06✎ 10:54 | 
        (0) Не пользуюсь ибо не зачем при правильном проектировании и написании кода...     | |||
| 210
    
        SynchroFaza Tron 06.04.06✎ 10:54 | 
        (204) Приведи пример практической необходимости такой конструкции?     | |||
| 211
    
        Guk 06.04.06✎ 10:55 | 
        (197) Странно. Совсем недавно, ты утверждал, что использование меток в 1С - моветон...     | |||
| 212
    
        NS 06.04.06✎ 10:55 | 
        (201) При чем тут 1С? Речь идет о программировании.
  (200) Поздравляю, ты пишешь лучше Американской Элиты программирования и Докторов наук, например Хиатта. И лучше их разбираешься в читабельности кода. | |||
| 213
    
        SynchroFaza Tron 06.04.06✎ 10:55 | 
        (210)->(207) Просто еще не проснулся:)     | |||
| 214
    
        Фокусник 06.04.06✎ 10:55 | 
        go to, не go to… Ной взгляд, конструкция Пока 1=1 Цикл ни чем не лучше метки. Разве что только если форматирование цикла лучше помогает увидеть структуру. А вот например, если есть 3 вложенных цикла и из внутреннего нужно сразу попасть в первый, то, ИМХО метка – лучшее и наиболее прозрачное решение...     | |||
| 215
    
        Фокусник 06.04.06✎ 10:57 | 
        +214 "Ной" = "На мой" (-:     | |||
| 216
    
        Mort 06.04.06✎ 10:57 | 
        Какие нафиг быстродействия в регистрах в 1С, господа вы о чем? Множество операций в 1с завязаны на БД - остальные над действиями с немалыми объектами, тут операции GOTO и организация цикла дают мелкие проценты всего времени.
  А вообще GOTO заставляет рассматривать прогу как набор строк, и вносит разлад в четкое понимание кооперации объектов. GOTO - оцтой. | |||
| 217
    
        Каанкереде 06.04.06✎ 10:57 | 
        (212) а они на каком языке писали? может у них прервать продолжить не было?     | |||
| 218
    
        SynchroFaza Tron 06.04.06✎ 10:58 | 
        (214) Переход в начало внешнего цикла можно легко организовать при помощи Прервать-продолжить.     | |||
| 219
    
        GrayT 06.04.06✎ 10:59 | 
        (211)Он просто нигилист :)  (216)С-шному компилятору это неизвестно :) | |||
| 220
    
        Колумбарий 06.04.06✎ 10:59 | 
        2(218) Опять же - не в начало первого, в начало любого уровня.     | |||
| 221
    
        Фокусник 06.04.06✎ 10:59 | 
        218 вот именно, что "организовать", т.е. это будет не на 100% прозрачно...     | |||
| 222
    
        Mort 06.04.06✎ 10:59 | 
        (219) Кто нибудь сейчас пишет на си (без плюсов)?     | |||
| 223
    
        Каанкереде 06.04.06✎ 11:00 | 
        (222) пишут     | |||
| 224
    
        GrayT 06.04.06✎ 11:00 | 
        (222)Не передергивай.     | |||
| 225
    
        Парижская фанера 06.04.06✎ 11:00 | 
        (216)>>Какие нафиг быстродействия в регистрах в 1С
  Вот уж действительно... Я уже приводил пример простейший - замена определенного символа в текст. файле в реализации на 1С и C#... Пока 1С это сделает можно пойти и покурить... П.э. все фразы про регистры в проекции на 1С - одно писькомеринье. | |||
| 226
    
        Делать вам больше не 06.04.06✎ 11:01 | 
        А я вот мучаюсь с удаленной DCOM-отладкой....
  И никаких GoTo... | |||
| 227
    
        NS 06.04.06✎ 11:02 | 
        (216) Мы говорим о культуре программирования, а не о быстродействии. Быстродействие - частный случай для некоторых задач.
  Программа Хиатта - не стремится к большему быстродействию, а используется как образец теста для оценки быстродействия кода выдаваемого разными компиляторами, и как учебный пример КАК НАДО ПИСАТЬ ПРОГРАММЫ, для студентов, да и для всех остальных... И код написан ОДНИМ ИЗ ЛУЧШИХ АМЕРИКАНСКИХ ПРОГРАММИСТОВ, ПРОФЕССОРОМ ПРЕСТИЖНОГО УНИВЕРСИТЕТА, и писался и выверялся больше десяти лет... http://www.cis.uab.edu/info/faculty/hyatt/hyatt.html Это сам Хиатт... http://www.ixbt.com/cpu.shtml SPEC CPU - это тесты, в которых используется его код... | |||
| 228
    
        skunk 06.04.06✎ 11:04 | 
        аж страшно становится...     | |||
| 229
    
        GrayT 06.04.06✎ 11:05 | 
        (228)И кто тебя за язык тянул......     | |||
| 230
    
        NS 06.04.06✎ 11:06 | 
        (+227) После совещания могу кинуть образец кода.
  вообще он есть тут. ftp://ftp.cis.uab.edu/pub/hyatt/src/ Смотреть можно, например, юнит Search.c | |||
| 231
    
        Mort 06.04.06✎ 11:07 | 
        Выложи код, не могу скачать.
  КАК НАДО ПИСАТЬ ПРОГРАММЫ я больше доверяю Питеру Страуструбу, Гради Бучу и Джефу Элджеру. Они про goto говорят вскольз и в шутку. | |||
| 232
    
        Фокусник 06.04.06✎ 11:08 | 
        (218) +221 а в случае необходимости "эксренного выхода по особому условию", имхо _проще_быстрее_и_надежнее выставить метку и выскочить в нужное место... особенно если это только отладка (-:     | |||
| 233
    
        Парижская фанера 06.04.06✎ 11:09 | 
        (214) Хреновый код для поддержки, потенциально опасный.     | |||
| 234
    
        MMF 06.04.06✎ 11:09 | 
        (233+) убивать нах за такой код.     | |||
| 235
    
        NS 06.04.06✎ 11:14 | 
        (211) Я всегда давал оговорку, что кроме особых случаев.
  Поищи в архивах. (217) Было, было... Не сомневайся. (231) Сказал же - после совещания. Либо скачай, и открой ВордПэдом.. | |||
| 236
    
        Фокусник 06.04.06✎ 11:14 | 
        (223) в чем потенциальность опастности?
  (234) утверждение без доказательства - лишь пустой звук (похожий на пук), извини... | |||
| 237
    
        Mort 06.04.06✎ 11:18 | 
        (235) Я подожду. Чем открыть есть)     | |||
| 238
    
        skunk 06.04.06✎ 11:25 | 
        вот из-за чего спор... впринципе и начался...
  код чела... 
 и мой 
  | |||
| 239
    
        Mort 06.04.06✎ 11:29 | 
        Я так понял это формирование 4-х цифр числа где ВыбЧисло1 - разрядность?     | |||
| 240
    
        Парижская фанера 06.04.06✎ 11:29 | 
        (238) Ужос.     | |||
| 241
    
        Mort 06.04.06✎ 11:30 | 
        (240) Согласен     | |||
| 242
    
        skunk 06.04.06✎ 11:31 | 
        (239)это попытка доказать мне что без гоуту не айда...
  (240)что ты хочешь краисвого от кода написанного за пять минут на коленках ноутбука | |||
| 243
    
        Mort 06.04.06✎ 11:32 | 
        (242) В (239) я прав? 
  В этом случае надо не Goto применять а Йад. | |||
| 244
    
        Mort 06.04.06✎ 11:42 | 
        //Эта же задача:
  void InsertBit(int* Arr,int Pos,int Razryad) { if Arr[Pos]+1 = Razryad then insertBit(Arr,Pos+1,Razryad); Arr[Pos]=0; else Arr[Pos]++; } main() { Arr[4]={0,0,0,0}; int Razr = 8; //- восьмиричное NeedNumber = 512; // - нужное число lj rj for(int k=0;k<NeedNumber;k++) { InsertBit(Arr,0,Razr); cout<<Arr[3]<<Arr[2]<<Arr[1]<<Arr[0]; } } | |||
| 245
    
        MMF 06.04.06✎ 11:50 | 
        (236) 1) Теорема Бема и Якопини : "Для всякой программы, выраженной произвольной блок-схемой, существует эквивалентная ей программа (т.е. выполняющая те же преобразования данные -> результат с помощью тех же вычислений), так что: операции над переменными те же, что и в исходной программе; сохраняются все переменные исходной программы с возможным добавлением некоторого числа логических переменных (имеющих два возможных значения); единственными используемыми структурами являются цепочка и цикл".
  2) Применение структур: цепочка, цикл, альтернатива и вызов подрограммы отвечают задачам структурного программирования и дают возможность решить три основные задачи: улучшить читаемость, облегчают общение между программистами и дают возможность доказать правильность программы. 3) Война с сторонниками goto началась с Дейкстры в 1968г. И опубликовано с тех пор множество работ на эту тему (Хоар, Кнут, Ледгард и др.) 4) Оценка сложности программы выполняется по множеству метрик (Холстеда, Джилба и т.д.) и является предметом теории сложности программ. Однозначным выводом ее является крайне ограниченное применение гоуту (циклы на n+1/2 итераций). | |||
| 246
    
        NS 06.04.06✎ 11:53 | 
        #include <stdio.h>
  #include <stdlib.h> #include <string.h> #include "chess.h" #include "data.h" /* last modified 01/22/04 */ /* ******************************************************************************* * * * Quiesce() is the recursive routine used to implement the alpha/beta * * negamax search (similar to minimax but simpler to code.) Quiesce() is * * called whenever there is no "depth" remaining so that only capture moves * * are searched deeper. * * * ******************************************************************************* */ int Quiesce(TREE * RESTRICT tree, int alpha, int beta, int wtm, int ply) { register int o_alpha, value, delta; register int *next_move; register int *goodmv, *movep, moves = 0, *sortv, temp; /* ************************************************************ * * * initialize. * * * ************************************************************ */ if (ply >= MAXPLY - 1) return (beta); tree->nodes_searched++; tree->next_time_check--; tree->last[ply] = tree->last[ply - 1]; o_alpha = alpha; /* ************************************************************ * * * now call Evaluate() to produce the "stand-pat" score * * that will be returned if no capture is acceptable. * * if this score is > alpha, then we also have to save * * the "path" to this node as it is the PV that leads * * to this score. * * * ************************************************************ */ value = Evaluate(tree, ply, wtm, alpha, beta); if (value > alpha) { if (value >= beta) return (value); alpha = value; tree->pv[ply].pathl = ply - 1; tree->pv[ply].pathh = 0; tree->pv[ply].pathd = iteration_depth; } /* ************************************************************ * * * generate captures and sort them based on (a) the value * * of the captured piece - the value of the capturing * * piece if this is > 0; or, (b) the value returned by * * Swap(). if the value of the captured piece won't * * bring the material score back up to near alpha, that * * capture is discarded as "futile." * * * ************************************************************ */ tree->last[ply] = GenerateCaptures(tree, ply, wtm, tree->last[ply - 1]); delta = alpha - largest_positional_score - (wtm ? Material : -Material); goodmv = tree->last[ply - 1]; sortv = tree->sort_value; for (movep = tree->last[ply - 1]; movep < tree->last[ply]; movep++) { if (((wtm) ? TotalBlackPieces : TotalWhitePieces) > 12) { if (p_values[Captured(*movep) + 7] + p_values[Promote(*movep) + 7] >= delta) { if (Captured(*movep) == king) return (beta); if (p_values[Piece(*movep) + 7] < p_values[Captured(*movep) + 7] || (p_values[Piece(*movep) + 7] <= p_values[Captured(*movep) + 7] && delta <= 0)) { *goodmv++ = *movep; *sortv++ = p_values[Captured(*movep) + 7]; moves++; } else { temp = Swap(tree, From(*movep), To(*movep), wtm); if (temp >= 0) { *sortv++ = temp; *goodmv++ = *movep; moves++; } } } } else { int val = ((wtm) ? TotalBlackPieces : TotalWhitePieces) * PAWN_VALUE; if (p_values[Captured(*movep) + 7] + p_values[Promote(*movep) + 7] >= delta || val - p_values[Captured(*movep) + 7] <= BISHOP_VALUE) { if (Captured(*movep) == king) return (beta); if (p_values[Piece(*movep) + 7] < p_values[Captured(*movep) + 7] || (p_values[Piece(*movep) + 7] <= p_values[Captured(*movep) + 7] && delta <= 0)) { *goodmv++ = *movep; *sortv++ = p_values[Captured(*movep) + 7]; moves++; } else { temp = Swap(tree, From(*movep), To(*movep), wtm); if (temp >= 0) { *sortv++ = temp; *goodmv++ = *movep; moves++; } } } } } /* ************************************************************ * * * don't disdain the lowly bubble sort here. the list of * * captures is always short, and experiments with other * * algorithms are always slightly slower. * * * ************************************************************ */ if (moves > 1) { register int done; register int *end = tree->last[ply - 1] + moves - 1; do { done = 1; sortv = tree->sort_value; for (movep = tree->last[ply - 1]; movep < end; movep++, sortv++) if (*sortv < *(sortv + 1)) { temp = *sortv; *sortv = *(sortv + 1); *(sortv + 1) = temp; temp = *movep; *movep = *(movep + 1); *(movep + 1) = temp; done = 0; } } while (!done); } next_move = tree->last[ply - 1]; /* ************************************************************ * * * now iterate through the move list and search the * * resulting positions. * * * ************************************************************ */ while (moves--) { tree->current_move[ply] = *(next_move++); #if defined(TRACE) if (ply <= trace_level) SearchTrace(tree, ply, 0, wtm, alpha, beta, "quiesce", CAPTURE_MOVES); #endif MakeMove(tree, ply, tree->current_move[ply], wtm); value = -Quiesce(tree, -beta, -alpha, Flip(wtm), ply + 1); UnmakeMove(tree, ply, tree->current_move[ply], wtm); if (value > alpha) { if (value >= beta) return (value); alpha = value; } if (tree->stop) return (0); } /* ************************************************************ * * * all moves have been searched. return the search * * result that was found. if the result is not the * * original alpha score, then we need to return the PV * * that is associated with this score. * * * ************************************************************ */ if (alpha != o_alpha) { memcpy(&tree->pv[ply - 1].path[ply], &tree->pv[ply].path[ply], (tree->pv[ply].pathl - ply + 1) * sizeof(int)); memcpy(&tree->pv[ply - 1].pathh, &tree->pv[ply].pathh, 3); tree->pv[ply - 1].path[ply - 1] = tree->current_move[ply - 1]; } return (alpha); } Это пример кода Хиатта - Quence.c | |||
| 247
    
        КонецЦикла 06.04.06✎ 11:55 | 
        оператор как оператор... ужо и не помню когда его использовал     | |||
| 248
    
        NS 06.04.06✎ 11:57 | 
        #include <stdio.h>
  #include <stdlib.h> #include "chess.h" #include "data.h" /* last modified 03/11/98 */ /* ******************************************************************************* * * * UnmakeMove() is responsible for updating the position database whenever a * * move is retracted. it is the exact inverse of MakeMove(). * * * ******************************************************************************* */ void UnmakeMove(TREE * RESTRICT tree, int ply, int move, int wtm) { register int piece, from, to, captured, promote; BITBOARD bit_move, bit_move_rl45, bit_move_rr45, bit_move_rl90; /* ************************************************************ * * * first, take care of the hash key if there's a possible * * enpassant pawn capture. * * * ************************************************************ */ HashKey = tree->save_hash_key[ply]; PawnHashKey = tree->save_pawn_hash_key[ply]; /* ************************************************************ * * * now do the piece-specific things by calling the * * appropriate routine. * * * ************************************************************ */ piece = Piece(move); from = From(move); to = To(move); captured = Captured(move); promote = Promote(move); UnmakePieceMove: bit_move = SetMask(from) | SetMask(to); bit_move_rl45 = SetMaskRL45(from) | SetMaskRL45(to); bit_move_rr45 = SetMaskRR45(from) | SetMaskRR45(to); bit_move_rl90 = SetMaskRL90(from) | SetMaskRL90(to); ClearSet(bit_move_rl45, OccupiedRL45); ClearSet(bit_move_rr45, OccupiedRR45); ClearSet(bit_move_rl90, OccupiedRL90); PcOnSq(to) = 0; switch (piece) { /* ******************************************************************************* * * * unmake pawn moves. * * * ******************************************************************************* */ case pawn: if (wtm) { ClearSet(bit_move, WhitePawns); ClearSet(bit_move, WhitePieces); PcOnSq(from) = pawn; if (captured == 1) { if (EnPassant(ply) == to) { TotalPieces++; SetRL90(to - 8, OccupiedRL90); SetRL45(to - 8, OccupiedRL45); SetRR45(to - 8, OccupiedRR45); Set(to - 8, BlackPawns); Set(to - 8, BlackPieces); PcOnSq(to - 8) = -pawn; Material -= PAWN_VALUE; TotalBlackPawns++; captured = 0; } } /* ********************************************************************** * * * if this is a pawn promotion, remove the pawn from the counts * * then update the correct piece board to reflect the piece just * * created. * * * ********************************************************************** */ if (promote) { TotalWhitePawns++; Material += PAWN_VALUE; Clear(to, WhitePawns); Clear(to, WhitePieces); switch (promote) { case knight: Clear(to, WhiteKnights); TotalWhitePieces -= knight_v; WhiteMinors--; Material -= KNIGHT_VALUE; break; case bishop: Clear(to, WhiteBishops); Clear(to, BishopsQueens); TotalWhitePieces -= bishop_v; WhiteMinors--; Material -= BISHOP_VALUE; break; case rook: Clear(to, WhiteRooks); Clear(to, RooksQueens); TotalWhitePieces -= rook_v; WhiteMajors--; Material -= ROOK_VALUE; break; case queen: Clear(to, WhiteQueens); Clear(to, BishopsQueens); Clear(to, RooksQueens); TotalWhitePieces -= queen_v; WhiteMajors -= 2; Material -= QUEEN_VALUE; break; } } } else { ClearSet(bit_move, BlackPawns); ClearSet(bit_move, BlackPieces); PcOnSq(from) = -pawn; if (captured == 1) { if (EnPassant(ply) == to) { TotalPieces++; SetRL90(to + 8, OccupiedRL90); SetRL45(to + 8, OccupiedRL45); SetRR45(to + 8, OccupiedRR45); Set(to + 8, WhitePawns); Set(to + 8, WhitePieces); PcOnSq(to + 8) = pawn; Material += PAWN_VALUE; TotalWhitePawns++; captured = 0; } } /* ********************************************************************** * * * if this is a pawn promotion, remove the pawn from the counts * * then update the correct piece board to reflect the piece just * * created. * * * ********************************************************************** */ if (promote) { TotalBlackPawns++; Material -= PAWN_VALUE; Clear(to, BlackPawns); Clear(to, BlackPieces); switch (promote) { case knight: Clear(to, BlackKnights); TotalBlackPieces -= knight_v; BlackMinors--; Material += KNIGHT_VALUE; break; case bishop: Clear(to, BlackBishops); Clear(to, BishopsQueens); TotalBlackPieces -= bishop_v; BlackMinors--; Material += BISHOP_VALUE; break; case rook: Clear(to, BlackRooks); Clear(to, RooksQueens); TotalBlackPieces -= rook_v; BlackMajors--; Material += ROOK_VALUE; break; case queen: Clear(to, BlackQueens); Clear(to, BishopsQueens); Clear(to, RooksQueens); TotalBlackPieces -= queen_v; BlackMajors -= 2; Material += QUEEN_VALUE; break; } } } break; /* ******************************************************************************* * * * unmake knight moves. * * * ******************************************************************************* */ case knight: if (wtm) { ClearSet(bit_move, WhiteKnights); ClearSet(bit_move, WhitePieces); PcOnSq(from) = knight; } else { ClearSet(bit_move, BlackKnights); ClearSet(bit_move, BlackPieces); PcOnSq(from) = -knight; } break; /* ******************************************************************************* * * * unmake bishop moves. * * * ******************************************************************************* */ case bishop: ClearSet(bit_move, BishopsQueens); if (wtm) { ClearSet(bit_move, WhiteBishops); ClearSet(bit_move, WhitePieces); PcOnSq(from) = bishop; } else { ClearSet(bit_move, BlackBishops); ClearSet(bit_move, BlackPieces); PcOnSq(from) = -bishop; } break; /* ******************************************************************************* * * * unmake rook moves. * * * ******************************************************************************* */ case rook: ClearSet(bit_move, RooksQueens); if (wtm) { ClearSet(bit_move, WhiteRooks); ClearSet(bit_move, WhitePieces); PcOnSq(from) = rook; } else { ClearSet(bit_move, BlackRooks); ClearSet(bit_move, BlackPieces); PcOnSq(from) = -rook; } break; /* ******************************************************************************* * * * unmake queen moves. * * * ******************************************************************************* */ case queen: ClearSet(bit_move, BishopsQueens); ClearSet(bit_move, RooksQueens); if (wtm) { ClearSet(bit_move, WhiteQueens); ClearSet(bit_move, WhitePieces); PcOnSq(from) = queen; } else { ClearSet(bit_move, BlackQueens); ClearSet(bit_move, BlackPieces); PcOnSq(from) = -queen; } break; /* ******************************************************************************* * * * unmake king moves. * * * ******************************************************************************* */ case king: if (wtm) { ClearSet(bit_move, WhitePieces); PcOnSq(from) = king; WhiteKingSQ = from; if (abs(to - from) == 2) { if (to == G1) { from = H1; to = F1; piece = rook; goto UnmakePieceMove; } else { from = A1; to = D1; piece = rook; goto UnmakePieceMove; } } } else { ClearSet(bit_move, BlackPieces); PcOnSq(from) = -king; BlackKingSQ = from; if (abs(to - from) == 2) { if (to == G8) { from = H8; to = F8; piece = rook; goto UnmakePieceMove; } else { from = A8; to = D8; piece = rook; goto UnmakePieceMove; } } } break; } /* ******************************************************************************* * * * now it is time to restore a piece that was captured. * * * ******************************************************************************* */ if (captured) { TotalPieces++; SetRL90(to, OccupiedRL90); SetRL45(to, OccupiedRL45); SetRR45(to, OccupiedRR45); switch (captured) { /* ************************************************************ * * * restore a captured pawn. * * * ************************************************************ */ case pawn: if (wtm) { Set(to, BlackPawns); Set(to, BlackPieces); PcOnSq(to) = -pawn; Material -= PAWN_VALUE; TotalBlackPawns++; } else { Set(to, WhitePawns); Set(to, WhitePieces); PcOnSq(to) = pawn; Material += PAWN_VALUE; TotalWhitePawns++; } break; /* ************************************************************ * * * restore a captured knight. * * * ************************************************************ */ case knight: if (wtm) { Set(to, BlackKnights); Set(to, BlackPieces); PcOnSq(to) = -knight; TotalBlackPieces += knight_v; BlackMinors++; Material -= KNIGHT_VALUE; } else { Set(to, WhiteKnights); Set(to, WhitePieces); PcOnSq(to) = knight; TotalWhitePieces += knight_v; WhiteMinors++; Material += KNIGHT_VALUE; } break; /* ************************************************************ * * * restore a captured bishop. * * * ************************************************************ */ case bishop: Set(to, BishopsQueens); if (wtm) { Set(to, BlackBishops); Set(to, BlackPieces); PcOnSq(to) = -bishop; TotalBlackPieces += bishop_v; BlackMinors++; Material -= BISHOP_VALUE; } else { Set(to, WhiteBishops); Set(to, WhitePieces); PcOnSq(to) = bishop; TotalWhitePieces += bishop_v; WhiteMinors++; Material += BISHOP_VALUE; } break; /* ************************************************************ * * * restore a captured rook. * * * ************************************************************ */ case rook: Set(to, RooksQueens); if (wtm) { Set(to, BlackRooks); Set(to, BlackPieces); PcOnSq(to) = -rook; TotalBlackPieces += rook_v; BlackMajors++; Material -= ROOK_VALUE; } else { Set(to, WhiteRooks); Set(to, WhitePieces); PcOnSq(to) = rook; TotalWhitePieces += rook_v; WhiteMajors++; Material += ROOK_VALUE; } break; /* ************************************************************ * * * restore a captured queen. * * * ************************************************************ */ case queen: Set(to, BishopsQueens); Set(to, RooksQueens); if (wtm) { Set(to, BlackQueens); Set(to, BlackPieces); PcOnSq(to) = -queen; TotalBlackPieces += queen_v; BlackMajors += 2; Material -= QUEEN_VALUE; } else { Set(to, WhiteQueens); Set(to, WhitePieces); PcOnSq(to) = queen; TotalWhitePieces += queen_v; WhiteMajors += 2; Material += QUEEN_VALUE; } break; /* ************************************************************ * * * restore a captured king. [this is an error condition] * * * ************************************************************ */ case king: Print(128, "captured a king\n"); Print(128, "piece=%d,from=%d,to=%d,captured=%d\n", piece, from, to, captured); Print(128, "ply=%d\n", ply); if (log_file) DisplayChessBoard(log_file, tree->pos); } } #if defined(DEBUG) ValidatePosition(tree, ply, move, "UnmakeMove(1)"); #endif return; } А это unmake.c Пример c goto... | |||
| 249
    
        NS 06.04.06✎ 11:59 | 
        Чтоб было покороче -
  /* ******************************************************************************* * * * unmake king moves. * * * ******************************************************************************* */ case king: if (wtm) { ClearSet(bit_move, WhitePieces); PcOnSq(from) = king; WhiteKingSQ = from; if (abs(to - from) == 2) { if (to == G1) { from = H1; to = F1; piece = rook; goto UnmakePieceMove; } else { from = A1; to = D1; piece = rook; goto UnmakePieceMove; } } } else { ClearSet(bit_move, BlackPieces); PcOnSq(from) = -king; BlackKingSQ = from; if (abs(to - from) == 2) { if (to == G8) { from = H8; to = F8; piece = rook; goto UnmakePieceMove; } else { from = A8; to = D8; piece = rook; goto UnmakePieceMove; } } } break; } | |||
| 250
    
        dimoff 06.04.06✎ 12:08 | 
        Хороший оператор GoTo, полезный     | |||
| 251
    
        GrayT 06.04.06✎ 12:12 | 
        (250)IAm???     | |||
| 252
    
        Mort 06.04.06✎ 12:16 | 
        (249) Такое количество операторов case и переходов goto, что хрен проймешь где что начинается и заканчивается. Количество переменных ужос. Автор про автоматы интересно слышал когда - нибудь... Быть может он и занимается программированием много лет и начинал с карт программить, но брать за пример ЭТО... 
  (251) Absolute | |||
| 253
    
        SynchroFaza Tron 06.04.06✎ 12:19 | 
        (NS) А чего ты постоянно так упорно свою точку зрения остальным пытаешься навязать со здоровыми (в смысле большими) примерами? У тебя что, писькомер гипертрофированный?     | |||
| 254
    
        NS 06.04.06✎ 12:45 | 
        (252) Каков ваш опыт в программировании, чтоб судить об этом тексте? Этот текст считается один из лучших в мире...
  (253) Ежели нет меньше примеров - почему бы не дать этот? Причем тут писькомер? Это не мой пример, а пример мирового столпа программирования, Профессора, доктора наук. Признанный образец кода, включенный во все крупнейшие тесты компиляторов. (На этом коде эффективность компиляторов проверяют - неужели интел будет проверять эффективность своего компилятора на плохом коде?????) | |||
| 255
    
        NS 06.04.06✎ 12:54 | 
        а насчет неприменения goto вообще - извините, но это просто юношеский максимализм, и отсутствие должного опыта.     | |||
| 256
    
        skunk 06.04.06✎ 13:00 | 
        (252)кому надо применять яд     | |||
| 257
    
        MMF 06.04.06✎ 13:01 | 
        (255) только что сделал поиск по крупнейшему опен-сорсному проекту Jedi. в 1 140 000 строк кода нашлось аж 18 гоуту.     | |||
| 258
    
        Mort 06.04.06✎ 13:01 | 
        (254) 
  1. Назови компилятор от интел. 2. Кем считается. 3. Насчет профессора - старую собаку не научишь новым фокусам. 4. Это тест компилятора? Здесь операции школьного уровня, где модификаторы const, операции выделения памяти и её освобождения, области видимости переменных и математика указателей, где? | |||
| 259
    
        NS 06.04.06✎ 13:02 | 
        (257) В крафти примерно столько-же кода - goto встречается примерно столько же раз.     | |||
| 260
    
        Mort 06.04.06✎ 13:03 | 
        (257) (259) Опенсорсные проекты ещё не говорят что там сплошь профи участвуют.     | |||
| 261
    
        skunk 06.04.06✎ 13:04 | 
        и скорее всего те куски кода были написаны когда люди не знали что есть процедурное программирование     | |||
| 262
    
        NS 06.04.06✎ 13:06 | 
        (260) Crafty - говорит. Я выше привел аргументы.     | |||
| 263
    
        Беглый Чебурашка 06.04.06✎ 13:08 | 
        Использовал только один раз, что бы сразу выйти из нескольких циклов.     | |||
| 264
    
        MMF 06.04.06✎ 13:09 | 
        (259) че то твой проффффесор не поддерживает процент 1/100 000 строк, с которым ты согласился.     | |||
| 265
    
        Mort 06.04.06✎ 13:11 | 
        (264) Это такой жесткий тест для компиляторов (от интел) поперхнется комп гоутами али нет.     | |||
| 266
    
        NS 06.04.06✎ 13:12 | 
        (264) Я могу еще раз повториться. Goto нужен достаточно редко, но он иногда нужен, и повышает как быстродействие, так и читаемость кода.
  То что самолеты падают достаточно редко - не значит, что они не падают. | |||
| 267
    
        skunk 06.04.06✎ 13:12 | 
        а я думал для чего нужен гоуту... оказывается компиляторы тестить     | |||
| 268
    
        NS 06.04.06✎ 13:13 | 
        (265) Не поперхнется... Если ты немного подучишься, то узнаешь, что все циклы, условия и т.д. компилируются в goto (jmp и т.д.) Так что с компом всё будет ОК.     | |||
| 269
    
        skunk 06.04.06✎ 13:15 | 
        не знал что проц понимает процедуры... хотя вру... call... (((     | |||
| 270
    
        MMF 06.04.06✎ 13:16 | 
        (267) вообще-то это проблема для компилятора: что делать с переменными -итераторами циклов, если выход из цикла осуществляется по гоуту. Нормальный стиль программирования предполагает, что переменная цикла используется только для управления циклом и в его теле, при выходе из цикла она должна уничтожаться.     | |||
| 271
    
        Mort 06.04.06✎ 13:16 | 
        (268) LOL. Ты серьёзно воспринял?     | |||
| 272
    
        skunk 06.04.06✎ 13:18 | 
        (270)не все компляторы ... думаю что большинство... отработают правильно выход из цикла по гоуто...     | |||
| 273
    
        NS 06.04.06✎ 13:20 | 
        (269) Чтоб избежать  call, и хранения параметров процедуры и адреса точки вызова в стеке и памяти - используются оптимизирующие компиляторы и, например, директива inline в делфях после определения процедуры...
  Из под нормального компилятора текст выходит почти без call, а с кучей переходов... | |||
| 274
    
        NS 06.04.06✎ 13:21 | 
        (272) Конечно правильно отработают, а переменная опеределенная в цикле - скорей всего вообще попадет в регистр... С очень большой вероятностью.     | |||
| 275
    
        skunk 06.04.06✎ 13:26 | 
        цикл для работы имеет стэк... в него push заносятся данные необходимые для работы цикла... break and goto перепрыгивая конец цикла... не закрывают этот стэк pop... хотя может быть сейчас в мире компилятор чего-то изменилось     | |||
| 276
    
        Neco 06.04.06✎ 13:28 | 
        Но все таки интересен вопрос: "В каких случая необходимо использовать оператор Перейти (Goto)"  Если не касатся 1С, то для написания циклов и переходов в bat файДОС (Windows) | |||
| 277
    
        GrayT 06.04.06✎ 13:28 | 
        (275)Цикл имеет стэк???     | |||
| 278
    
        SynchroFaza Tron 06.04.06✎ 13:28 | 
        (NS) (255) - смотри (174), если я молод это не дает тебе права делать подобные высказывания.     | |||
| 279
    
        skunk 06.04.06✎ 13:30 | 
        (277)напиши простой код... компильни и посмотри...     | |||
| 280
    
        MMF 06.04.06✎ 13:32 | 
        (276) Гоуту используется для замены Альфовского КЗК - как увидит потенциальный вор интеллектуальной собственности мешанину из Перейти-Метка  - сразу оставит эту затею.     | |||
| 281
    
        skunk 06.04.06✎ 13:33 | 
        (280)думаю вору пофих     | |||
| 282
    
        GrayT 06.04.06✎ 13:34 | 
        (279)Для меня это будет слишком долго :)  Тут NS писал что типа цикл это те-же джампы и проверка условий. И со студенческих времен Паскаль 1 под ОСРВ это так и выглядело. Зачем там стэк? | |||
| 283
    
        skunk 06.04.06✎ 13:37 | 
        на том уровне есть всего 16 регистров ... и не все они доступны для модификации... поэтому для организации цикла регистры пушат и попят     | |||
| 284
    
        skunk 06.04.06✎ 13:37 | 
        а без регистров на том уровне... нету условных переходов... а без них циклов     | |||
| 285
    
        GrayT 06.04.06✎ 13:38 | 
        (283)А-а-а-а. Скорее всего ты прав.     | |||
| 286
    
        Mort 06.04.06✎ 13:39 | 
        И вообще причем тут джампы и регистры, речь идет о GOTO, которого Струструб скрипя зубами оставил в с++ чтобы оставить совместимость прог и привычки старых пердунов типа профессора с его шахматным тестом для компилеров интел.     | |||
| 287
    
        GrayT 06.04.06✎ 13:41 | 
        (286)Все же можно предположить что Вам не больше 25.....     | |||
| 288
    
        skunk 06.04.06✎ 13:41 | 
        (285) ну все таки не зря же я в школу ходил... хотя бы и три класса...
  (286)ЛОЛ ... ремембер | |||
| 289
    
        Neco 06.04.06✎ 13:42 | 
        Интересно чем объяснить такой код из УПП:  // Если группировка не выводится, переходим к выбору следующей (кроме иерархии) Если СтруктураПараметров.СтруктураПропускаемыеГруппировки.Свойство(Выборка.Группировка()) И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда Перейти ~M1; КонецЕсли; //... // что-то делаем (всего 20 строчек) //... ~M1:Если Индекс < ПостроительОтчета.ИзмеренияСтроки.Количество()-1 Тогда можно ведь написать и так: Если Не(СтруктураПараметров.СтруктураПропускаемыеГруппировки.Свойство(Выборка.Группировка()) И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке) Тогда //... // что-то делаем (всего 20 строчек) //... КонецЕсли; Если Индекс < ПостроительОтчета.ИзмеренияСтроки.Количество()-1 Тогда | |||
| 290
    
        GrayT 06.04.06✎ 13:44 | 
        (289)Автора консультировал NS? ;))     | |||
| 291
    
        Neco 06.04.06✎ 13:45 | 
        (290) Просто интересен ход мысли, даже и логики не вижу в таком коде. И в УПП таких выкрутасов полно     | |||
| 292
    
        skunk 06.04.06✎ 13:45 | 
        +290 либо старый профессор     | |||
| 293
    
        Mort 06.04.06✎ 13:47 | 
        Писал этот код товарисч который простенькую блок схему не могет в уме накидать. Отсюда можно вынести вердикт: оператор GOTO компенсирует недостаток серой массы. Ну не хватило автору несколько мегабайт ОЗУ ход течения проги представить...     | |||
| 294
    
        MMF 06.04.06✎ 13:48 | 
        (290+) в первую очередь это значит, что такой монстр, как УПП, разрабатывается как попало пианэрами.     | |||
| 295
    
        dimoff 06.04.06✎ 13:48 | 
        (251) Yes, why so amazing?     | |||
| 296
    
        NS 06.04.06✎ 13:49 | 
        (282) Сделав переход по флагу (а только так заменяется goto циклом) - ты заводишь еще одну переменную - а на неё может не хватить регистров - и соответственно используется память (обращение к памяти), разрулив goto использованием функции/процедуры - ты можешь получить стек - то же обращение к памяти...
  И плюс - просто на переход тратиться одна процессорная операция перехода, при эмуляции флагом - несколько, и не один компилятор это не разрулит. (286) Старый пердун не настолько и стар. А всем ведущим разработчикам ПО, в том числе и шахматным - по 50 лет... Опыт очень важная штука в программировании. И если ты не заметил - то его текст очень читабелен, и очень хорош. А текст иго используется при тестирование ЛЮБЫХ компиляторов с/с++, и его программа кроме образца - участвует в чемпионатах мира и является образцом для всех шахматных программистов... А его КрейБлиц - просто легенда американского программирования для суперкомпов, и многократная чемпионка мира. | |||
| 297
    
        GrayT 06.04.06✎ 13:50 | 
        (295)Очень редкий гость.     | |||
| 298
    
        Mort 06.04.06✎ 13:51 | 
        Текст оцтой. Щас разберем.     | |||
| 299
    
        NS 06.04.06✎ 13:53 | 
        (298) Я просто уверен, что ты пишешь намного лучше, и заработал уже не один миллиард на своих творениях.     | |||
| 300
    
        dk 06.04.06✎ 13:55 | 
        Тут придумал как использовать для отладки:
  Перейти МояМетка1; Оператор1; Оператор2; Оператор3; Оператор4; ~МояМетка1: ОператорКоторыйХочуИзменить; Возврат; Оператор6; Оператор7; --------- Т.е. если модуль довольно большой и отключать Операторы1, .. Операторы4 проблематично, то можно воспользоваться переходом, но это только для отладки ЗЫ Всю ветку не читал | |||
| 301
    
        NS 06.04.06✎ 13:56 | 
        (+296) Плюс он является явным мировым лидером в алгоритмизации и реализации параллельных вычислений.     | |||
| 302
    
        Neco 06.04.06✎ 13:58 | 
        (301) Это как параллельные вычисление? На примере пожалуйста     | |||
| 303
    
        Mort 06.04.06✎ 13:59 | 
        (299) Ещё я знаю больше по физике чем Ньютон и по геометрии чем Евклид. Каждому своё время. Может быть приведенный код выжал максимум из скорости выполнения но для теста компилеров и как стиль программирования в сегодняшних реалиях никуда не годен.     | |||
| 304
    
        Mort 06.04.06✎ 14:00 | 
        (301) Алгоритмизации? Интересно в каких ИТ-сферах сейчас доминирует алгоритмизация..     | |||
| 305
    
        NS 06.04.06✎ 14:00 | 
        (302) Пример? Про многоядерные и многопроцессорные системы слышал? Софт, который для них разрабатывается есно не линейный, а использует все ядра/процессоры (параллельные процессы).     | |||
| 306
    
        MMF 06.04.06✎ 14:01 | 
        (299) быстродействие программы - противоположность ее простоты и понятности, экономия миллисекунд машинного времени оборачивается растратой часов рабочего времени программиста. В шахматах или расчетах погоды - оправданы всякие трюки, в 1С их наличие - это признак отсутствия контроля кода и плаката "вазелин еще нужно заслужить" у начальника отдела разработки     | |||
| 307
    
        GrayT 06.04.06✎ 14:04 | 
        (305)ОФФ: Прапорщик Задов как то ссылочку давал на 96 процессорный комп. Класная штука наверное если на всю мощь, да под 1С :))))     | |||
| 308
    
        NS 06.04.06✎ 14:05 | 
        (303) Ты наверно не понял - SPEC CPU это не старый продукт ;-)))))
  CRAFTY - то что я привел куски текста... Вроде там дата стоит в комментариях. Параллельные алгоритмы - Это вроде сейчас, и ими он занимается СЕЙЧАС!!!! Крейблиц... Это было не так давно. И намного позже появления си, и разработки методов и постулатов ООП и процедурного программирования... Более того - могу тебя уверть, что Хиатт - это всё та-же школа, которой тыкают ярые противники goto, причем её современный вариант. (304) Это наверно тема отдельной ветки, не имеющая вообще никакого отношения к данной? Без Алгоритмизации вообще не может быть ни одного алгоритма, и ни одной программы. Используется она во всех ИТ-сферах. | |||
| 309
    
        NS 06.04.06✎ 14:06 | 
        (306) Еще раз - в данном случае гото используется не для повышения быстродействия, а для улучшения читабельности кода.     | |||
| 310
    
        Колумбарий 06.04.06✎ 14:09 | 
        2(309) С кем ты споришь? С мерином, который гордится качеством своих шор?     | |||
| 311
    
        GrayT 06.04.06✎ 14:10 | 
        (310)В мемориз!     | |||
| 312
    
        skunk 06.04.06✎ 14:10 | 
        что такое шор?     | |||
| 313
    
        NS 06.04.06✎ 14:11 | 
        (312) Шоры - заслонки.     | |||
| 314
    
        NS 06.04.06✎ 14:12 | 
        Хм...
  Шоры Шоры Брокгауз и Ефрон Шоры, наглазники для упряжных лошадей, мешающие им смотреть по сторонам и уменьшающие их пугливость… ШОРЫ Даль ШОРЫ ШОРЫ ж. мн. упряжь конская без хомута или оголовка, немецкая упряжь, со шлеей, с лямкой. Шорная или немецкая упряжь. Шорник, кто вообще работает ременную упряжь, конскую упряжную сбрую. || Шоры… | |||
| 315
    
        skunk 06.04.06✎ 14:12 | 
        (313)это по каковский?     | |||
| 316
    
        NS 06.04.06✎ 14:13 | 
        (315) Вроде по русски.     | |||
| 317
    
        skunk 06.04.06✎ 14:14 | 
        (316)я не русский... по эту не знал     | |||
| 318
    
        GrayT 06.04.06✎ 14:14 | 
        (315)Не так сильно устаревшее. Ни когда на лошадках не видел - глазки им прикрывали, чтоб не ушли куда или не боялись чего.     | |||
| 319
    
        Mort 06.04.06✎ 14:15 | 
        Она разработана с использованием уникальной методологии вращения растровых изображений, и применение технологии AMD64 позволило существенно повысить производительность шахматного движка, — говорит Роберт Хайатт (Robert Hyatt), адъюнкт-профессор Университета штата Алабама (г. Бирмингем), автор Crafty. — Система с процессором AMD Athlon 64 FX — самая быстрая из всех, которые мне довелось видеть. Уверен, что ничего другого покупать не следует». 
  Последнее предложение РУЛЕЗ. | |||
| 320
    
        skunk 06.04.06✎ 14:18 | 
        (318)я то лошадей на картинках только видал     | |||
| 321
    
        NS 06.04.06✎ 14:18 | 
        (319) Ты знаешь Одноядерную систему, которая быстрее?     | |||
| 322
    
        GrayT 06.04.06✎ 14:19 | 
        (320)Дикий.... или наоборот :) (сорри за ОФФ)     | |||
| 323
    
        skunk 06.04.06✎ 14:20 | 
        (322) я тебя честно обманываю... видал из далека... правда Ренатка как то кон на лошади каталась... но ни каких шор я не на лошади не наблюдал... возможно просто не обратил внимание     | |||
| 324
    
        Колумбарий 06.04.06✎ 14:21 | 
        2(317) я тоже.     | |||
| 325
    
        Mort 06.04.06✎ 14:22 | 
        А про алгоритмизацию - принципы ООП и RUP системы превратили алгоритмирование (в буквальном смысле) как таковое в удел конечных программистов - и применяется в описании конечных методов  - там единственное место куда можно впихнуть оператор GOTO и то если если алгоритм кривой.     | |||
| 326
    
        skunk 06.04.06✎ 14:22 | 
        (324)тебе везет... такие слова знаешь     | |||
| 327
    
        Mort 06.04.06✎ 14:24 | 
        Интересно Rational Rose генерит операторы GOTO... )))     | |||
| 328
    
        NS 06.04.06✎ 14:25 | 
        (325) Блок-схемы слышал? Там одни goto - условные и безусловные ПЕРЕХОДЫ.     | |||
| 329
    
        Mort 06.04.06✎ 14:26 | 
        Слышал?.. Да я уже про них забыл. А ты слышал про UML ?     | |||
| 330
    
        GrayT 06.04.06✎ 14:27 | 
        "Да я уже про них забыл" - фи.     | |||
| 331
    
        skunk 06.04.06✎ 14:28 | 
        (330)почему     | |||
| 332
    
        GrayT 06.04.06✎ 14:30 | 
        Имхо, если разрабатываешь хороший алгоритм без блок-схем не обойтись.     | |||
| 333
    
        skunk 06.04.06✎ 14:32 | 
        (332)значит у меня всегда плохие алгоритмы... правильно, что ушел на пенсию     | |||
| 334
    
        Mort 06.04.06✎ 14:34 | 
        Иногда метод довольно сложный и приходится порисовать, но при грамотном построении модели проекта такие случаи очень редки.     | |||
| 335
    
        GrayT 06.04.06✎ 14:34 | 
        Не растраивайся... Под хорошим я понимал, ну как бы сказать по русски - хитровывернутый. Опять же повторюсь - это имхо. Возможно просто старая школа. Как говаривал мой учитель - программы пишуться за столом, а не за компьютером.     | |||
| 336
    
        GrayT 06.04.06✎ 14:35 | 
        (334)во-во "при грамотном построении модели" а ее часто именно блок-схемами и отображают. Ну падумаешь законы немного другие...... EDF     | |||
| 337
    
        omega_juice 06.04.06✎ 14:37 | 
        хороший алгоритм - не меньше 22 см.     | |||
| 338
    
        skunk 06.04.06✎ 14:37 | 
        (335)я их долго обдумываю... иногда стреляю... на пробу... так сказать прицеливаюсь... как попаду... начинаю искать место где можно изебнутся... в итоге получается судя по всему гуано     | |||
| 339
    
        skunk 06.04.06✎ 14:38 | 
        (337)у меня хвост 44     | |||
| 340
    
        Mort 06.04.06✎ 14:47 | 
        (336) Гм, ну тетрис блок-схемами можно изобразить... Модель имелась ввиду ООП. Даже не ООП а объектная. Такие применяются даже к построению реляционных БД.     | |||
| 341
    
        GrayT 06.04.06✎ 14:49 | 
        (340)Ну и модель БД так же удобнее в графическом виде представлять. Опять же, я не настаиваю.     | |||
| 342
    
        Колумбарий 06.04.06✎ 14:49 | 
        2(340) Например модуль списания по ФИФО - он больше алгоритмический или объектный?     | |||
| 343
    
        skunk 06.04.06✎ 14:51 | 
        как события отображать на схемах... блок схемы это от линейности     | |||
| 344
    
        GrayT 06.04.06✎ 14:54 | 
        (343)С событиями сложнее. Надо было как то сильно изменить чужую программу на дельфе, а в ней активно использовались пользовательские события. Пока не прорисовал на бумаге понять не смог. Но ведь как то изобразил :)     | |||
| 345
    
        skunk 06.04.06✎ 14:55 | 
        (344)рисунок в студию     | |||
| 346
    
        Колумбарий 06.04.06✎ 14:57 | 
        2(343) События - тот же кейс. Все равно в коде присутсвует атомарность, пока один атом не выполнится, другой не сможет перехватить контроль.
  Выполнился атом - выполняется кейс, который анализирует, случилось событие или нет. Не случилось - управление следующему атому. | |||
| 347
    
        skunk 06.04.06✎ 14:58 | 
        (346)а вот как изобразить то что один объект не фиха не делает пока у другого что-то     | |||
| 348
    
        Mort 06.04.06✎ 14:58 | 
        (342) Метод списания. Объект документ обращается к объекту РегистрМенеджер с запросом на добавление записей. А реализация метода естественно может быть отражена алгоритмом. Не содержащим GOTO.     | |||
| 349
    
        Mort 06.04.06✎ 14:59 | 
        (347) Когда у другого что-то заканчивается, он сообщает об этом 1-му объекту.     | |||
| 350
    
        Колумбарий 06.04.06✎ 15:01 | 
        2(348) Да, а может быть отображена алгоритмом, содержащим ГОУТУ. И быть более читабельным, чем такой же, несодержащий. Примеры выше НС привел.     | |||
| 351
    
        GrayT 06.04.06✎ 15:01 | 
        (345)Во-первых, давно утерян, во-вторух это был не один лист, в 3- согласен с 346  (347, 349) Ну да описать блок-схемой механизм взаимодействия тригеров будет достаточно проблематично. | |||
| 352
    
        Колумбарий 06.04.06✎ 15:01 | 
        2(347) Блок схемы изображают не объекты, а алгоритмы, то есть действия, атомы кода.     | |||
| 353
    
        skunk 06.04.06✎ 15:03 | 
        (349)это все понятно... как отобразить это на блок схеме     | |||
| 354
    
        NS 06.04.06✎ 15:03 | 
        На блок схеме можно отобразить и обект, точнее событие, и точку входа по этому событию.     | |||
| 355
    
        Mort 06.04.06✎ 15:04 | 
        Например не помню когда мне приходилось вылезать ни с того ни с сего из двойного цикла в тот же модуль. Обычно нужно останавливать вложенный цикл когда производится поиск. Но у меня всегда нечто это ищет и это возвращает, а потому из центра цикла спокойно return.
  (353) На диаграмме последовательностей, или диаграмме видов деятельности. А блок схемы здесь не катят. | |||
| 356
    
        Колумбарий 06.04.06✎ 15:06 | 
        2(355) То что ты сейчас - абсолютизировал свой опыт. Это не значит, что множество других люжей не сталкиваются с задачами, в которых это может быть применено.     | |||
| 357
    
        Колумбарий 06.04.06✎ 15:09 | 
        И потом, про читабельность нечитабельность - это во многом оценочный, то есть качественный показатель. Например то, что показал сканк, приведя код, набранный латиницей для большинства 1Сников более нечитабельный, чем написанный по-русски, но с оператором Перейти.     | |||
| 358
    
        Mort 06.04.06✎ 15:12 | 
        (356) Это не способ решения выхода из циклов, это само выходит когда каждый объект имеет свою реальную роль. 
  Например нарисовать на схеме узлы соответствующие параметру: Можно Scheme->Draw(Parametr); - криво в понятийном смысле а можно Scheme->find(Parameter)->Draw(); - всё четко И так у меня всегда получается, а если проект вынуждает меня писать огромный модуль (>5 скринов) или goto(), то надо сразу искать ошибку в проектировании/ | |||
| 359
    
        Колумбарий 06.04.06✎ 15:16 | 
        2(358) У меня тоже, но еще не значит, что я побывал во всех ситуациях. Например, если бы у меня был выбор - применить Гоуту или поставить руководству проекта ультиматум - или вы исправляете ошибку в проектировании или я увольняюсь, я бы наверное применил Гоуту...     | |||
| 360
    
        Mort 06.04.06✎ 15:21 | 
        Предложение конечного программиста по аспектам проектирования (а оно длится до 80% всего времени разработки) всегда верно и важно пока не опровергнуто. Где то слышал или читал такую хорошую фразу. Но если проект кривой то здесь ничего не поделаешь - остаётся ожидать новых сюрпирозов.     | |||
| 361
    
        LarsVVS 06.04.06✎ 15:33 | 
        Самим goto не пользуюсь - просто не возникает ситуаций (видимо стиль программирования такой). А вот break и continue - регулярно.     | |||
| 362
    
        NS 06.04.06✎ 15:55 | 
        361 Продолжить - гото неудобно заменять, а прервать - абсолютно равносилен гото.
  Ежели есть комментарий - то читается одинаково. Если нет - то goto информативней... Всё-таки у метки есть название... | |||
| 363
    
        Mort 06.04.06✎ 16:07 | 
        Зачем нужен коммент к break ???? Итак ясно что выход из цикла. А вот goto неясно куда ведет, особенно если тело цикла большое.     | |||
| 364
    
        NS 06.04.06✎ 16:16 | 
        (363)
  goto Опровергли; // обработка превышения по Бетте, выходим из цикла. Вроде всё понятно... | |||
| 365
    
        NS 06.04.06✎ 16:24 | 
        И еще никто не переписал в ветке (175)
  Тот же пример с переходом и в 248/249. | |||
| 366
    
        Каанкереде 06.04.06✎ 16:24 | 
        (362) несогласен. прервать и продолжить более читаемы и понятны. А метка, хоть и есть у нее название, но сразу не понятно где ее искать, то ли она выше, то ли ниже, насколько она дальше от текущего места...     | |||
| 367
    
        NS 06.04.06✎ 16:28 | 
        (366) Ты хоть раз писал на нормальном языке? Метка ищется моментально.
  Продолжить??? Можешь переписать (175) через продолжить? | |||
| 368
    
        Mort 06.04.06✎ 16:38 | 
        В ветке 175 ты не написал операторов а задал жесткую структуру и делайте как хотите.
  Дай определенную задачу с goto и я сделаю это лучше. | |||
| 369
    
        Mort 06.04.06✎ 16:39 | 
        Ты странно рассматриваешь программу как набор строчек (с)     | |||
| 370
    
        Mort 06.04.06✎ 16:41 | 
        OFF: при определенной ширине окна браузера совет "Обсуждение правил форума и действий модераторов допускается только приватно (ICQ, e-mail). (правило 8)" 
  разбивается и во второй остаётся смайл "8)" | |||
| 371
    
        syktyk 06.04.06✎ 16:43 | 
        А есть еще структурнуй goto-специально для структурного программирования был сделан. Есть вычисляемый goto...     | |||
| 372
    
        Vozhd 06.04.06✎ 16:44 | 
        (368) Я писал на нормальных языках. Там вообще нет goto, да и порядок выполнения операторов не всегда можно предсказать.  Вообще, читаю эту ветку, не покидает меня ощущение, что люди обсуждают какие-то "серебренные пули" для решения исскуственно надуманных проблем. Зачем это надо? | |||
| 373
    
        NS 06.04.06✎ 16:46 | 
        (371) Case, причем имеет намного более широкий спектр применения.
  И в случае целочисленного аргумента - на нормальных компиляторах очень здорово повышает быстродействие... (Адрес вызова вычисляется) | |||
| 374
    
        Mort 06.04.06✎ 16:47 | 
        (372) Prolog ?     | |||
| 375
    
        Каанкереде 06.04.06✎ 16:51 | 
        (368) это я ему еще в (185) посту говорил.......     | |||
| 376
    
        syktyk 06.04.06✎ 16:52 | 
        Гото широко используется в языках предназначенных для массовых вычислений, в Фортране и пр.     | |||
| 377
    
        Mort 06.04.06✎ 16:58 | 
        С таким калечным синтаксисом как у фортрана я удивляюсь что он там не основной оператор.     | |||
| 378
    
        NS 06.04.06✎ 16:59 | 
        Я такого оголтелого дагматизма еще не видел...
  Даже в случаях, когда можно обойтись без goto - if Not(условие) then оператор Endif Есно на порядок читабельней if (условие) goto Endif; оператор; :EndIf ;-))) Или Для условие цикл ... прервать; ... Конеццикла; Конечно читабельней Для условие цикл .... goto прервать; КонецЦикла; :Прервать .... | |||
| 379
    
        NS 06.04.06✎ 17:00 | 
        догматизма.     | |||
| 380
    
        Mort 06.04.06✎ 17:00 | 
        Блин ты задачу дай, там мож и без циклов обойдется.     | |||
| 381
    
        Участнег 06.04.06✎ 17:01 | 
        За использование ГоуТу руки отрывали ещё в школе.     | |||
| 382
    
        NS 06.04.06✎ 17:02 | 
        (380) А зачем обходится БЕЗ???
  Ты мне можешь объяснить???? Чем тебе Готу помешало, ежели не портит читабельности? | |||
| 383
    
        Vozhd 06.04.06✎ 17:03 | 
        (374) Ну что Вы... Я говорю об языках общего назначений, а не о специализированных...     | |||
| 384
    
        Каанкереде 06.04.06✎ 17:03 | 
        (378) вот у кого догматизм, так это у тебя....  ВЕЛИКИЙ ДОКА писал с готу, значит готу форева! | |||
| 385
    
        NS 06.04.06✎ 17:05 | 
        (384) Я вроде не так сказал..
  Я сказал, что Goto можно иногда употреблять, причем не просто можно, но даже иногда и целесообразно - ежели это не портит читабельность кода. Кстати, ежели интересно - последние несколько лет необходимости в Готу у меня не было, поэтому сам я не использовал. | |||
| 386
    
        syktyk 06.04.06✎ 17:06 | 
        (377)С чего это он калечный? Нормальный язык для расчетов... Хвостовой рекурсии там конечно нет, но как ФормулаТранслятор - он вполне. Кстати для некоторых реализации можно было забацать и рекурсию :)     | |||
| 387
    
        Каанкереде 06.04.06✎ 17:09 | 
        (385) да ты просто его так отстаиваешь, что кажешься фанатиком.. или просто поспорить с народом охота.   Про то что готу вообще нельзя пользоваться никто по моему и не говорил... К готу всегда относился как к чему то, что происходит от безысходности. Ну вот не получается никак "гладкий" алгоритм сделать, быц и прыгнул через два скрина. | |||
| 388
    
        Vozhd 06.04.06✎ 17:13 | 
        (387) Чего только не придумают, лишь бы не исправлять ошибки в проекте... :-)     | |||
| 389
    
        NS 06.04.06✎ 17:13 | 
        (387) Посмори мои первые посты - (167,170,175)
  Речь шла о том - что глупо считать признаком плохого стиля, когда в коде хоть иногда, но встречается goto... А речь до меня шла о том, что даже один goto в проекте - это ЧП. | |||
| 390
    
        NS 06.04.06✎ 17:16 | 
        А из того, что я видел в этой ветки до моих постов выходит - что Хиатт получил бы банан по программированию в школе... ;-)     | |||
| 391
    
        Каанкереде 06.04.06✎ 17:20 | 
        (390) в школе однозначно получил бы. Ибо препод заведомо дает алгоритмы, в которых goto будет явным мусором....     | |||
| 392
    
        NS 06.04.06✎ 17:21 | 
        (391) Ничего подобного. Это может у вас в школе...     | |||
| 393
    
        Каанкереде 06.04.06✎ 17:25 | 
        (392) нет ты сам подумай. На уроке препод говорит, что goto используется только в самых крайних случаях и применять его следует как можно реже... Дает задание, которое он сам делал 15 лет назад, и каждый год выполняют сотни учеников...А на следующий день, ученик приносит домашнее задание с 5 goto в коде.... Что должен сделат ьпрепод?     | |||
| 394
    
        NS 06.04.06✎ 17:28 | 
        (393) Ты хоть читал ветку?
  Из ветки следует - что препод говорит что в язык goto добавлен по ошибке - его использовать никогда нельзя, и когда на олимпиаде ты решаешь задачу с использованием goto - тебе говорят "до свидания", тебе же говорили, что метод в язык был добавлен только для "старых пердунов" привыкших к линейному программированию... | |||
| 395
    
        zzzzz 06.04.06✎ 17:29 | 
        (393) Препод асембелр преподает?     | |||
| 396
    
        zzzzz 06.04.06✎ 17:33 | 
        Прежде чем говорить о чем-то, советую оговориться в терминах.
  И в языках. Ну не верю я, что драйвера без джампа внутри сидят. (Это противникам гото) Ну не верю я, что прога с гото будет быстрее, чем без гото (по поводу восмерки) | |||
| 397
    
        syktyk 06.04.06✎ 17:37 | 
        (396)Согласен... На 50% :) В драйвере можно скипы ставить, гламурнее выглядит.     | |||
| 398
    
        Каанкереде 06.04.06✎ 17:41 | 
        (394) именно так... а что они должны сказать если вдолбливали человеку в голову, вдалбливали. Дали ему задачу, которую они отлично знают, что ее можно решить именно так как они вдалбливали. А ученик приходит и делает именно так, как его учили НЕДЕЛАТЬ. Нобелевскую премию ему давать?     | |||
| 399
    
        kazam 06.04.06✎ 17:42 | 
        код написаный с goto проще переписать с нуля чем модифицировать
  З.Ы, Даёшь 400 сообщений!!... | |||
| 400
    
        zzzzz 06.04.06✎ 17:42 | 
        400     | |||
| 401
    
        NS 06.04.06✎ 17:47 | 
        (396) Будет. Если у тебя многочисленные выходы из циклов вниз, и все в одно место. И не работаешь с БД, а данные уже собраны.
  (398) Это не было оговорено. Можно так-же сказать, что у нас, в ЛГУ кое-кто ставил пару за вот такой код обмена двух переменных значениями: Темп:=a; a:=б; б:=Темп; И ставил двойку, ежели программу расположение цифр от 1 до п^2 по спирали в массиве п х п писали не одним оператором... ничего при этом не оговаривая... А уровень преподования программирования в школах я знаю... Сталкивался. | |||
| 402
    
        kazam 06.04.06✎ 17:54 | 
        (401) а как можно сделать обмен без временной пер-ной??
  в чём тут прикол? | |||
| 403
    
        NS 06.04.06✎ 17:58 | 
        (402) Как? Ты в своей программе будешь использовать лишнюю память для дополнительной переменной? Ты хоть в курсе, что память компьтера ограничена?
  Мне плевать на то, что ты олимпиадник, и знаешь как это сделать без помощи вспомогательной переменной. Зачет будешь сдавать в сессию!!! Вместо подготовки к экзаменам!!! А вот там - получишь вторую задачу, и сам будешь догадываться, что я имелла в виду, что "нормальные прогрпаммисты" пытаются как можно больше всего впихнуть в один оператор без использования операторных скобок. А саму задачу будешь получать устно. И при этом поймешь, как тяжело живется человеку, который из всего алфавита в состоянии выговорить внятно только две буквы, одна из них некий аналог согласной, а другая - гласной. | |||
| 404
    
        Каанкереде 06.04.06✎ 18:00 | 
        (403)...это называется психологическая травма полученая в детско-юношеском возрасте....     | |||
| 405
    
        kazam 06.04.06✎ 18:04 | 
        да, буду! Программа ж моя, что хочу то и делаю.
  Использую - освобождаю, опять использую. я долго читал, думая как не лень писать столько охинеи,- но здесь стало ясно: "имелла" | |||
| 406
    
        Колумбарий 06.04.06✎ 18:18 | 
        2(404, 405) Это прием, которым он довел до абсурда вашу позицию.
  На самом деле он хотел сказать, что a:=a+b; b:=a-b; Но если требовать писать только так, то вы сразу пошлете требующего в пешее эротическое путешествие, что в 405 и доказано. | |||
| 407
    
        Колумбарий 06.04.06✎ 18:21 | 
        +(406) Можно сказать метод Рупора применил. Если доказать вам что использовать Гоуту можно не получается, значит нужно доказать, что нельзя менять значения переменных путем введения дополнительной переменной. Как только вы осознаете абсурдность этого запрета, то поймете, что запрет использования Гоуту не менее абсурден     | |||
| 408
    
        Vozhd 06.04.06✎ 19:49 | 
        (401) Пишите на нормальных языках и никаких проблем не будет  a,b = b,a | |||
| 409
    
        kazam 07.04.06✎ 09:54 | 
        (406) действительно хороший способ. Нужно отключить overflow control     | |||
| 410
    
        Vozhd 07.04.06✎ 09:59 | 
        (409) Угу. Безумно хороший, особенно, если в переменных находятся строки...     | |||
| 411
    
        kazam 07.04.06✎ 10:01 | 
        (410) строки обмениваются с помощью указателей.
  а это уже: (406)a:=a+b; b:=a-b; Так что точно - "безумно хороший" | |||
| 412
    
        Vozhd 07.04.06✎ 10:03 | 
        (411) Указателей? А если адресация памяти не плоская?     | |||
| 413
    
        kazam 07.04.06✎ 10:08 | 
        (412) адрессация мещает сделать обмен переменных адреса (указателей)?
  Зачем делать memcpy(), strcpy() ? | |||
| 414
    
        Vozhd 07.04.06✎ 10:14 | 
        (413) При не плоской архитектуре памяти, указатель будет не обязательно одним числом. memcpy() реализуется на уровне операционной системы, которая знает, как устроена память и как ее адресовать. А вот операторы "+" или "-" могут ничего не знать, об архитектуре памяти конкретной системы.  Хотя если Вы считаете, что вместо программирования бизнес логики необходимо заниматься борьбой с указателями, то никак мешать Вам в этом не буду... | |||
| 415
    
        Слоняра 07.04.06✎ 10:14 | 
        (411)а это как раз херовый способ.. для пацанов     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |