Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.06 c
15-1272065525
Копир
2010-04-24 03:32
2010.08.27
Знаменитое предложение: Отчет об ошибке.


2-1275245281
Semen
2010-05-30 22:48
2010.08.27
Поиск и открытие файлов


3-1243871707
Trifle
2009-06-01 19:55
2010.08.27
forced writes on/off


15-1268343373
DillerXX
2010-03-12 00:36
2010.08.27
подскажите, что за БД?


2-1268239219
Eugen1501
2010-03-10 19:40
2010.08.27
TIdMultipartFormDataStream;





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский