Имя: Пароль:
IT
 
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)

Предупреждение("Несколько клиентов с одним ИНН ("+СокрЛП(ДБФ.PAYERINN)+"). Для получателя следует выбрать нужный.");

фл=1;
Пока фл=1 Цикл
   фл=0;
   Послать.Установить("ТекЭлемент", ПлатежныеПоручения.Клиент);
   ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать);
   Если Послать.Получить("СтатусВозврата") = 1 тогда
       Если Послать.Получить("ВыбЗначение").ФлагНеИспользовать=1 тогда
           Предупреждение("Не, не, не, у этого стоит флаг не использовать...");
           фл=1;
       Иначе
           Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение"));
       КонецЕсли;    
       ....
   Иначе
       Предупреждение("Не, не, не, всё же надо выбрать...");
       фл=1;
   КонецЕсли;
КонецЦикла;

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


фл1=1;
Пока фл1=1 Цикл
   фл1=0;
   Если Клиент.ВыбратьЭлементыПоРеквизиту("ИНН",ИНН,0,0) = 1 тогда
       Пока Клиент.ПолучитьЭлемент() = 1 Цикл
           Если Клиент.ФлагНеИспользовать=0 тогда
               ФлагИНН=ФлагИНН+1;
               ВыбКлиент = Клиент.ТекущийЭлемент();
               Продолжить;
           Иначе
               Если ФлагИНН=0 тогда
                   ВыбКлиент = Клиент.ТекущийЭлемент();
               КонецЕсли;    
           КонецЕсли;
       КонецЦикла;
       
       Если ФлагИНН > 1 тогда
           Предупреждение("Несколько клиентов с одним ИНН ("+СокрЛП(ДБФ.PAYERINN)+"). Для получателя следует выбрать нужный.");
           фл=1;
           Пока фл=1 Цикл
               фл=0;
               Послать.Установить("ТекЭлемент", ПлатежныеПоручения.Клиент);
               ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать);
               Если Послать.Получить("СтатусВозврата") = 1 тогда
                   Если Послать.Получить("ВыбЗначение").ФлагНеИспользовать=1 тогда
                       Предупреждение("Не, не, не, у этого стоит флаг не использовать...");
                       фл=1;
                       Продолжить;
                   Иначе
                       Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение"));
                   КонецЕсли;    
                   ....
               Иначе
                   Предупреждение("Не, не, не, всё же надо выбрать...");
                   фл=1;
                   Продолжить;
               КонецЕсли;
           КонецЦикла;
       ИначеЕсли ФлагИНН = 0 тогда
           Предупреждение("Список клиентов с данным ИНН есть, но у них у всех стоит флаг не использовать. Уберите флаг и попробуйте снова.");
           фл=1;
           Пока фл=1 Цикл
               фл=0;
               Послать.Установить("ТекЭлемент", ВыбКлиент);
               ОткрытьФормуМодально("Справочник.Клиенты.ФормаСписка",Послать);
               Если Послать.Получить("СтатусВозврата") = 1 тогда
                   Клиент.НайтиЭлемент(Послать.Получить("ВыбЗначение"));
                   Если Клиент.ФлагНеИспользовать=1 тогда
                       Предупреждение("Не, не, не, у этого стоит флаг не использовать...");
                       фл=1;
                       Продолжить;
                   КонецЕсли;    
                   ВыбКлиент = Клиент.ТекущийЭлемент();
               Иначе
                   Предупреждение("Не, не, не, всё же надо выбрать...");
                   фл1=1;
                   Продолжить;
               КонецЕсли;    
           КонецЦикла;
       КонецЕсли;    
   Иначе
       тут тожа код...
   КонецЕсли;    
КонецЦикла;

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
в начале надо ставить тэг ... затем

вот так


think up
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

tak ?
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)
а так :

Функция ПриходныйКассовый(Док,ПервыйЭкземпляр=0)
...
КонецФункции

Функция ПриходнаяНакладная(Док,ПервыйЭкземпляр=0)
...
КонецФункции

Функция РасходнаяНакладная(Док,ПервыйЭкземпляр=0)
...
КонецФункции

Процедура Сформ()
....
Шаблон("["+СписДок.ПолучитьЗначение(А).Вид()+"(СписДок.ПолучитьЗначение(А).ТекущийДокумент(),1)]");
....
КонецПроцедуры

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
http://www.acm.org/classics/oct95/
Go To Statement Considered Harmful
Edsger W. Dijkstra
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
вот из-за чего спор... впринципе и начался...

код чела...

//*******************************************
Процедура Сформировать()
  Var X[4];
  ArrSize = 4;
  for i = 1 to ArrSize do
     X[i] = 1;
  enddo;
  ~Main_GoTo_Label:
  j = ArrSize;
     while X[j] = ВыбЧисло1 do
         j = j - 1;
       if j = 0 then GoTo ~End_Of_Procedure; endif;
     enddo;
   X[j] = X[j] + 1;
     for i = (j+1) to ArrSize do
         X[i] = 1;
     enddo;
  for i = 1 to ВыбЧисло1 do                          
     X[4] = i;
     Message(String(X[1]) + ", " + String(X[2]) + ", " + String(X[3]) + ", " + String(X[4]));
  enddo;
  GoTo ~Main_GoTo_Label;
  ~End_Of_Procedure:
КонецПроцедуры



и мой

//*******************************************
procedure btMake()
     var arrX[4];
   for x = 1 to 4 do
       arrX[x] = 1;
   enddo;
   x = 4;
   while x <> 0 do
       for i = 1 to ВыбЧисло1 do
           arrX[4] = i;
           message(string(arrX[1]) + ", " + string(arrX[2]) + ", " + string(arrX[3]) + ", " + string(arrX[4]));
       enddo;
       arrX[3] = arrX[3] + 1;
       if arrX[3] > ВыбЧисло1 then
           arrX[3] = 1;
           arrX[2] = arrX[2] + 1;
           if arrX[2] > ВыбЧисло1 then
               arrX[2] = 1;
               arrX[1] = arrX[1] + 1;
               if arrX[1] > ВыбЧисло1 then
                   x = 0;
               endif;
           endif;
       endif;
   enddo;
endprocedure;
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)а это как раз херовый способ.. для пацанов