- 1
<noscript><meta http-equiv="refresh" content="0; URL=/badbrowser.php"></noscript>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 95
+145
<noscript><meta http-equiv="refresh" content="0; URL=/badbrowser.php"></noscript>
Паша Дура запретил отрубать его говноскрипты, теперь все должны смотреть на контакт, засранный скриптами.
+92
I:=1;
while I<=High(Sockets) do
begin
if FD_IsSet(Sockets[I],FDSet) then
if Recv(Sockets[I],…)<=0 then
begin
// Связь разорвана, надо закрыть сокет
// и удалить его из массива
CloseSocket(Sockets[I]);
for J:=I to High(Sockets)-1 do
Sockets[J]:=Sockets[J+1];
Dec(I);
SetLength(Sockets,Length(Sockets)-1)
end
else
begin
// Получены данные от клиента, надо ответить
Send(Sockets[I],…)
end;
Inc(I)
end;
На первый взгляд может показаться странным, почему для перебора элементов массива используется цикл while, а не for. Но в дальнейшем мы увидим, что размер массива во время выполнения цикла может изменяться. Особенность же цикла for заключается в том, что его границы вычисляются один раз и запоминаются в отдельных ячейках памяти, и дальнейшее изменение значений выражений, задающих эти границы, не изменяет эти границы. В нашем примере это приведёт к тому, что в случае уменьшения массива цикл for не остановится на реальной уменьшившейся длине, а продолжит цикл по уже не существующим элементам, что приведёт к трудно предсказуемым последствиям. Поэтому в данном случае лучше использовать цикл while, в котором условие продолжения цикла полностью вычисляется при каждой его итерации.
+114
TMapObj = record
Size: integer;
Selected, Valid: boolean;
case Kind: TKind of
// дохрена пропущено
koTxr: (
TxrFileName: string [31];
tLast: integer;
TxrCorrect: boolean;
LODS: array [0 .. 3] of TBitmap;
Pixel: TBitmap;
);
koItem: (
Location: TLocation;
ItemEndSel: boolean; // выделена ли для перетаскивания
TimeBeforeReborn: integer; // времени до восстановления
DescrIndex: integer; // индекс описателя
Rotation: integer;
TeamColor, EnemyColor: integer;
iLast: integer;
CannotGet: boolean;
case TKindItem of
kiWeapon: (
iwpFallen: boolean;
iwpBulletsLeft: integer;
iwpState: TWeaponState;
);
kiHuman: (
ihState: integer;
);
kiFlag: (
ifState: TFlagState;
ifHome: integer;
);
kiScepter: (
isState: TScepterState;
);
);
koItemDescr: (
ItemFileName: string [31]; // файл с описанием предмета
idLast: integer;
ItemCorrect: boolean;
ItemName: string [31]; // название предмета
SpriteIndName: string [31];
SpriteInd: integer; // картинка
RebornTime: integer; // время перерождения
case KindItem: TKindItem of
kiHealth: (
hlCount: integer;
);
kiShield: (
shCount: integer;
);
kiFlag: (
flTeam: integer;
);
kiSL: (
slTeam: integer;
);
kiAmmo: (
amCount: integer;
amIndex: integer; // тип патрона
);
kiWeapon: ( // всё про пушку
wpAmmoIndex: integer; // тип патронов
wpKeyNumber: integer; // кнопка на клавиатуре
wpBulletsInCharge: integer; // патронов в обойме
wpInitBullets: integer; // изначальное число патронов
wpMaxBullets: integer; // максимальное число патронов
wpShotBullets: integer; // патронов за раз
wpReloadTime, wpShotTime: integer; // время перезарядки, скорострельность (скорострельность в миллисекундах)
wpDispersion, wpKickBack: integer; // разброс самого оружия и отдача
wpBasic: integer; // базовое ли
wpDamage: integer; // урон
wpDistance, wpBulletSpeed: integer; // предельная дальность выстрела, скорость пуль
wpSound: integer; // номер ноты
wpColor: TColor; // цвет
);
);
koBullet: (
bLast: integer;
BLocP: array [0 .. 1] of TPoint;
BLocRoom: integer;
BVector: TPoint; // нормализованный вектор направления
BDamage: integer; // параметры, которые надо передавать в процедуру создания пули
BSpeed: integer;
BLengthLeft: integer;
BOwner: integer;
Bn, Bm: TDistFunc;
BColor: TColor;
);
end;
Меня попросили показать, до чего может довести структурное программирование при отрицании ООП. Разветвлённая структура с кучей ветвей.
Для лучшего эффекта обмазываться вместе с http://govnokod.ru/4249
+142
В связи с минусаторной атакой в говнокоде 5186, просьба.
Страйкер, заблокируй пользователей с номерами
http://govnokod.ru/user/2689 -
http://govnokod.ru/user/2703
(весь диапазон оккупировали тролли-виртуалы)
И ИП-адрес, с которого эти пользователи логинились.
+125
int function(void) {
static int i, state = 0;
switch (state) {
case 0: /* start of function */
for (i = 0; i < 10; i++) {
state = 1; /* so we will come back to "case 1" */
return i;
case 1:; /* resume control straight after the return */
}
}
}
Нестандартное применение свитча.
Тут оно нафиг не нужно.
Источник: http://www.gamedev.ru/code/forum/?id=142536
+225
; Program entry point
00401000: push 0070F001
00401005: call 0040100B
0040100A: ret
0040100B: ret
Суровый старт зашифрованного самораспаковывающегося архива. Так хитро передаётся управление на 0070F001 (за сегмент кода).
+92
unit uncrt;
interface
procedure ClrScr;
procedure Sound(Hz: Word);
procedure NoSound;
procedure TextColor(Color: Byte);
procedure TextBackground(Color: Byte);
var
TextAttr: Byte; { Для особо продвинутых случаев }
implementation
procedure ClrScr;
begin end;
procedure Sound(Hz: Word);
begin end;
procedure NoSound;
begin end;
procedure TextColor(Color: Byte);
begin end;
procedure TextBackground(Color: Byte);
begin end;
end.
Вас достала школота, раскрашивающая свои бибикающие программы?
Вам поможет этот модуль!
+87
var
s:string;
function f(s:string):string;
var
i:integer;
s1:string;
begin
s1:=#13#10's:=''';
for i:=1to length(s)do begin
if s[i]=#13then
s1:=s1+'''#13#10+'#13#10+''''
else if s[i]=''''then
s1:=s1+''''''
else if s[i]<>#10 then
s1:=s1+s[i];
f:=s1+''';'#13#10+
's:=s+f(s);'#13#10+
'write(s);'#13#10+
'close(output);'#13#10+
'end.';
end;
end;
begin
assign(output,'s.txt');
rewrite(output);
s:='var'#13#10+
's:string;'#13#10+
'function f(s:string):string;'#13#10+
'var'#13#10+
'i:integer;'#13#10+
's1:string;'#13#10+
'begin'#13#10+
's1:=#13#10''s:='''''';'#13#10+
'for i:=1to length(s)do begin'#13#10+
'if s[i]=#13then'#13#10+
's1:=s1+''''''#13#10+''#13#10+'''''''''#13#10+
'else if s[i]=''''''''then'#13#10+
's1:=s1+'''''''''''''#13#10+
'else if s[i]<>#10 then'#13#10+
's1:=s1+s[i];'#13#10+
'f:=s1+'''''';''#13#10+'#13#10+
'''s:=s+f(s);''#13#10+'#13#10+
'''write(s);''#13#10+'#13#10+
'''close(output);''#13#10+'#13#10+
'''end.'';'#13#10+
'end;'#13#10+
'end;'#13#10+
'begin'#13#10+
'assign(output,''s.txt'');'#13#10+
'rewrite(output);';
s:=s+f(s);
write(s);
close(output);
end.
Нарыл свой высер на тему программы, выводящей свой текст.
+121
const
Koeff: array [TTPKind] of record //
BC: integer;
Border: array [0 .. 4] of extended;
C: array [0 .. 3, 0 .. 10] of extended;
end = (
(BC: 4; Border: (-0.226, 1.923, 11.361, 19.739, 21.103); C: (
(0, 1.8891380E2, -9.3835290E1, 1.3068619E2, -2.2703580E2, 3.5145659E2, -3.8953900E2, 2.8239471E2, -1.2607281E2, 3.1353611E1, -3.3187769),
(1.334584505E1, 1.472644573E2, -1.844024844E1, 4.031129726, -6.249428360E-1, 6.468412046E-2, -4.458750426E-3, 1.994710149E-4, -5.313401790E-6, 6.481976217E-8, 0),
(-8.199599416E1, 1.553962042E2, -8.342197663, 4.279433549E-1, -1.191577910E-2, 1.492290091E-4, 0, 0, 0, 0, 0),
(3.406177836E4, -7.023729171E3, 5.582903813E2, -1.952394635E1, 2.560740231E-1, 0, 0, 0, 0, 0, 0)
) // R
),
(BC: 4; Border: (-0.235, 1.874, 10.332, 17.536, 18.694); C: (
(0, 1.84949460E2, -8.00504062E1, 1.02237430E2, -1.52248592E2, 1.88821343E2, -1.59085941E2, 8.23027880E1, -2.34181944E1, 2.79786260, 0),
(1.291507177E1, 1.466298863E2, -1.534713402E1, 3.145945973, -4.163257839E-1, 3.187963771E-2, -1.291637500E-3, 2.183475087E-5, -1.447379511E-7, 8.211272125E-9, 0),
(-8.087801117E1, 1.621573104E2, -8.536869453, 4.719686976E-1, -1.441693666E-2, 2.081618890E-4, 0, 0, 0, 0, 0),
(5.333875126E4, -1.235892298E4, 1.092657613E3, -4.265693686E1, 6.247205420E-1, 0, 0, 0, 0, 0, 0)
) // S
),
(BC: 2; Border: (0.291, 2.431, 13.820, 0, 0); C: (
(9.8423321E1, 6.9971500E2, -8.4765304E2, 1.0052644E3, -8.3345952E2, 4.5508542E2, -1.5523037E2, 2.9886750E1, -2.4742860, 0, 0),
(2.1315071E2, 2.8510504E2, -5.2742887E1, 9.9160804, -1.2965303, 1.1195870E-1, -6.0625199E-3, 1.8661696E-4, -2.4878585E-6, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
) // B
),
(BC: 3; Border: (-8.095, 0, 42.919, 69.553, 0); C: (
(0, 1.9528268E1, -1.2286185, -1.0752178, -5.9086933E-1, -1.7256713E-1, -2.8131513E-2, -2.3963370E-3, -8.3823321E-5, 0, 0),
(0, 1.978425E1, -2.001204E-1, 1.036969E-2, -2.549687E-4, 3.585153E-6, -5.344285E-8, 5.099890E-10, 0, 0, 0),
(-3.11358187E3, 3.00543684E2, -9.94773230, 1.70276630E-1, -1.43033468E-3, 4.73886084E-6, 0, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
) // J
),
(BC: 2; Border: (-5.603, 0, 20.872, 0, 0); C: (
(0, 2.5949192E1, -2.1316967E-1, 7.9018692E-1, 4.2527777E-1, 1.3304473E-1, 2.0241446E-2, 1.2668171E-3, 0, 0, 0),
(0, 2.592800E1, -7.602961E-1, 4.637791E-2, -2.165394E-3, 6.048144E-5, -7.293422E-7, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
) // T
),
(BC: 2; Border: (-8.825, 0, 76.373, 0, 0); C: (
(0, 1.6977288E1, -4.3514970E-1, -1.5859697E-1, -9.2502871E-2, -2.6084314E-2, -4.1360199E-3, -3.4034030E-4, -1.1564890E-5, 0, 0),
(0, 1.7057035E1, -2.3301759E-1, 6.5435585E-3, -7.3562749E-5, -1.7896001E-6, 8.4036165E-8, -1.3735879E-9, 1.0629823E-11, -3.2447087E-14, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
) // E
),
(BC: 3; Border: (-5.891, 0, 20.644, 54.886, 0); C: (
(0, 2.5173462E1, -1.1662878, -1.0833638, -8.9773540E-1, -3.7342377E-1, -8.6632643E-2, -1.0450598E-2, -5.1920577E-4, 0, 0),
(0, 2.508355E1, 7.860106E-2, -2.503131E-1, 8.315270E-2, -1.228034E-2, 9.804036E-4, -4.413030E-5, 1.057734E-6, -1.052755E-8, 0),
(-1.318058E2, 4.830222E1, -1.646031, 5.464731E-2, -9.650715E-4, 8.802193E-6, -3.110810E-8, 0, 0, 0, 0),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
) // K
),
// тут ещё 6 типов было. (Пожалуйста, ограничьтесь 4000 символами.)
);
Фрагмент типичной программы для научных расчётов
+101
type
// смотрите, как не надо делать и почему придумали ООП
TProc = procedure;
TGoProc = function: boolean;
TSizeProc = function: integer;
TGetConfigProc = function: string;
TApplyConfigProc = procedure(SM: PStringMap);
TDeviceProc = record
InitControls: TProc;
MoveControls: TProc;
Go: TGoProc;
MaxH, MinH: TSizeProc;
GetConfig: TGetConfigProc;
ApplyConfig: TApplyConfigProc;
end;
const
DeviceProcs: array [TDevice] of TDeviceProc = (
(InitControls: ETR.InitControls; MoveControls: ETR.MoveControls; Go: ETR.Go; MaxH: ETR.MaxH; MinH: ETR.MinH; GetConfig: ETR.GetConfig; ApplyConfig: ETR.ApplyConfig),
(InitControls: TS_NSH.InitControls; MoveControls: TS_NSH.MoveControls; Go: TS_NSH.Go; MaxH: TS_NSH.MaxH; MinH: TS_NSH.MinH; GetConfig: TS_NSH.GetConfig; ApplyConfig: TS_NSH.ApplyConfig),
(InitControls: TS_IND.InitControls; MoveControls: TS_IND.MoveControls; Go: TS_IND.Go; MaxH: TS_IND.MaxH; MinH: TS_IND.MinH; GetConfig: TS_IND.GetConfig; ApplyConfig: TS_IND.ApplyConfig),
(InitControls: TP_NSH.InitControls; MoveControls: TP_NSH.MoveControls; Go: TP_NSH.Go; MaxH: TP_NSH.MaxH; MinH: TP_NSH.MinH; GetConfig: TP_NSH.GetConfig; ApplyConfig: TP_NSH.ApplyConfig),
(InitControls: TP_IND.InitControls; MoveControls: TP_IND.MoveControls; Go: TP_IND.Go; MaxH: TP_IND.MaxH; MinH: TP_IND.MinH; GetConfig: TP_IND.GetConfig; ApplyConfig: TP_IND.ApplyConfig)
);
Вот до чего доводит ненависть к ООП.
ОПП - это хорошо, ООП не надо ненавидеть.