1. Pascal / Говнокод #5912

    +101

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    TLine = record
        X1, Y1, X2, Y2: smallint;
        Attr: array [0 .. 7] of byte;
      end;
    
    {rail:
        Attr[0]: Quality
        Attr[1]: ********
                 ||Weight of Station
                 ||10 = Station; 11 = Big Station
        Attr[2]: Count of passengers
        Real count = Attr[2] * (Attr[1] and $3F) / 63;
        Attr[3]: ****0100
                 ||||
                 |||for Selected
                 ||for "crossrail"
                 for MoveEndSel
      ===========================================
       bridge:
        Attr[0]: Quality
        Attr[1]: ********
                       ||
                       Z of ends
        Attr[2]:
        Attr[3]: ****1100
      ===========================================
       3d-object:
        Attr[0]: Number
        Attr[1-2]: RandSeed
        Attr[3]: ****1111
      ===========================================
      Attr[4..7] reserved, but not used
    
      }

    Это я был вынужден написать себе такую памятку после попыток понять свой код, начатый на 3 курсе.
    В будущем я учёл свои ошибки при написании http://govnokod.ru/5261

    TarasB, 06 Марта 2011

    Комментарии (13)
  2. Pascal / Говнокод #5902

    +92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    procedure TForm1.Button1Click(Sender: TObject);
    var
    outfi:string;
    begin
      if OpenDialog1.Execute then
      begin
      outfi:=sysutils.ExtractFilePath((OpenDialog1.FileName))+'/program.asm';
      windows.CreateFile(PChar(outfi),0,0,0,0,0,0);
      AssignFile(outPutFile,outfi);
      Rewrite(outPutFile);
      Append(outPutFile);
      AssignFile(inPutFile,OpenDialog1.FileName);
      Reset(inPutFile);
      init();
      writeLn(outPutFile,prologMemo.Lines.GetText());
     
      doprogram();
     
      writeLn(outPutFile,epilogMemo.Lines.GetText());
     
      CloseFile(outPutFile);
      CloseFile(inPutFile);
      ShellExecute( 0, 'open', PChar(outfi), nil, nil, SW_SHOWNORMAL);
      end;
    end;

    bugmenot, 06 Марта 2011

    Комментарии (5)
  3. Pascal / Говнокод #5879

    +107

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    procedure delonefromend(var p:TPointer);
    var i,n:integer; t:TPointer;
    begin
           i:=1;
           t:=p;
           while p<>nil do
                   begin
                           t:=t^.next;
                           i:=i+1;
                   end;
           for n:=1 to i do p:=p^.next;
           dispose(p^.next);
    end;

    Для того чтобы добраться до последнего элемента в списке, сначала циклом подсчитывается в i их количество, а потом другим циклом от 1 до I указатель p перемещается на i элементов, тобишь в конец.

    anigon, 03 Марта 2011

    Комментарии (46)
  4. Pascal / Говнокод #5860

    +128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    uses crt;
    var
    d,m,k:integer;
    begin
    write('Введите день - ');readln(d);
    write('Введите месяц - ');readln(m);
    case m of
    1: k:=365-d;
    2: k:=365-(31+d);
    3: k:=365- (31+28+d);
    4: k:=365- (31+28+31+d);
    5: k:=365- (31+28+31+30+d);
    6: k:=365- (31+28+31+30+31+d);
    7: k:=365- (31+28+31+31+30+30+d);
    8: k:= 365-(31+28+31+31+30+30+31+d);
    9: k:= 365- (31+28+31+31+30+31+30+31+d);
    10: k:=365- (31+28+31+31+30+31+31+30+30+d);
    11: k:=365- (31+28+31+31+30+31+31+30+30+31+d);
    12: k:=365- (31+28+31+31+30+31+31+30+31+30+30+d);
    end;
    writeln('До конца года осталось ',k,' дн.');
    end.

    Juris_Kabanis, 03 Марта 2011

    Комментарии (26)
  5. Pascal / Говнокод #5846

    +98

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    Procedure TreeNodeBuilding(Tree: TTreeView; Query: TZQuery; DestinationNode: TTreeNode;
                              IdColumn, NameColumn, FilterColumn, TableType: String; Filtering:Boolean; ImageIndex:Integer);
      //-------------------------------------------------//
      Function AddOrNot:Boolean; //Фильтрация по ИД
      var
        Add: Boolean;
      begin
      Add:=False;
      If Filtering=False then Add:=True else
        begin
        if DestinationNode=nil then Add:=True else
          begin
          MyNodeParamPtr:=DestinationNode.Data;
          if MyNodeParamPtr^.id=Query.FieldValues[FilterColumn] then Add:=True;
          end;
        end;
      Result:=Add;
      end;
      //-------------------------------------------------//
      Procedure AddTreeNodeToViewer; //Добавление ветки
      var
        MyNode: TTreeNode;
      begin
      //Добавляем новую запись в массив и заполняем её
    //  Inc(ArrMyNodeParamLength);
    //  SetLength(ArrMyNodeParam, ArrMyNodeParamLength);
      New(MyNodeParamPtr);
      MyNodeParamPtr^.id:=Query.FieldValues[IdColumn];
      MyNodeParamPtr^.table:=TableType;
      //Добавляем новый узел дерева и указатель на соотв запись
      if DestinationNode=nil then
      MyNode:=Tree.Items.AddObject(DestinationNode, VarToStr(Query.FieldValues[NameColumn]), MyNodeParamPtr)
        else MyNode:=Tree.Items.AddChildObject(DestinationNode, VarToStr(Query.FieldValues[NameColumn]), MyNodeParamPtr);
      MyNode.ImageIndex:=ImageIndex;
      MyNode.SelectedIndex:=ImageIndex;
      end;
      //-------------------------------------------------//
    begin
    //
    Query.First;
    if AddOrNot=True then AddTreeNodeToViewer;
    Query.Next;
    while not Query.Eof do
      begin
      if AddOrNot=True then AddTreeNodeToViewer;
      Query.Next;
      end;
    end;

    Добавление ветки в TreeView. Я тут явно перемудрил

    nikitasnv, 02 Марта 2011

    Комментарии (5)
  6. Pascal / Говнокод #5829

    +96

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    procedure TForm1.RegHttpRedirect(Sender: TObject; var dest: String;
      var NumRedirect: Integer; var Handled: Boolean;
      var VMethod: TIdHTTPMethod);
    begin
    Log('Redirect № ' + IntToStr(NumRedirect)+ ' - '+ Dest ,  true, MainClr);
    end;
    
    procedure TForm1.HTTPCoreStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: String);
    begin
    Log('Статус: '+ AStatusText, true, MainClr);
    end;
    
    {procedure TForm1.RegHttpW0rk(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    begin
    
    end;}

    лошарский код

    megaruliz, 28 Февраля 2011

    Комментарии (12)
  7. Pascal / Говнокод #5812

    +92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    type BOOK= record
          Name:string[20];
          Avtor:string[20];
          Price:integer;
          end;
    
     BOOKS=Array[1..100] of BOOK;
     F= File of BOOK;
    procedure Vvod(var biblioteka: books; var File_tBIBL:F; var n:integer);
    Procedure AVTOR_KN(VAR File_tBIBl:F; VAR File_tBIBl_AVTOR:text);
    Procedure TIP_TEXT(VAR File_tBIBl:F; VAR File_tBIBl_text:text);
    Function MIN_CENA( var File_tBIBl:F ; n:integer ):integer;
    procedure Vvod(var biblioteka: books; var File_tBIBL:F; var n:integer);
      var i:integer;
      begin
       rewrite(File_tBIBL);
    
      FOR i:=1 to n do begin
                     Writeln('  Vvedite nazvanie knigi');
                       readln(biblioteka[i].Name);
                     Writeln('  Vvedite avtora');
                       readln(biblioteka[i].Avtor);
                     Writeln('  Vvedite cenu');
                       readln(biblioteka[i].Price);
                     Write(File_tBIBL,biblioteka[i]);
                     writeln;
                       end;
      close(File_tBIBL);
      end;
    
      Procedure TIP_TEXT(VAR File_tBIBl:F; VAR File_tBIBl_text:text);
       var BIBLIOTEKA:BOOk;
    
         BEGIN
    
       reset(File_tBIBl);
       rewrite(File_tBIBl_text);
    
       WHILE not eof(File_tBIBl) do begin
                                    read(File_tBIBl,BIBLIOTEKA);
                                    writeln(File_tBIBl_text,BIBLIOTEKA.Name);
                                    writeln(File_tBIBl_text,BIBLIOTEKA.Avtor);
                                    writeln(File_tBIBl_text,BIBLIOTEKA.Price);
                                    writeln(File_tBIBl_text);
                                    writeln(File_tBIBl_text);
                                    end;
       close(File_tBIBl);
       close(File_tBIBl_text);
       end;
    
      Procedure AVTOR_KN(VAR File_tBIBl:F; VAR File_tBIBl_AVTOR:text);
       var BIBLIOTEKA:BOOk; Av:string;
    
         BEGIN
    
    
       reset(File_tBIBl);
       rewrite(File_tBIBl_AVTOR);
    
       Writeln('Vvedite iskomogo avtora');
       readln(Av);
    
     WHILE not eof(File_tBIBl) do   begin
                                    read(File_tBIBl,BIBLIOTEKA);
                                    if BIBLIOTEKA.Avtor = Av then begin
                                                                 writeln(File_tBIBl_AVTOR,BIBLIOTEKA.Name);
                                                                 writeln(File_tBIBl_AVTOR,BIBLIOTEKA.Avtor);
                                                                 writeln(File_tBIBl_AVTOR,BIBLIOTEKA.Price:4);
                                                                 writeln(File_tBIBl_AVTOR);
                                                                 end;
                                    end;
       close(File_tBIBl);
       close(File_tBIBl_AVTOR);
        end;
    
    var nomer,i,min:integer;BIBLIOTEKA:BOOks; SIZE:integer;
    begin
      reset(File_tBIBl);
     size:=1;
        while  not eof(File_tBIBl) do
            with BIBLIOTEKA[size] do
        begin
            readln(File_tBIBl , BIBLIOTEKA.name);
             Readln(File_tBIBl,BIBLIOTEKA.Avtor);
            readln(File_tBIBl,BIBLIOTEKA.Price);
    
            inc(size);
        end;
        dec(size);
     min:=BIBLIOTEKA[1].Price;
    for i:=1 to size  do
    if BIBLIOTEKA[i].Price< min then        begin
                                            min:=BIBLIOTEKA[i].Price;
                                            nomer:=i;
                                            end;

    Juris_Kabanis, 27 Февраля 2011

    Комментарии (8)
  8. Pascal / Говнокод #5807

    +131

    1. 1
    if (Edit40.Text<>t1) and (Edit38.Text<>t1) and (Edit36.Text<>t1) and (Edit34.Text<>t1) and (Edit32.Text<>t1) and (Edit30.Text<>t1) and (Edit28.Text<>t1) and (Edit26.Text<>t1) and (Edit24.Text<>t1) and (Edit22.Text<>t1) and (Edit20.Text<>t1) and (Edit18.Text<>t1) and (Edit16.Text<>t1) and (Edit14.Text<>t1) and (Edit12.Text<>t1) and (Edit10.Text<>t1) and (Edit8.Text<>t1) and (Edit6.Text<>t1) and (Edit4.Text<>t1) and (edit2.Text<>t1) ...

    Старый мем с форума:
    "Здрасте, вообщем такая проблемка:
    У меня Unit10.pas занимает 13378 КБ (13.0 МБ)
    И при работе в коде 10 формы после 5-10 изменений делфи начинает виснуть на 5-20 сек. (приходится вырезать весь текс кроме нужной процедуры и т.д, вставлять в блокнот, писать процедуру и затем обратно вставлять в делфи вырезанный текст из блокнота).
    И компелируется тож долговато.
    Всего 59988 строк.
    На строчке 400-500 знаков (эт только там где условие, но часть условия(для удобства) переходит на 2 строчку (если все вместить, то будет примерно 35000 строк))
    ____________________________________
    Постараюсь нормально сформулировать что хочу сделать.
    Есть часть условия:
    (код выше. прим. ReallyBugMeNot)
    ____________________________________
    Оно повторяется если быть точным 4200 раз.
    Изменяются только "номера\имена" эдитов (только четные от 2 до 240) и "t1" (t2, t3, t4, .. ,t35).
    Хотелось бы задать переменную (Например "Z") и присвоить ей это условие, но так чтобы переменные "t1, t2, t3, .. ,t35)" и "имена\номера" эдитов задавались в каждой процедуре (всего 6 процедур), где находится оставшееся часть условия.
    Можите подсказать как мне это реализовать?
    Зарание спс."

    Остается только удивлятся терпеливости человека, который позволил исходнику разростись до тринадцати мегов, прежде чем заметил, что что то не так.

    ReallyBugMeNot, 25 Февраля 2011

    Комментарии (29)
  9. Pascal / Говнокод #5805

    +85

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    // ComPort1: TComPort; компонент для работы RS-232
    type
     Tst5=string[5];
    var
      Form1: TForm1;
      lastcnl:byte;
      CommonShiftTT:integer;
      roundtt:integer;
      Start_Proces:boolean;
      intN,intdg0,intdg50:integer;
      cerr,cerr0,cerr50:integer;
      intdg:integer;
      cnl:integer;
      b:array [1..5]of byte;
      s,sdg50,sdg0,ss:Tst5;
      tt,realdg:real;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.ComPort1RxBuf(Sender: TObject; const Buffer;
      Count: Integer);
    var
      i:integer;
      p:pointer;
    begin
     for i:=1 to 5 do b[i]:=0;
     ListBox1.Items.clear;
     if ComPort1.Connected then begin
        p:=@Buffer;
        b[1]:=byte(p^);
      end
      else begin
        exit;
      end;
      cnl:=b[1];
      if cnl=0 then begin
        Start_Proces:=true;
      end;
      ListBox1.Items.Add(inttostr(cnl));
      if Start_Proces=true then begin
        b[2]:=Byte(pointer(longint(p)+1)^);
        b[3]:=Byte(pointer(longint(p)+2)^);
        b[4]:=Byte(pointer(longint(p)+3)^);
        b[5]:=Byte(pointer(longint(p)+4)^);
    
        if (b[2] and $20)>0 then ss[1]:='+' else ss[1]:='-';
        if (b[2] and $40)>0 then ss[2]:='0' else ss[2]:='1';
    
        FOR i:=3 TO 5 DO begin
        case b[i] of
              $82:ss[i]:='0';
              $CF:ss[i]:='1';
              $A4:ss[i]:='2';
              $85:ss[i]:='3';
              $C9:ss[i]:='4';
              $91:ss[i]:='5';
              $90:ss[i]:='6';
              $C7:ss[i]:='7';
         {min}$80:ss[i]:='8';
              $81:ss[i]:='9';
              $FF:ss[i]:='x'
            else ss[i]:=chr(b[i]);
        end;
        ss[0]:=#5;
    
        case cnl of
          0:begin
            vaL(ss,intdg0,cerr0);
            stR(intdg0,sdg0);
            Label1.Caption:=inttostr(intdg0);
          end;
          1:begin
            vaL(ss,intdg50,cerr50);
            stR(intdg50,sdg50);
            Label2.Caption:=inttostr(intdg50);
          end;
          2..26:begin
            vaL(ss,intN,cerr);
            intN:=intN-intdg0+CommonShiftTT;
            realdg:=intN/((intdg50-intdg0)/500);{real type}
            intdg:=SMALLINT(round(realdg));{integer type}
            tt:=intdg/10;
            roundtt:=SMALLINT(round(tt));{integer}
            stR(roundtt:5,s);
          end;
        end;
      end;
      ListBox1.Items.Add('float='+floattostr(tt));
      ListBox1.Items.Add(inttostr(cnl)+'='+ss+' = '+inttostr(roundtt));
     end;
    end;

    Процедура приема и обработки Кодов АЦП с контроллера. Контроллер обрабатывает данные полученные с температурных (аналоговых) датчиков и передает на COM в цифровом виде.
    Сделано для АКГУП Индустриальный г. Барнаул

    zak, 25 Февраля 2011

    Комментарии (12)
  10. Pascal / Говнокод #5668

    +107

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    procedure proc(a, b: integer);
    begin
    end;
    
    proc(1, 2,); // лишняя запятая после 2  !!!!11

    на Delphi7 компилится и работает!!! Я в шокенах, 8 лет на Делфи и не знал...

    StriderMan, 14 Февраля 2011

    Комментарии (47)