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

Вниз

Примеры кода, достойные орехов.   Найти похожие ветки 

 
iZEN ©   (2005-11-30 20:51) [80]


> Суслик ©   (30.11.05 15:10) [79]

А если подумать хорошенько. То код выполняться будет не так.
searchGauge.setValue(...); не асинхронный, а это значит, что в обработчике commandAction мы получим не то что конкретный зависон на циклах, но и необновление компонента searchGauge.
По окончании работы commandAction, конечно же, searchGauge будет иметь значение 20.
Здесь по-хорошему нужна отдельная нить (что я и реализовал в нескольких вариантах, включая разработку отдельного небольшого/независимого от J2ME фреймворка. На будущее...).


 
Ученик чародея ©   (2005-12-01 04:16) [81]

procedure mura(var mura:mur;graph:algoritm);
label 1,2;
var
xored:byte;
i,j:byte;
Last_V:byte;
Last_i:byte;
Max_V:byte;
Code_V:Vector;
N_X:byte;
X:Vector;
X_Val:Vector;
begin
for i:=1 to graph.N_V do   {number peroxodow}
for j:=1 to graph.N_V do
if graph.links[i,j]=1 then
mura.N_max:=mura.N_max+1;
mura.N_Max:=mura.N_Max-graph.N_X;

{recode операторные вершины, условные вершины}
Last_V:=0;
for i:=1 to graph.N_V do
if (Graph.X_link[i]=0) then
begin
Last_V:=Last_V+1;
Code_V[i]:=Last_V;
end
else
Code_V[i]:=0;
Max_V:=Last_V;

{tablicha perehodow}
while mura.N_Last<>mura.N_Max do
begin
for i:=1 to graph.N_V do
begin
N_X:=0;
last_V:=i;
find_1(Graph,i,j);
2:
if j<>0 then
           if graph.X_Link[j]=0 then
                                begin
                                   mura.N_last:=mura.N_last+1;
                                   mura.dugi[mura.N_last].N_Vershini:=Last_V;
                                   mura.dugi[mura.N_last].N_Dir:=j;
                                   mura.dugi[mura.N_last].N_X:=N_X;
                                   mura.dugi[mura.N_last].X:=X;
                                   mura.dugi[mura.N_last].X_val:=X_Val;
                                   mura.dugi[mura.N_last].N_Y:=graph.N_Y;
                                   mura.dugi[mura.N_last].Y:=Graph.Y_Value[j{Last_V}];
                                   Del_1(Graph,i);
                                   goto 1;
                                end
           else
           begin
                last_i:=i;
                i:=j;
                N_X:=N_X+1;
                X[N_X]:=Graph.X_Link[i];
                find_1(Graph,i,j);

                if j=0 then
                begin
                del_1(graph,last_i);
                goto 1;
                end;

                X_Val[N_X]:=Graph.X_Value[i,j];
                goto 2;
           end;

end;
1:
end;

{transete to binary form}
for i:=1 to mura.N_Max do
begin
mura.dugi[i].N_Vershini:=code_V[mura.dugi[i].N_Vershini]-1;
mura.dugi[i].N_dir:=code_V[mura.dugi[i].N_dir]-1;

if mura.dugi[i].N_Vershini=Max_V-1 then
mura.dugi[i].N_Vershini:=0;

if mura.dugi[i].N_Dir=Max_V-1 then
mura.dugi[i].N_Dir:=0;
end;
{Max trigers}
Max_V:=Max_v-1;
mura.n_trig:=trunc(ln(Max_V)/ln(2)+1);

{trigers}
for i:=1 to mura.N_max do
begin

if mura.rs=1 then
begin
mura.dugi[i].S:=mura.dugi[i].N_dir;
xored:=mura.dugi[i].N_dir;
asm
mov al,xored
not al
mov xored,al
end;
mura.dugi[i].R:=xored;
end;

if mura.jk=1 then
begin
mura.dugi[i].K:=mura.dugi[i].N_dir;
xored:=mura.dugi[i].N_dir;
asm
mov al,xored
not al
mov xored,al
end;
mura.dugi[i].J:=xored;
end;

if mura.D=1 then
begin
mura.dugi[i].D:=mura.dugi[i].N_dir;
end;
end;

end;


 
Fay ©   (2005-12-01 04:34) [82]

Дословно не помню, но такой вот код выдал один мой бывший коллега, сказав "Мне так удобнее" (он про все свои перлы говорил такое):

case с of
 "0" : n := 0;
 "1" : n := 1;
 "2" : n := 2;
 "3" : n := 3;
 "4" : n := 4;
 "5" : n := 5;
 "6" : n := 6;
 "7" : n := 7;
 "8" : n := 8;
 "9" : n := 9;
end;


Ему-то м.б. и удобно, а я 2 минуты всматривался - искал нетривиальность 8)


 
Владислав ©   (2005-12-01 08:40) [83]


> Fay ©   (01.12.05 04:34) [82]


У нас так класс объектов проверяется :о) Знать бы, кому руки отрывать.


 
Piero   (2005-12-01 18:14) [84]

А видели когда нибудь Dfm файл на 40 000 строк, причем на форме почти все компаненты визуальные - вообще ничего найти нельзя
а более 1000 глобальных переменных, и все функции без параметров,... да это детский лепет , по сравнению с тем, что это чучуло вытворяет, с которым я работаю

все печатать не буду
комментариев = 0

var
 MainForm     : TMainForm;
 PPil         : TParamPil;
 PNav         : TParamNav;
 PBP,PBPASP   : TParamBP;
 TWP          : RecM;
 Marsh        : file of RecM;
 NavP         : RecN;
 fNav         : file of RecN;
 fPRG         : file of RecPR;
 pPRG         : RecPR;
 IndAM        : boolean;  
 IndNM        : boolean;  
 IndEM        : boolean;  
 IndWrt       : boolean;  
 IndOTI       : boolean;  
 ImPVO        : boolean;
 IndDSF       : boolean;
 IndFE        : boolean;  
 ReadAF       : boolean;
 ChASP        : boolean;
 IndLookAM    : boolean;
 isNew,IndNav,MULT,AOA: boolean;
 EPM,PPM,PVO,TIM,mtwM: boolean;
 IndDT,IndAb,indVIZ: boolean;
 PointC       : boolean;
 IndSP        : boolean;
 IndRSDNb     : boolean;
 SaveM        : boolean;
 isChDS       : boolean;
 dLUR         : boolean;  
 Marsh10      : boolean;
 IndESC       : boolean;
 isMTR        : boolean;  
 isPRGM       : boolean;
 isCFP        : boolean;
 isPntM       : boolean;
 tlo          : TLocateOptions;
 RegimN       : RegName;
 Pbord: PntC;
 CPT: real;
 CountMP,CodeO,NumP,TipMP,RegPVO,RazvN,StHr,Hmax,Hmin,
 IndFT,NZon,NReg,NCel,NFin,KFmn,KLgr,KLmn,Hkr,HkrL,  
 DlnFT,FR,HFT,VFT,Svet1,Uvet1,NumD,DelTim,CountL,ModeW,
 Hasp,Vasp,kodF,NonEr,CntAC,NumAF,MapStop,MK,Mskl,
 Hkta,HktaF,HktaL,Hnt,Hpb,NumB,PPMT,CodPB,PPMTPB,IndCRZ,
 NumOCP,CodeC,CodeOCP,Nocp,Hs,Hf,NumAS,numS,Vs,Vf,ResQ: integer;
 Xmrs,Ymrs,Bc,Lc,KFgr,KRlnd,BPM1,LPM1,BPM2,LPM2,Bfly,Lfly,Blnd,Llnd,
 Bpb,Lpb,Az,Dln,Vinos,Bobj,Lobj,Fmin,Lmin,Fmax,Lmax,BRl,LRl,
 dt1_3,dt2_3,dt3_3,dt4_3,dt1_10,dt2_10,Bocp,Locp,Bor,Lor: float;
 NUser,PWord,PasW1,PasW2,PasW3,NamAP,NamNav,NamPodv,NamPB,
 NamRegion,NamBPM,NamEPM,NamM,NAfl,NamLnk,comm,Cword,NamFAS,Tnv1: string;
 BordC: file of PntC;
 fMTW: file of MTWH;
 hMTW: MTWH;
 fChH: file of pChH;
 rChH: pChH;
 fChV: file of pChV;
 rChV: pChV;
//  MapC: TUsMap;
 Lb: LongBool;
 InfO,ComQ: TextFile;
 MasNumP,MasPC: array[1..31]of integer;
 MasNP324: array[1..9]of string;
 MasNNP324: array[1..9]of integer;
 Mas6: array[1..2,1..3]of integer;
 DecSep: Char;
 Fdat: file;
 Rec: TSearchRec;
 RecAS: STRAS;
 PARM: MTRBUILDPARM;

можно и кода кусок показать вам


 
Игорь Шевченко ©   (2005-12-01 18:19) [85]

Piero   (01.12.05 18:14) [84]

Человек учился на Фортране программировать ? Просто интересно...


 
iZEN_   (2005-12-01 18:21) [86]


> Piero   (01.12.05 18:14) [84]

Похоже на машинный декомпиленный код, который был перед этим сурово обфускачен. ;))


 
Uncle Archi ©   (2005-12-01 18:29) [87]

Это так, кусочек. человек сдавал курсовик.

IF (PrGomory="Y") OR (PrGomory="y") THEN PrGomory:="Y" ELSE PrGomory:="N";


И ещё из той же программы
ZN:
IF (Fm<>1) AND (Fm<>2) THEN
                        BEGIN
                         WRITELN("Нерпавильный ввод");GOTO ZN;
                        END;

Ну это так, пример использования Goto, когда можно без него.


 
Piero   (2005-12-01 18:32) [88]

Да с фортраном угадал


 
Игорь Шевченко ©   (2005-12-01 18:36) [89]

Piero   (01.12.05 18:32) [88]

Вторая попытка - человек в оборонке работал ?


 
Antonn ©   (2005-12-01 18:42) [90]

открыл один из своих проектов, когда еще только начинал и ужаснулся:
tmp_max:=trunc(now)-encodedate(1,1,2)+ encodedate(1,1,1);
tmp_max - TDateTime, нужно было получить дату днем раньше... ужас просто, нет бы IncDay использовать:)


 
PVOzerski ©   (2005-12-01 18:46) [91]

2Игорь Шевченко:
Третья попытка - этого человека зовут <Нужное вставить> :)


 
TUser ©   (2005-12-01 19:37) [92]


> Э-э-э... В первом и третьем посте?

Примеры из поста [0]. Очень хочу узнать где там ошибка. Сам примерно так пишу - что тут не правильно?


 
Владислав ©   (2005-12-02 08:26) [93]


> Примеры из поста [0]. Очень хочу узнать где там ошибка.
> Сам примерно так пишу - что тут не правильно?


Может это не понятно без контекста, конечно...

В процедуре procedure UpdateLength(var S: string; Len: integer);
кроме того, что реалок строки происходит N-ное количество раз, мне бы, например, еще и лениво было бы определять количество итераций цикла. Проще уж было бы сложить две строчки, исходную и пробельную. Разве нет?

В while FProgress.ModalResult = mrNone do Application.ProcessMessages;
Процессор бесполезно загружается в пустом цикле. Другие приложения начинают медленней работать.

В
if TThreadAccess(FThreadList[I]).Terminated then
 TBaseAsyncRunThread(FThreadList[I]).Free

Метод Terminate поточного класса в коде нигде не вызывался. В поточной функции свойство Terminated не проверялось. А приведенный кусок кода выполнялся в главном потоке приложения.

В if @MonitorProc <> @TfmMonitor.MonitorEvent then
Сравниваются 4 байта, т.е. только указатель на процедуру, а нужно еще сравнивать указатель на экземпляр класса, чей метод сравнивается.


 
Владислав ©   (2005-12-02 08:29) [94]

Впрочем, за пример 2 из поста [0] я уже не переживаю. Автор добавил Sleep(50) перед Application.ProcessMessages; :о)


 
TUser ©   (2005-12-02 08:37) [95]


> В процедуре procedure UpdateLength(var S: string; Len: integer);
>  
> кроме того, что реалок строки происходит N-ное количество
> раз, мне бы, например, еще и лениво было бы определять количество
> итераций цикла. Проще уж было бы сложить две строчки, исходную
> и пробельную. Разве нет?

Не факт. Такой код нормально читается. Если это сделано не в каком-то критичном по скорости месте (а обычно всякие такие строковые штуки нужны при выводе результата, что никак не критично в смысле скорости) - тогда нормальный код. У меня такие примерно функции работают в нескольких программах. Может это и не эталон.

> В
> if TThreadAccess(FThreadList[I]).Terminated then
>  TBaseAsyncRunThread(FThreadList[I]).Free
> Метод Terminate поточного класса в коде нигде не вызывался.
>  В поточной функции свойство Terminated не проверялось.
> А приведенный кусок кода выполнялся в главном потоке приложения.
>

Метод Terminate мог быть вызван в другом потоке. А то, что он в коде нигде не вызывался - из приведенного примера поонять нельзя, поэтому и возникают сомнения с ореховости. А даже если он нигде и не вызывается, то можно предположить, что автор кода думал о будущем - вдруг в появятся дополнительные потоки. Хотя, наверное, проще выставить FreeOnTerminare, но может быть и так надо - трудно сказать, что код не правильный, без точного знания того, что за задача решалась

Про другие примеры вопорсов нет. За разьяснения - спасибо..


 
Lamer@fools.ua ©   (2005-12-02 09:07) [96]

>процедуре procedure UpdateLength(var S: string; Len: integer);
... реалок строки происходит N-ное количество раз


Поддерживаю. К тому же название функции не соотвествует выполняемым ею действиям. Я бы переписал как-то так:
procedure ExpandWithSpaces(var S: String; const NewLength: Integer);
var
 OldLength: Integer;
begin
 OldLength := Length(S);
 if NewLength > OldLength then
 begin
   SetLength(S, NewLength);
   FillChar(S[OldLength + 1], NewLength - OldLength, #32);
 end;
end;


Или даже так:
function ExpandWithSpaces(const S: String; const NewLength: Integer): String;
var
 OldLength: Integer;
begin
 Result := S;
 OldLength := Length(Result);
 if NewLength > OldLength then
 begin
   SetLength(Result, NewLength);
   FillChar(Result[OldLength + 1], NewLength - OldLength, #32);
 end;
end;


 
wal ©   (2005-12-02 09:12) [97]

Незнаю, достойно ореха или нет, но вчера написал такое:

var
 ExReturnCheck: boolean;
begin
...
   case ExReturnCheck of
     False: CashDriver.AddJob(cjPrintCheck, CashCheck, CheckPrinted);
     True: begin
              ...
             end;
   end;
...
end;
Мне, почему-то так красивее показалось, чем if-then-else. Сам не знаю почему.


 
Lamer@fools.ua ©   (2005-12-02 09:18) [98]

>>wal ©   (02.12.05 09:12) [97]

>Незнаю, достойно ореха или нет
IMHO, достойно.  %)


 
12DFBDD   (2005-12-02 09:28) [99]

wal ©   (02.12.05 09:12) [97]
это называется переработал


 
Владислав ©   (2005-12-02 09:29) [100]


> Lamer@fools.ua ©   (02.12.05 09:18) [98]
> IMHO, достойно.  %)


ИМХО, не достойно. В case нет else :o)


 
Владислав ©   (2005-12-02 09:47) [101]


> Не факт. Такой код нормально читается. Если это сделано
> не в каком-то критичном по скорости месте (а обычно всякие
> такие строковые штуки нужны при выводе результата, что никак
> не критично в смысле скорости) - тогда нормальный код. У
> меня такие примерно функции работают в нескольких программах.
>  Может это и не эталон.


Ну вот видите, Вы пытаетесь предположить, как этот код будет работать. В следующем же абзаце Вы говорите о том, что автор мог чделать что-то на будущее. Так как же с этим будущим? Какое оно будет для этой процедуры? Возметесь делать прогнозы? ;)
А в конкретной ситуации такая процедура вызывалась большое количество раз в течении работы программы. Хотя и не в критичном по скорости участке кода.
Не возмусь судить, как влияет фрагментация памяти на работоспособность программы. А такая процедура именно этим и занимается.


> Метод Terminate мог быть вызван в другом потоке.


Это бы никак не повлияло бы на результат. Смотрите: "В поточной функции свойство Terminated не проверялось." Хотя вру. Я же сам и добавил вызов Terminate в основном потоке, когда нашел этот код. Тут же схлопотал AV, как и предполагал.
В контексте результата работы приведенного кода вот это: "автор кода думал о будущем" звучит, как верх оптимизма, я бы сказал.
Типа того: "Когда-нибудь моя программа заработает! Я в это верю!" :)

Сказанное, ясен пень, не в Ваш адрес. Я понимаю, что без контекста иногда трудно о чем то судить.


 
Sha ©   (2005-12-02 09:54) [102]

> Lamer@fools.ua ©   (02.12.05 09:07) [96]
> Или даже так:

function ExpandWithSpaces(const S: String; NewLength: Integer): String;
var
 OldLength: Integer;
begin
 OldLength:=Length(S);
 if NewLength<=OldLength then Result:=S
 else begin
   SetLength(Result,NewLength);
   Move(pointer(S)^,pointer(Result)^,OLdLength);
   FillChar(pchar(pointer(Result))[OldLength], NewLength-OldLength, #32);
 end;
end;


 
Lamer@fools.ua ©   (2005-12-02 10:22) [103]

>>Sha ©   (02.12.05 09:54) [102]

А так вообще "кульно и рульно" ©. Не считая форматирования кода :o)


 
Piero   (2005-12-02 10:37) [104]

Игорь Шевченко ©, да



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

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.035 c
1-1133421860
Zhekson
2005-12-01 10:24
2005.12.25
CheckBox в MessageDlg


14-1133758400
LordOfRock
2005-12-05 07:53
2005.12.25
И снова музыка


8-1121619696
SpyBoy
2005-07-17 21:01
2005.12.25
Мощный звук


14-1133423503
Mike Kouzmine
2005-12-01 10:51
2005.12.25
Новая победа демократии


3-1131359266
M@xim
2005-11-07 13:27
2005.12.25
Клиент - сервер