Текущий архив: 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]Незнаю, достойно ореха или нет, но вчера написал такое:
Мне, почему-то так красивее показалось, чем if-then-else. Сам не знаю почему.
var
ExReturnCheck: boolean;
begin
...
case ExReturnCheck of
False: CashDriver.AddJob(cjPrintCheck, CashCheck, CheckPrinted);
True: begin
...
end;
end;
...
end;
← →
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