Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизГалерея красивого кода Найти похожие ветки
← →
Igorek © (2004-05-18 17:34) [0]Кидайте кто что красивого видел.
Вот я сегодня такое написал (мне понравилось):
if not Left then
if not Top then
if not Right then
if not Bottom then
if not Back then
if not Straight then
Error("Помилка при визначенні напрямку руху");
← →
Игорь Шевченко © (2004-05-18 17:38) [1]
> if not Left then
> if not Top then
> if not Right then
> if not Bottom then
> if not Back then
> if not Straight then
if not (Left or Top or Right or Bottom or Back or Straight) then
?
← →
ZrenBy (2004-05-18 17:42) [2]Проскальзывало тут когда-то
n[i]=(Z-=(n[i++]=(Z-=(n[i++]=(Z-=(n[i++]=(Z-=(n[i++]=(Z-=(n[i++]=Z/I)*I)/J)*J)/K)*K)/L)*L)/O)*O)
← →
Просто Вася (2004-05-18 17:45) [3]Красиво и серьезно,но не работает, правда это не delphi
create proc sp_free_file_space @file_name varchar(255)=null,
@file_spec varchar(255)=null,@freespace_limit int =1024
as
--*
--Процедура для оценки свободного пространства в заданном файле (Кбайт)
--*
declare @fs int,@file int
declare @freespace int,@size int
declare @hr int
declare @src varchar(255),@desc varchar(255)
declare @char_freespace varchar(20),@char_freespace_limit varchar(20)
select @fs=null,
@file=null
exec @hr=sp_OACreate "Scripting.FileSystemObject",@fs out
if @hr<>0
begin
exec sp_OAGetErrorInfo @fs,@src out,@desc out
select hr=convert(varbinary(4),@hr),Source=@src,Description=@desc
goto destroy_objects
end
exec @hr=sp_OAmethod @fs,"GetFile",@file out,@file_spec
if @hr<>0
begin
exec sp_OAGetErrorInfo @fs,@src out,@desc out
select hr=convert(varbinary(4),@hr),Source=@src,Description=@desc
goto destroy_objects
end
exec @hr=sp_OAGetProperty @file,"Size",@size out
if @hr<>0
begin
exec sp_OAGetErrorInfo @fs,@src out,@desc out
select hr=convert(varbinary(4),@hr),Source=@src,Description=@desc
goto destroy_objects
end
set @freespace=@size/1024-(select fileproperty(@file_name,"SpaceUsed")*8)
set @char_freespace=cast(@freespace as varchar(20))
set @char_freespace_limit=cast(@freespace_limit as varchar(20))
if (@freespace<@freespace_limit)
raiserror(60002,10,1,@file_spec,@char_freespace,@char_freespace_limit)
with log
destroy_objects:
if @file is not null
begin
exec @hr=sp_OAGetErrorInfo @file,@src out,@desc out
select hr=convert(varbinary(4),@hr),Source=@src,Description=@desc
end
if @fs is not null
begin
exec @hr=sp_OADestroy @fs
if @hr<>0
begin
exec sp_OAGetErrorInfo @fs,@src out,@desc out
select hr=convert(varbinary(4),@hr),Source=@src,Description=@desc
end
end
return(0)
go
← →
Ega23 © (2004-05-18 17:49) [4]Игорь Шевченко © (18.05.04 17:38) [1]
Может AND, а не OR?
← →
Соловьев © (2004-05-18 17:54) [5]
> 4] Ega23 © (18.05.04 17:49)
not or = and
← →
Ega23 © (2004-05-18 17:56) [6]Соловьев © (18.05.04 17:54) [5]
Точно... not я впереди как-то не заметил... сорри за "наезд"
← →
Aldor © (2004-05-18 21:34) [7]Из красивого: функция возвращает количество бит в двоичной записи числа
int BitCount(int num)
{
for (int count = 0; num; count++)
num &= num - 1
}
← →
nikkie © (2004-05-18 21:46) [8]>Aldor
а может, проще сразу num = 0? и точку с запятой поставить. и return какой-нибудь.
← →
Игорь Шевченко © (2004-05-18 21:52) [9]Ega23 © (18.05.04 17:49)
Вообще-то теорема Де Моргана...
← →
nikkie © (2004-05-18 22:07) [10]>[7] Aldor
сообразил... нужен
return count;
да, красиво. но медленно... :))
а можно быстро, но очень некрасиво :))
← →
Aldor © (2004-05-18 22:28) [11]Aldor © (18.05.04 21:34) [7]
В описании ошибка:
Из красивого: функция возвращает количество единиц в двоичной записи числа
nikkie ©
да, return count забыл.
Если честно, до сих пор руки не доходят разобрать почему результом является количество бит - это ж надо до такого додуматься.
> а можно быстро, но очень некрасиво :))
??! В этой реализации количество операций равно числу единиц в битовом предствлении - куда уж быстрее?
← →
Gero © (2004-05-18 22:33) [12]
> да, красиво. но медленно... :))
Красота требует жертв :)
← →
nikkie © (2004-05-18 22:41) [13]??! В этой реализации количество операций равно числу единиц в битовом предствлении - куда уж быстрее?
гы... :)
добро пожаловать в ветку "Как можно в байте биты поменять местами?"
http://delphimaster.net/view/1-1084882106/
← →
nikkie © (2004-05-18 22:53) [14]Если честно, до сих пор руки не доходят разобрать почему результом является количество бит
на самом деле просто все... если у num последний двоичный разряд 1, то
num &= num - 1;
его обнуляет. если num в двоичном виде выглядит как ...10000, то num - 1 будет ...01111. и опять
num &= num - 1;
обнуляет последний значащий бит.
← →
Sergey Masloff (2004-05-18 22:57) [15]nikkie © (18.05.04 22:41) [13]
>добро пожаловать в ветку "Как можно в байте биты поменять >местами?"
Добро пожаловать в книгу Hacker"s Delight by Henry Warren. И байты местами менять и количество единичных и еще пара тысяч подобных алгоритмов. Слово хакер тут в первоначальном смысле а не из области малолетних придурков которых сейчас так почему-то называть стали. Я слышал ее сейчас на русский перевели
← →
Aldor © (2004-05-19 06:08) [16]nikkie © (18.05.04 22:41) [13]
> http://delphimaster.net/view/1-1084882106/ [14] ?
:)))))))
← →
Dmitriy O. © (2004-05-19 09:11) [17]А вот мой красивый код.
procedure TMyform.AzakExecute(Sender: TObject);
begin
tstrelka.First;
tstrelkan.Value;
while not tstrelka.Eof do begin // найдем пересечения
if (tstrelkay1.Value>=list1.Top-idiag1.Top)and (tstrelkay5.Value<=list1.Top-idiag1.Top)
and (tstrelkavid.Value=7) // ест пер на кор стр
then begin
idiag1.Canvas.TextOut(tstrelkax4.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2) ,list1.Top-idiag1.Top-8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
idiag1.Canvas.TextOut(tstrelkax4.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list1.Top-idiag1.Top+8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
end;
if (tstrelkay1.Value<=list1.Top-idiag1.Top)and (tstrelkay3.Value>=list1.Top-idiag1.Top)
and ((tstrelkavid.Value=4) or (tstrelkavid.Value=5) or(tstrelkavid.Value=6)or(tstrelkavid.Value=11)or(tstrelkavid.Value=9)or(tstrelkavid.Value=8)) // ест пер на кор стр
then begin
idiag1.Canvas.TextOut(tstrelkax2.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list1.Top-idiag1.Top-8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
idiag1.Canvas.TextOut(tstrelkax2.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list1.Top-idiag1.Top+8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
end;
if (tstrelkay1.Value>=list2.Top-idiag1.Top)and (tstrelkay5.Value<=list2.Top-idiag1.Top)
and (tstrelkavid.Value=7) // ест пер на кор стр
then begin
idiag1.Canvas.TextOut(tstrelkax4.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2) ,list2.Top-idiag1.Top-8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
idiag1.Canvas.TextOut(tstrelkax4.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list2.Top-idiag1.Top+8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
end;
if (tstrelkay1.Value<=list2.Top-idiag1.Top)and (tstrelkay3.Value>=list2.Top-idiag1.Top)
and ((tstrelkavid.Value=4) or (tstrelkavid.Value=5) or(tstrelkavid.Value=6)or(tstrelkavid.Value=11)or(tstrelkavid.Value=9)or(tstrelkavid.Value=8)) // ест пер на кор стр
then begin
idiag1.Canvas.TextOut(tstrelkax2.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list2.Top-idiag1.Top-8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
idiag1.Canvas.TextOut(tstrelkax2.Value-trunc(idiag1.Canvas.TextWidth(tstrelkaobiect.Value+inttostr(tstrelkan.Value))/2), list2.Top-idiag1.Top+8,tstrelkaobiect.Value+inttostr(tstrelkan.Value));
end;
tstrelka.Next;
end;// while
end;
← →
Gero © (2004-05-19 09:22) [18]
> Dmitriy O. © (19.05.04 09:11)
Круто. Но мне кажется, что так он будет еще красивее выглядеть:
PRoCEdURE TMYfORm.aZakeXECUTe(SEnDer: tOBJeCt);beGin tSTrElka.fIRst; TstrelKAn.vALue;
WhILE noT TStrElKa.Eof DO BeGiN if (tstRelKaY1.VAlUE>=liSt1.toP-iDIAG1.ToP)aND (TstrELKAy5.vaLuE<=lIsT1.TOP-IDiAg1.TOp)
and (tsTRelkaViD.vAlUE=7) thEN bEGIN
IdiaG1.CANvAs.TExTOUT(tSTreLKax4.value-trUNC(iDiaG1.CaNVas.texTwIdTh(tstRElKAObiEct.VaLue+INTtoSTr(tstRElkAN.vALUe))/2) ,lisT1.TOP-IdiAG1.tOP-8,TstRELKaObieCt.VALue+iNTtOstr(tStRELkaN.VALue)); IDIag1.CanvAs.tExtOUt(tsTrELKAx4.vaLUE-tRUNc(iDIAg1.CAnvas.tEXtWiDtH(TsTrelKaObIECT.VALUe+iNtTOsTr(tStrElKaN.VaLue))/2), LIst1.toP-idIag1.TOp+8,tsTrELKaoBIECt.vaLue+InTtostr(tstRElKan.valUE)); enD;
iF (tSTReLKAY1.VALUE<=LiST1.tOP-iDiAG1.toP)AND (TStRElkaY3.vAlue>=lisT1.tOP-idIAG1.TOP)
AnD ((TsTreLKaVid.vaLue=4) OR (TsTRELkAVId.ValuE=5) OR(TSTRelKAvId.vAlUe=6)oR(tsTRELkaVid.vaLue=11)Or(tSTrELKaViD.Value=9)Or(tStRelKAvId.VAlUE=8)) tHen BEGIn
IdiAG1.caNvAs.TExTouT(tstRElkaX2.vALue-TrUNc(iDIaG1.CaNvAS.TExTwidTh(tStRElkAOBiect.VAlUe+inttOSTR(tSTReLkan.valUE))/2), lISt1.tOp-IDiAG1.toP-8,tSTRELKaObIECT.vaLUe+inTtoStR(TSTreLKan.vaLuE)); IdIag1.CanvAs.TeXToUT(TSTRElKAx2.VALUe-trUNc(IdiAg1.CANVAS.texTWiDTH(tSTreLKaObIeCT.ValUE+InTToStR(tSTRELKaN.valuE))/2), LIsT1.top-IdIAg1.toP+8,tStRelkAobIECt.VALuE+INtTOsTr(TSTReLKan.Value)); enD;If (tStRelKAY1.vAlUE>=lisT2.top-IdIAg1.TOp)anD (TstRelkay5.VAlUe<=lISt2.top-IDiaG1.toP)AND (tSTReLkAvId.valUE=7) TheN bEGiN
IdIAg1.CanvaS.TextOUT(TstRElkaX4.VaLUe-TRUnc(IDiag1.cAnVAs.tExTwIDth(TStRElkaoBIECt.vAlUE+iNTtostR(tStRELKaN.VAluE))/2) ,lIsT2.Top-iDIAG1.TOp-8,tStReLkAobIeCt.vAlUE+intTOStR(tstRElKan.VALuE)); IdiaG1.CaNVas.TEXtout(tsTreLKaX4.VAlUE-TRuNc(IdiaG1.CANVaS.TEXTWIDtH(TsTRElkAoBiect.ValUE+InTtoStr(tsTRelKan.VaLuE))/2), LIst2.Top-iDiaG1.Top+8,TStrelKaobieCT.VAlUe+InTtostR(tstRElkaN.ValUE));
End; iF (tStrelKay1.vALUe<=lisT2.toP-iDiag1.top)And (tsTrELKaY3.vALUE>=LIsT2.top-IdiaG1.TOp) AND ((TsTRELkAVID.vaLUe=4) or (tSTrELkaVID.VALUe=5) or(TsTRELKaVID.VaLue=6)oR(TstRELKaVid.vaLUe=11)OR(tstRelkAVid.valUe=9)oR(TsTrelkAViD.VALue=8)) BEGIN
IDiAG1.CaNvAs.tExTOut(tstrelkaX2.vALUE-TrUNC(IDIaG1.CANvaS.TEXtwIdTH(TstreLKaObIeCT.valuE+INttOSTr(tStReLkAn.VAluE))/2), LIsT2.toP-idiaG1.TOP-8,tSTRelKaoBIECt.Value+InTTosTr(tSTRelkan.VaLue)); iDIAg1.CaNvAs.textoUT(tsTRELKAx2.vaLue-TRUnc(idIaG1.cANVAs.textwidTh(TSTRElKAObiEct.VaLuE+inTTostR(TstRElKan.vaLuE))/2), liST2.TOp-IDiag1.TOp+8,TsTrElKaObIEcT.VaLuE+inttosTr(tStreLKAn.ValuE));ENd;TstReLKA.neXT;eND;enD;
Прекрасно, не правда ли?
← →
Nikolay M. © (2004-05-19 09:28) [19]
> Dmitriy O. © (19.05.04 09:11) [17]
Прекрати глумиться :)))))
Может, ты скоро будешь писать посты в духе "а фот ищо десйать строк майего супер-красиффово кода"? Хотя, конечно, извращения над бедным Паскалем не так режут глаза, как выворачивание наизнанку многострадального русского. Но если бы это видел бедный Никлаус Вирт...
:)
← →
panov © (2004-05-19 09:55) [20]Удалено модератором
← →
panov © (2004-05-19 09:56) [21]Удалено модератором
Примечание: Не публикуй без спроса (Adder)
← →
Jeer © (2004-05-19 10:16) [22]panov © (19.05.04 09:56) [21]
Ага, это из разряда "Написать-то я написал и даже работает, но как ?":)))
← →
Игорь Шевченко © (2004-05-19 10:19) [23]
/*
* Program to compute an approximation of pi
* by Brian Westley, 1988
* (requires pcc macro concatenation; try gcc -traditional-cpp)
*/
#define _ -F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
← →
wicked © (2004-05-19 12:16) [24]
> Игорь Шевченко © (19.05.04 10:19) [23]
гых.... додуматься же до такого... :)
> panov © (19.05.04 09:56) [21]
хммм... код красив...
но вместо
> *Text++=CONVERT[*Buffer >> 4];
желательно бы писать
> *Text++=CONVERT[(*Buffer >> 4) & 0x0f];
иначе на настройках компилятора по умолчанию и *Buffer > 0x80 мы получим прекрасный вылет за границы массива CONVERT...
← →
panov © (2004-05-19 12:22) [25]>wicked © (19.05.04 12:16) [24]
*Buffer >> 4 не может быть больше 0x0F в любом случае, что не превышает размерности массива.
← →
Романов Р.В. © (2004-05-19 12:36) [26]Такое впечатление что на паскале нельзя написать красивый код
← →
wicked © (2004-05-19 12:42) [27]> panov © (19.05.04 12:22) [25]
может, поскольку по умолчанию в си тип char является signed... поэтому если *Buffer > 0x80 (или *Buffer < 0, что более правильно в данном случае), то всякий порядочный компилятор поставит там команду sar, а не shl - а арифметический сдвиг копирует значения старшего бита... например (signed)0xa0 >> 1 будет равно (signed)0xd0, а (unsigned)0xa0 >> 1 будет равно (unsigned)0x50...
код красивый, и 100% рабочий при условии, что компилятору сказано, что тип char является unsigned - у борландовских компиляторов есть такая опция....
вот такие мои соображения...
← →
Игорь Шевченко © (2004-05-19 12:51) [28]Романов Р.В. © (19.05.04 12:36)
Можно. Например, операцияin
выглядит красиво по сравнению с ее имитацией на других языках.if C in ["A..N","P..Z"]
← →
panov © (2004-05-19 13:14) [29]>wicked © (19.05.04 12:42) [27]
Спасибо за замечание... КОд-то как раз нужно использовать в промышленной программе, поэтому надо исправить-)
← →
pasha_golub © (2004-05-19 14:02) [30]Игорь Шевченко © (19.05.04 10:19) [23]
Елы-палы, да объясните мне что это за код. :-)
ЗЫ Слышал, что алгоритмом Монте-Карло зовется. Так ли это?
← →
[lamer]Barmaglot © (2004-05-19 14:06) [31]И мои 3 копейки, мне понравился вот этот мой код...
function GetFullFileName(FileName: string): string;
var
ppshf : IShellFolder;
lpItemID : PItemIDList;
NumChars : Cardinal;
Flags : Cardinal;
s : array[0..MAX_PATH] of Char;
P : PWideChar;
begin
NumChars:=Length(FileName);
Flags:=SFGAO_FILESYSTEM;
SHGetDesktopFolder(ppshf);
P:=StringToOleStr(FileName);
ppshf.ParseDisplayName(Application.Handle,nil,P,NumChars,lpItemID,Flags);
ShGetPathFromIDList(lpItemID, s);
SetString(Result,s,StrLen(s));
GlobalFreePtr(lpItemID);
end;
← →
Rule (2004-05-19 14:15) [32]//panov © (19.05.04 09:55) [20]
//
//Удалено модератором
во прикол, модераторы сами себя рубят :)
← →
Alx2 © (2004-05-19 18:27) [33]>Примечание: Не публикуй без спроса (Adder)
Было бы чего...
← →
YurikGl © (2004-05-19 19:26) [34]if FTimeD.wDay<10 then st2:=#9+"0"+IntToStr(FTimeD.wDay)+"."
else st2:=#9+IntToStr(FTimeD.wDay)+".";
if FTimeD.wMonth<10 then st2:=St2+"0"+IntToStr(FTimeD.wMonth)+"."
else st2:=St2+IntToStr(FTimeD.wMonth)+".";
if FTimeD.wYear<10 then st2:=St2+"0"+IntToStr(FTimeD.wYear)+" "
else st2:=St2+IntToStr(FTimeD.wYear)+" ";
if FTimeD.wHour<10 then st2:=St2+"0"+IntToStr(FTimeD.wHour)+":"
else st2:=St2+IntToStr(FTimeD.wHour)+":";
if FTimeD.wMinute<10 then st2:=St2+"0"+IntToStr(FTimeD.wMinute)+#9
else st2:=St2+IntToStr(FTimeD.wMinute)+#9;
← →
Igorek © (2004-05-19 19:37) [35]Вот еще один мой кусок:
AItem.Enabled :=
(AIndex = cEditPageEditor) or
(AIndex = cEditRouter) or
(AIndex = cEditNewPage) or
(AIndex = cEditDefault) or
((AIndex = cEditSelectAllPages) and (PageCount > 0)) or
((AIndex = cEditTest) and (GetParentForm(Wizard) <> nil)) or
((AIndex = cEditDeleteCurrent) and (CurrentPage <> nil)) or
(AIndex = cEditFirst) or
(AIndex = cEditLast) or
(
(AIndex = cEditPrevious) or (AIndex = cEditNext)) and
(CurrentPage <> nil) and
(PageCount > 1) and
(
((AIndex = cEditPrevious) and (CurrentPageIndex <> 0)) or
((AIndex = cEditNext) and (CurrentPageIndex <> PageCount - 1)
)
);
← →
Adder © (2004-05-19 19:39) [36]>Alx2 © (19.05.04 18:27) [33] Вот именно - ничего, что стоило бы показывать.
← →
wicked © (2004-05-19 19:46) [37]хмм... а может кому то нравится, что любимая женщина делает, а?....
всё, молчу, молчу... :)
← →
Mim1 © (2004-05-19 20:00) [38]Всегда жутко хочется запихнуть в case строки, ан ниизя :(
← →
Verg © (2004-05-19 20:05) [39]
> [37] wicked © (19.05.04 19:46)
> хмм... а может кому то нравится, что любимая женщина делает,
> а?....
Нет, конечно, большинство ненавидят, что любимая женщина делает.
Ну всякое бывает, и извращенцы всякие, которым нравится....
А вообще... ты сам-то понял что сказал?
← →
wicked © (2004-05-19 20:12) [40]
> Verg © (19.05.04 20:05) [39]
каждый думает в меру своей распущенности...
я не считаю, что сказал что-то неприличное, а если так сочтет Adder, то пусть она и упрекнет...
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.034 c