
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (11) « Первая ... 5 6 [7] 8 9 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Думаю, что не больше, чем то же самое делал(и) автор(ы) Python'а
![]() |
Сообщ.
#92
,
|
|
|
Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов? К C++ батарейки не прилагают, что ли?
|
Сообщ.
#93
,
|
|
|
Цитата Ho Im @ Зачем? Бери мой класс и пользуйся. Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов? ![]() Откуда берется это "должен"? Может, но не обязан. А "каждый третий |
Сообщ.
#94
,
|
|
|
Цитата trainer, 11.08.2006, 10:48:34, 1214679 Точное значение 1754! что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . Цитата trainer, 11.08.2006, 10:48:34, 1214679 Так что и Python и Delphi дружно сливают C++ ![]() |
Сообщ.
#95
,
|
|
|
Цитата Змей(Чёрный) @ А ты прикинь, сколько раз там происходит умножение на числа, кратные 10 и пары чисел, кратных 5 и 2. что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . |
Сообщ.
#96
,
|
|
|
Цитата Змей(Чёрный) @ что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . А ты посчитай на бумажке. Добавлено trainer, я худший садист ![]() |
Сообщ.
#97
,
|
|
|
По вашему для Дельфи нет модулей для больших чисел? Хе
![]() |
Сообщ.
#98
,
|
|
|
Даешь войну "У кого больше библиотек"!
![]() |
Сообщ.
#99
,
|
|
|
Цитата Ho Im, 11.08.2006, 12:55:01, 1214951 А ты посчитай на бумажке. хм... как-нить потом... В принтере последние два листочка, а туалетной всего три рулончика осталось... не хватит... |
Сообщ.
#100
,
|
|
|
Цитата Romkin @ Писать так - моветон в Delphi ![]() Но можно так procedure my_func2(mc: MyClass); begin ... end; begin with my_func do try ... //работа с результатом функции finally Free; //Освободили end; end. Второй путь - интерфейсы встроены, хочешь отслеживание области действия и множественное наследование, используешь их. Только как-то и не надо. Никогда мне не нужны были "обходы ограничений" ![]() э-ээ.. Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить. Интересно, как это будет выглядеть с with? И сколько строчек он будет занимать? А если аргументов --- не один, а пять? Цитата Smike @ Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости. Можно примерчик? |
Сообщ.
#101
,
|
|
|
Цитата trainer @ Даешь войну "У кого больше библиотек"! ![]() /me вспомнил CPAN и понял, что сейчас самое время появиться перловщикам /me еще напряг серое вещество и вспомнил Java /me посинел от натуги, покраснел от гнева и понял, что C# доступно такое, о чем все перечисленные выше могут только мечтать /me считает, что плюсовикам лучше вообще не влезать в спор "у кого больше библиотек", т. к. все плюсовые библиотеки либо костыли для действий, не предусмотренных стандартом (как boost), либо просто врапперы над сишными; категория реально нужных вещей вроде Qt очень немногочисленна |
Сообщ.
#102
,
|
|
|
Итак как я проводил соревнования Python vs Delphi.
Цель измерить время работы одного алгоритма на Python и Delphi. Платформа OS: Windows XP (Build 2600: Service Pack 2) Borland Delphi Enterprise version 7.0 (Build 4.453) Кидаем компонент memo на пустую форму. Дальше собственно ![]() ![]() procedure TForm1.FormCreate(Sender: TObject); var Begin_Time, End_Time: TDateTime; x,y,z: Integer; r:real; begin Begin_Time:=Time; for x:=0 to 100 do for y:=0 to 1000 do for z:=0 to 100 do r:=sin(x)+cos(y)+sin(z); End_Time:=Time; memo1.Lines.Add('Begin_Time '+TimeToStr(Begin_Time)); memo1.Lines.Add('End_Time '+TimeToStr(End_Time)); memo1.Lines.Add('All_Time '+TimeToStr(End_Time-Begin_Time)); end; Результат: ![]() ![]() Begin_Time 14:31:06 End_Time 14:31:09 All_Time 0:00:03 Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on win32 Программа. В циклах "+ 1" изза "дощечек в заборе"... ![]() ![]() # -*- coding: cp1251 -*- from time import gmtime, strftime, localtime from math import sin,cos print "Begin_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime()) for x in range (0,100 + 1): for y in range (0,1000 + 1): for z in range (0,100 + 1): r=sin(x)+cos(y)+sin(z) print "End_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime()) О функциях: Цитата strftime( format) Return a string representing the date, controlled by an explicit format string. Format codes referring to hours, minutes or seconds will see 0 values. See the section on strftime() behavior. localtime( [secs]) Like gmtime() but converts to local time. The dst flag is set to 1 when DST applies to the given time. Changed in version 2.1: Allowed secs to be omitted. Результат: ![]() ![]() Begin_Time Fri, 11 Aug 2006 14:41:02 +0000 End_Time Fri, 11 Aug 2006 14:41:30 +0000 All_Time 0:00:28 Таким образом со счетом (0:00:03) против (0:00:28) те 3 сек. против 28 сек. победил (фанфары барабаны) Delphi ![]() Smike во первых я использовал исключительно целый тип это раз у тебя он никак не целый смотри сам "1>>>.<<<97926189010501006E4930" Это что такое? Во вторых я для расчета факториала не использовал ни функций ни циклов ни одного модуля не потревожил ![]() И сама функция факториала - лямбда рекурсия в одну строку ![]() Цитата Ho Im @ Цитата >>> def factorial(x): ... a = 1 ... for i in range(1,x+1): ... a = a * i ... return a ![]() PS С факториалом я не туда поглядел! |
Сообщ.
#103
,
|
|
|
Цитата mo3r @ Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить Сори, я твой код просто не понял. Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком ![]() Принял объект от MyFunc, передал в MyFunc2, она что-то слелала - вот и уничтожай. Понятно, нужна переменная. И что? ![]() Цитата mo3r @ Цитата (Smike @ Сегодня, 10:39) Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости. Можно примерчик? Да сколько угодно ![]() ![]() ![]() type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; implementation { TFoo } destructor TFoo.Destroy; begin ShowMessage('Destroy'); inherited; end; procedure TFoo.FooFoo; begin ShowMessage('Foooo! :)'); end; //Пример вызова procedure TForm1.Button1Click(Sender: TObject); var Foo: IFoo; begin Foo := TFoo.Create; Foo.FooFoo; end; Или мне, по традиции, привести полное консольное приложение? ![]() ![]() ![]() program Project1; {$APPTYPE CONSOLE} type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; destructor TFoo.Destroy; begin WriteLn('Destroy'); inherited; end; procedure TFoo.FooFoo; begin WriteLn('Foooo! :)'); end; //Чтобы была область видимости procedure DoFoo; var Foo: IFoo; begin Foo := TFoo.Create; Foo.FooFoo; end; begin DoFoo; ReadLn; end. |
Сообщ.
#104
,
|
|
|
Цитата best_lamer @ Ho Im если пользоваться твоим (классическим) факториалом тогда максимальный факториал для Python равен 3628799! для факториала через лямда форму (по моему) 993! предел... Странно надо разобраться почему так. ![]() Питон не делает оптимизации хвостовых вызовов. |
Сообщ.
#105
,
|
|
|
Цитата Romkin @ Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком ![]() ![]() ![]() ![]() type MyClass = class ... end; function my_func: MyClass; begin result := MyClass.Create(); end; procedure my_func2(mc1,mc2,mc3: MyClass); begin ... end; var t1,t2,t3: MyClass; begin t1 := my_func; t2 := my_func; t3 := my_func; my_func2(t1,t2,t3); t1.Free; t2.Free; t3.Free; end. Т.е., --- почувствуйте себя ассемблером (в том смысле, что надо вручную разворачивать выражения так, чтобы не было вложенных вызовов функций). Цитата Romkin @ Или мне, по традиции, привести полное консольное приложение? ![]() Дельфы под рукой нету, нельзя ли показать вывод от этого приложения? Цитата Romkin @ type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; Да, это "очень удобно и немногословно". А как у этой штуки с наследованием --- ведь TInterfacedObject --- это класс, не так ли? А это уже не даст отнаследовться от других классов. Так что, как ни крути, а будет неудобно. |