Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Переставить местами 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.064 c
2-1267648749
@!!ex
2010-03-03 23:39
2010.08.27
TreeView изменить размеры элементов.


15-1266485663
Guresff
2010-02-18 12:34
2010.08.27
Как организовать прием платежей на сайте?


15-1270672202
Юрий
2010-04-08 00:30
2010.08.27
С днем рождения ! 8 апреля 2010 четверг


15-1268233355
zinetz_victor@yahoo.com
2010-03-10 18:02
2010.08.27
Кого надо убить, чтобы заработала удаленная отладка в D2010??


4-1236650462
YuS
2009-03-10 05:01
2010.08.27
Как узнать загрузку процессора?