Главная страница
    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.


 
oxffff ©   (2010-02-03 00:50) [41]


> dynamic - не часть ООП,


У ООП нет рекомендаций по реализации.


 
Аноним ©   (2010-02-03 00:52) [42]


> dynamic - не часть ООП, это часть конкретной реализации
> на конкретном языке.

а можно было еще и по haskell`у (а я бы еще пролог и форт) пройтись, чо
не знает? - усе, не программист


 
oxffff ©   (2010-02-03 01:03) [43]


> Наверно я плохой программист


Честное слово прекрати. :)
Мы все учимся(во всяком случае могу за себя сказать).
Главное чтобы это желание(учится) не уходило с годами.
Поскольку увы большинство выпускников просто не хочет развиваться по окончанию вуза.

P.S. Давным давно занимался Direct3D. И даже баловался с написанием шейдеров. Правда вершинных. Читал и про пиксельные.
И не могу вспомнить как в них задается зависимость от положения в локальных координатах(и задается ли вообще. Например для расчета освещения от источника света. ведь должна быть).  Не напомнишь? :)
А то на работе завтра нужно рассказать ребятам.
Вообщем взял SDK завтра перечитаю в любом случае.


 
oxffff ©   (2010-02-03 01:05) [44]


> Аноним ©   (03.02.10 00:52) [42]
>
> > dynamic - не часть ООП, это часть конкретной реализации
>
> > на конкретном языке.
>
> а можно было еще и по haskell`у (а я бы еще пролог и форт)
> пройтись, чо
> не знает? - усе, не программист


И спросить для чего нужен комбинатор неподвижной точки.
И про экзистенциальные типы. КАк раз недавно себе голову этим ломал.


 
Игорь Шевченко ©   (2010-02-03 01:08) [45]


> ИМХО проектировать что-то для конкретного языка в большинстве
> задач не совсем верно.


Одна и та же задача с легкостью должна быть решена на Perl, SmallTalk и SQL.


 
vuk ©   (2010-02-03 01:23) [46]

А еще можно вспомнить, что message - методы,  они тоже на самом деле dynamic, но с другим синтаксисом.


 
@!!ex ©   (2010-02-03 08:57) [47]

> [43] oxffff ©   (03.02.10 01:03)
> Честное слово прекрати. :)

Мое вчерашнее сообщение прошу считать бредом... бред и есть.

> [43] oxffff ©   (03.02.10 01:03)
> И не могу вспомнить как в них задается зависимость от положения
> в локальных координатах(и задается ли вообще. Например для
> расчета освещения от источника света. ведь должна быть).
> Не напомнишь? :)

Зависимость от локальных координат??
Не совсем понял что ты имеешь ввиду.


 
oxffff ©   (2010-02-03 10:36) [48]


> @!!ex ©   (03.02.10 08:57) [47]


Я собственно хотел при растеризации треугольника в пиксельном шейдере высчитывать например яркость пикселя в зависисмости от его положения в треугольнике. Но прочитал что много очень хочу. Во всяком случае в Direct3D 9.


 
tesseract ©   (2010-02-03 10:46) [49]


> это задача для микроконтроллера стиральной машины, а мы
> тут больше на дельфи для людей пишем...


Сколько видел микроконтроллеров, там с гемморой с экономией RAM и ROM. Так что алгоритмы используются наиболее короткие и желательно без задействия математики.


 
@!!ex ©   (2010-02-03 10:54) [50]

> [48] oxffff ©   (03.02.10 10:36)

в вершине сохраняешь яркость.
В фрагментном шейдере получешь эту же яркость только интерполированную между тремя значениями в зависимости от расстояния до каждой из вершин.


 
oxffff ©   (2010-02-03 11:21) [51]


> @!!ex ©   (03.02.10 10:54) [50]
> > [48] oxffff ©   (03.02.10 10:36)
>
> в вершине сохраняешь яркость.


Нет. Я хотел чтобы яркость была не интерполированная, а чтобы я мог сам высчитывать ее в зависимости от положения точки. То есть по факту производить расчет освещения самостоятельно.


 
oxffff ©   (2010-02-03 11:55) [52]


> oxffff ©   (03.02.10 11:21) [51]


Хотя можно задействовать алгоритмы par. map и par.ocl. map для сходной реализации.


 
@!!ex ©   (2010-02-03 13:28) [53]

> [51] oxffff ©   (03.02.10 11:21)

ну так какая разница?
забей три числа, в каждой вершине
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
по их интерполированным значениям получишь "координаты" фрагмента


 
app ©   (2010-02-03 13:30) [54]

> @!!ex  (03.02.2010 13:28:53)  [53]

Заведите свою отдельную тему по вершинам.


 
oxffff ©   (2010-02-03 14:16) [55]


> @!!ex ©   (03.02.10 13:28) [53]
> > [51] oxffff ©   (03.02.10 11:21)
>
> ну так какая разница?
> забей три числа, в каждой вершине
> 1.0 0.0 0.0
> 0.0 1.0 0.0
> 0.0 0.0 1.0
> по их интерполированным значениям получишь "координаты"
> фрагмента


Понял. :)


 
KSergey ©   (2010-02-03 14:37) [56]

> @!!ex ©   (03.02.10 00:18) [40]
> > не ответил.
>
> И я правильно не отвечу. Наверно я плохой программист...

Где-то было написано "плохой"? На собеседовании вовсе не обязательно отвечать на все вопросы для успешного прохождения оного, про это давно здесь в том числе уже говорилось. Т.к. задача совсем другая, это не экзамен, где надо непременно все ответы знать.

Ссылка в тему
http://0x8.livejournal.com/31546.html
Выдержка:
"...Вакансии Senior C++, Senior C# - я, в приципе, смотрю и тех и других.
Задача 1
Вычислить 2^8 (два в восьмой степени)

Кандидаты думают по нескольку минут, считают на бумаге, 2 раза дают неправильные ответы...."


 
@!!ex ©   (2010-02-03 15:12) [57]

> [56] KSergey ©   (03.02.10 14:37)

Ну уж степень двойки хотя бы до 12 степени почти все знают. :))



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.6 MB
Время: 0.098 c
2-1269262046
Константин
2010-03-22 15:47
2010.08.27
Не уничтожается объект


2-1272172207
@!!ex
2010-04-25 09:10
2010.08.27
Как програмно удалить IE Cookes и сохраненные пароли?


2-1275332438
Delphi
2010-05-31 23:00
2010.08.27
Как это будет на Delphi?


2-1271803296
RGV
2010-04-21 02:41
2010.08.27
alt+Tab


2-1271766736
Ванич
2010-04-20 16:32
2010.08.27
TMemo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский