Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизПереставить местами 2 числа. Найти похожие ветки
← →
12 © (2010-02-01 18:22) [0]Спрашивают довольно часто.
a,b:integer;
Последний раз написал в тестах :)
a:=a+b;
b:=a-b;
a:=a-b;
a:=a xor b;
b:=a xor b;
a:=a xor b;
push a
push b
pop a
pop b
еще можно
mov EAX,a
XCHG EAX,b
mov a,EAX
Еще?
← →
Dimka Maslov © (2010-02-01 18:48) [1]
> push a
> push b
> pop a
> pop b
>
> еще можно
> mov EAX,a
> XCHG EAX,b
> mov a,EAX
А разве EAX и память в стеке уже не считается за "дополнительную" переменную?
← →
12 © (2010-02-01 18:53) [2]конечно, считается.
← →
KilkennyCat © (2010-02-01 19:00) [3]я бы вначале написал if a == b then "идите нафиг, Штирлиц"
← →
XXL (2010-02-01 19:35) [4]я бы вначале написал
a, b, с:integer;
← →
DVM © (2010-02-01 20:21) [5]
> 12 © (01.02.10 18:22)
> Переставить местами 2 числа.
Единственный нормальный и понятный способ это:
c:=a;
a:=b;
b:=c;
← →
uw © (2010-02-01 20:25) [6]Dimka Maslov © (01.02.10 18:48) [1]
А разве EAX и память в стеке уже не считается за "дополнительную" переменную?
А разве Intel двухадресная машина, чтобы без eax посчитать a := a + b?
← →
turbouser © (2010-02-01 20:36) [7]
> 12 © (01.02.10 18:22)
> Еще?
а если
a,b:integer;
a:=MaxInt;
дальше что?
← →
KilkennyCat © (2010-02-01 20:38) [8]
> а если
> a,b:integer;
> a:=MaxInt;
a := b;
b := MaxInt;
← →
DVM © (2010-02-01 20:39) [9]
> KilkennyCat © (01.02.10 20:38) [8]
> b := MaxInt;
смешно
← →
Anatoly Podgoretsky © (2010-02-01 20:49) [10]
> turbouser © (01.02.10 20:36) [7]
А дальшеa:=a+b;
b:=a-b;
a:=a-b;
Только сними проверку диапазонов, чтобы не ругалось.
← →
turbouser © (2010-02-01 21:10) [11]
> Anatoly Podgoretsky © (01.02.10 20:49) [10]
И это будет правильно работать? Почему?
← →
Anatoly Podgoretsky © (2010-02-01 21:15) [12]> turbouser (01.02.2010 21:10:11) [11]
По законам математики, просто предствь, что это беззнаковые числа и можешь проверить выполнением. Более того это будет работать и для Cardinal, только тут уже надо вспоминать про переносы и заемы.
← →
Dimka Maslov © (2010-02-01 21:34) [13]
> А разве Intel двухадресная машина, чтобы без eax посчитать
> a := a + b?
После работы оптимизатора вполне возможно, что a окажется в eax, а b в ecx. Тогда можно.
← →
uw © (2010-02-01 22:22) [14]Dimka Maslov © (01.02.10 21:34) [13]
После работы оптимизатора вполне возможно, что a окажется в eax, а b в ecx. Тогда можно.
Так ведь изначально первая переменная в ячейке a, а вторая - в b, а не в eax и ecx.
← →
Rouse_ © (2010-02-01 23:16) [15]Хм, никогда не понимал логику создателей синтетических тестов...
Ну поменяю я две переменные и что?
← →
Anatoly Podgoretsky © (2010-02-01 23:18) [16]Почувствуешь гордость за себя.
← →
antonn © (2010-02-01 23:23) [17]ну если оптимизация будет иметь место, то это будет заметно если каждую секунду выполнять эту операцию 4 миллиарда раз :)
← →
Rouse_ © (2010-02-01 23:23) [18]
> Anatoly Podgoretsky © (01.02.10 23:18) [16]
> Почувствуешь гордость за себя.
Ну это врятли, постебаться над аффтаром еще могу, выкатив ему стопицот вариантов (утрируя) а гордость за столь унылое творчество...
Кипятильники ищут чайников - это навевает грусть...
← →
Rouse_ © (2010-02-01 23:25) [19]
> antonn © (01.02.10 23:23) [17]
> ну если оптимизация будет иметь место, то это будет заметно
> если каждую секунду выполнять эту операцию 4 миллиарда раз
> :)
Ога, осталось найти ту задачу, где важна столь суровая оптимизация :)
← →
KilkennyCat © (2010-02-01 23:30) [20]
> Ну поменяю я две переменные и что?
исправишь допущенную ранее ошибку, где присвоилось наоборот
← →
oxffff © (2010-02-01 23:44) [21]
> Спрашивают довольно часто.
Я например спрашиваю у новичков по работе в чем отличие динамических методов от виртуальных. Еще никто правильно не ответил.
P.S. Заходит чел, я ему сразу в лоб вопрос. Обычно мычание про полиморфизм и на этом все.
Автор почитай про полиморфное лямбда исчисление и сломай мозг.
Я уже почти сломал.
← →
Rouse_ © (2010-02-01 23:54) [22]
> oxffff © (01.02.10 23:44) [21]
> Я например спрашиваю у новичков по работе в чем отличие
> динамических методов от виртуальных
Серег, у нас в глубине архивного бэкапа сохранились вещи, где люди конструктор класса вызывают в деструкторе его-же. На вапрос: ?????????? ответ был - а там дето мемлик был, после чего клас падал - а вот так работает...
А ты про виртуальные методы... :)
← →
Eraser © (2010-02-02 00:18) [23]> [21] oxffff © (01.02.10 23:44)
> отличие динамических методов от виртуальных.
вопрос не на много лучше сабжа, кстати )
← →
Ega23 © (2010-02-02 00:35) [24]
> Я например спрашиваю у новичков по работе в чем отличие
> динамических методов от виртуальных.
Я прошу прощения: а разве сейчас разница есть? Я так понимаю, что разница была когда-то давно, не?
← →
Игорь Шевченко © (2010-02-02 01:23) [25]Ega23 © (02.02.10 00:35) [24]
"Virtual Деректива Позволяет методу класса быть отменённым в производных классах. Директива Virtual позволяет методу класса быть отменой (замененной) так же названным методом в производном классе. Директива Virtual может сопровождаться директивой Abstract. Это изменяет эффект директивы Virtual. Это означает, что текущий класс не должен кодировать метод - он здесь только как метка-заполнитель, чтобы напомнить и гарантировать, что полученные классы осуществят его."
"Dynamic Деректива Позволяет методу класса быть заменённым в производных классах. Директива Dynamic позволяет методу класса быть отменой (замененной) так же названным методом в производном классе.
Директива dynamic может сопровождаться директивой Abstract. Это изменяет эффект директивы Dynamic . Это означает, что текущий класс не должен кодировать метод - он здесь только как метка-заполнитель, чтобы напомнить и гарантировать, что полученные классы осуществят его."
Понял, да ?
← →
Германн © (2010-02-02 02:12) [26]
> Кипятильники ищут чайников - это навевает грусть...
>
+1
← →
Германн © (2010-02-02 02:25) [27]
> Игорь Шевченко © (02.02.10 01:23) [25]
Откуда взят этот перевод на "не русский"?
← →
Не занят (2010-02-02 02:32) [28]
> Переставить местами 2 числа.function ExchangeNumbers(const source: TPoint): TPoint;
begin
Result.X := source.Y
Result.Y := source.X
end;
← →
Игорь Шевченко © (2010-02-02 02:36) [29]http://www.delphibasics.ru/Virtual.php
http://www.delphibasics.ru/Dynamic.php
← →
Германн © (2010-02-02 02:42) [30]
> Игорь Шевченко © (02.02.10 02:36) [29]
>
> http://www.delphibasics.ru/Virtual.php
> http://www.delphibasics.ru/Dynamic.php
По обеим ссылкам нашел термин "Директива". Что я сделал не так?
← →
Дмитрий С © (2010-02-02 04:45) [31]
> Игорь Шевченко © (02.02.10 01:23) [25]
А в чем разница-то?
> Ога, осталось найти ту задачу, где важна столь суровая оптимизация
> :)
Ну как, поменять местами две переменные четыре миллиарда раз, чем не задача :)
← →
12 © (2010-02-02 09:05) [32]
> Rouse_ © (01.02.10 23:23) [18]
>
>
> > Anatoly Podgoretsky © (01.02.10 23:18) [16]
> > Почувствуешь гордость за себя.
>
> Ну это врятли, постебаться над аффтаром еще могу, выкатив
> ему стопицот вариантов (утрируя) а гордость за столь унылое
> творчество...
>
> Кипятильники ищут чайников - это навевает грусть...
жду
← →
oxffff © (2010-02-02 09:19) [33]
> Ega23 © (02.02.10 00:35) [24]
>
> > Я например спрашиваю у новичков по работе в чем отличие
>
> > динамических методов от виртуальных.
>
>
> Я прошу прощения: а разве сейчас разница есть? Я так понимаю,
> что разница была когда-то давно, не?
Позднее связывание осуществляется различным образом.
Виртуальные - через смещение в таблице.
Динамические - через просмотр списка таблиц. С возможностью вызова обработчика по умолчанию
Но главное отличие в том, что для виртуальных методов подтип полжен быть подклассом. Для динамических подтип не обязательно является подклассом.
← →
Anatoly Podgoretsky © (2010-02-02 09:34) [34]> Германн (02.02.2010 02:25:27) [27]
Ключница водку делала.
← →
oxffff © (2010-02-02 09:45) [35]
> Rouse_ © (01.02.10 23:54) [22]
>
> > oxffff © (01.02.10 23:44) [21]
> > Я например спрашиваю у новичков по работе в чем отличие
>
> > динамических методов от виртуальных
>
> Серег, у нас в глубине архивного бэкапа сохранились вещи,
> где люди конструктор класса вызывают в деструкторе его-
> же. На вапрос: ?????????? ответ был - а там дето мемлик
> был, после чего клас падал - а вот так работает...
> А ты про виртуальные методы... :)
Приветствую.
К вопросу о корректности программ. Собственно никто не мешает вызывать конструктор класса из деструктора класса (я не призываю никого к этому. Но против высказываний в категорическом стиле ИШ. При всем конечно уважении к нему)
Только насколько я помню в Delphi 2010 их только ввели.
Что касаемо вызова обычного конструктора из деструктора, то и это не запрещается. Например если вызов произодить с указанием отсутствия аллокации, то он будет вести себя как обычный экземплярный метод. Поэтому это безопасно с точки зрения утечки. Можно и с аллокацией. Но нужно смотреть не перекрыт ли newinstance и соответствующий деаллокатор.
Опять же повторюсь это нужно делать лишь только в том случае когды знаешь как это работает. Но это делать можно. Это все к вопросу выразительности языков и frameworks.
← →
KSergey © (2010-02-02 09:50) [36]Занятно, как постарел чтоли форум.
Ранее такие задачки вроде вызывали искрометность решений.
А теперь - главное простота и доступность кода, поддерживаемость. И то, что речь по сути лишь про задачку, где это все не важно - а тут так вот вдруг.
Занятно.
← →
oxffff © (2010-02-02 09:53) [37]
> Опять же повторюсь это нужно делать лишь только в том случае
> когды знаешь как это работает. Но это делать можно. Это
> все к вопросу выразительности языков и frameworks.
Безусловно корректно программы проектировать изначально правильно.
Но признайтесь себе честно, что в течение жизни у вас были моменты когда вы удивлялись новым требованиям со стороны постановщика уже в конце цикла разработки. И просто не в соостоянии были их предусмотреть. Особенно когда предметная область для вас была первым опытом.
Поэтому иногда экономически более целесообразно вносить в программу прямые и категорические патчи.
Вообщем так, как ты любишь Rouse. :)
← →
12 © (2010-02-02 09:54) [38]
> Ранее такие задачки вроде вызывали искрометность решений.
на это ваш покорный и рассчитывал
а тут..
да еще и нахамили :(
← →
Не занят (2010-02-02 23:49) [39]это задача для микроконтроллера стиральной машины, а мы тут больше на дельфи для людей пишем...
← →
@!!ex © (2010-02-03 00:18) [40]> [21] oxffff © (01.02.10 23:44)
> Я например спрашиваю у новичков по работе в чем отличие
> динамических методов от виртуальных. Еще никто правильно
> не ответил.
И я правильно не отвечу. Наверно я плохой программист...
dynamic - не часть ООП, это часть конкретной реализации на конкретном языке.
ИМХО проектировать что-то для конкретного языка в большинстве задач не совсем верно.
Именно поэтому я в общем случае против использования RTTI.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.063 c