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

    +144

    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
    function IsIntStr(const str:string):boolean;                                    // Для проверки, состоит ли логин целиком из цифр.
    var                                                                             // TryStrToInt не подходит.
      p:pchar;
    begin
      result:=false;
      p:=pchar(str);
      if p^=#0 then exit;
      while p^ <> #0 do
      begin
        if not (p^ in ['0'..'9']) then
        exit;
        p:=charnext(p) ;
      end;
      result:=true;
    end;

    Showmessage(IntToStr(4324324233213564)); // а хуйца не желаете?

    Stertor, 24 Апреля 2015

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

    +144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    FYears.Items.Clear;
          for i := 10 downto 1 do
            FYears.Items.Add(IntToStr(Year - i));
          FYears.Items.Add(IntToStr(Year));
          for i := 1 to 10 do
            FYears.Items.Add(IntToStr(Year + i));

    Заполнение итемов номерами лет
    Сначала добавим 10 лет до даты Х
    Потом дату Х
    Потом 10 лет после даты Х
    RAD Studio XE8 FMX.Calendar.Style.pas

    PeaK, 24 Апреля 2015

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

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then
            S := LocaleService.GetLocaleFirstDayOfWeek
          else
            S := '6';
          FFirstDayOfWeekNum := Ord(S.Chars[0]) - Ord('0');
          {$IFDEF MACOS}
          FFirstDayOfWeekNum:= Ord(S.Chars[0]) + Ord('0');
          {$ENDIF}
          {$IFDEF ANDROID}
            FFirstDayOfWeekNum := FFirstDayOfWeekNum - MondayOffset;
          {$ENDIF}

    Это FireMonkey! FMX.Calendar.Style.pas! И это реально работает.
    Главное, что всё очевидно.

    PeaK, 24 Апреля 2015

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

    +144

    1. 1
    IntToStr(StrToInt(VarToStr()))

    Сегодня пришла мадам и спросила почему это не работает. Сказали что бы так больше не ...кодила.

    ViktorR, 24 Апреля 2015

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

    +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
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    flag:=true;
    
    if keyList = nil then
    begin
    new(keyList);
    new(keylist^.HisTerms);
    new(keylist^.hisChapter);
    keyList^.value:= HashFunction(edit1.Text);
    keylist^.hisChapter^.number:=strtoint(edit2.Text);
    keylist^.HisTerms^.TheTerm:=edit1.Text;
    keylist^.HisTerms^.hisPage:=keylist^.hisChapter;
    keylist^.HisTerms^.hisKey:=keylist^.value;
    keylist^.hisChapter^.nextPage:=nil;
    keylist^.HisTerms^.nextTerm:=nil;
    memo1.Lines.Add(edit1.Text + ' (' + edit2.Text+')');
    end
    else
    begin
    keyTemp:=keylist;
    temp:=HashFunction(edit1.Text);
    if keytemp^.value = temp then
    begin
    termtemp:=keytemp^.HisTerms;
    chaptertemp:=keytemp^.hisChapter;
    while termtemp^.nextTerm<> nil do
    termtemp:=termtemp^.nextTerm;
    while chaptertemp^.nextPage<> nil do
    chaptertemp:=chaptertemp^.nextPage;
    new(termtemp^.nextTerm);
    new(chaptertemp^.nextPage);
    chaptertemp^.nextPage^.number:=strtoint(edit2.Text);
    termtemp^.nextTerm^.TheTerm:=edit1.Text;
    termtemp^.nextTerm^.nextTerm:=nil;
    chaptertemp^.nextPage^.nextPage:=nil;
    termtemp^.hisKey:=HashFunction(edit1.Text);
    termtemp^.hisPage:=chaptertemp^.nextPage;
    flag:=false;
    end
    else
    keytemp:=keytemp^.NextKey;
    if not(flag) then
    begin
    keytemp:=keylist;
    while keytemp^.NextKey<>nil do
    keytemp:=keytemp^.NextKey;
    new(keytemp^.NextKey);
    new(keytemp^.NextKey^.HisTerms);
    new(keytemp^.NextKey^.hisChapter);
    keytemp^.NextKey.value:=HashFunction(edit1.Text);
    keytemp^.NextKey^.hisChapter^.nextPage:=nil;
    keytemp^.NextKey^.HisTerms^.nextTerm:=nil;
    keytemp^.NextKey^.hisChapter^.number:=strtoint(edit2.Text);
    keytemp^.NextKey^.HisTerms^.TheTerm:=edit1.Text;
    keytemp^.NextKey^.HisTerms^.hisPage:=keytemp^.NextKey^.hisChapter;
    keytemp^.NextKey^.HisTerms^.hisKey:=HashFunction(edit1.Text);
    
    end;

    Создание хэш-таблицы терминов и добавление каждому термину под-термина.

    Toha, 12 Апреля 2015

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

    +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
    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
    var
      Excel: OleVariant;
      Rows, Cols: integer;
      WorkSheet: OleVariant;
      DebugList: TStringList;
      I, j, CSeek: integer;
      R, ArrV: OleVariant;
      ObjData: TDataContainer;
      D: integer;
    begin
     {$IFDEF DEBUG}
      DebugList := TStringList.Create;
     {$ENDIF}
      try
        Excel := CreateOleObject('Excel.Application');
        Excel.Visible := false;
        Excel.Workbooks.Open[DocPath, 0, True];
        WorkSheet := Excel.ActiveWorkbook.ActiveSheet;
        R := Excel.Intersect(WorkSheet.UsedRange,
          WorkSheet.UsedRange.Offset[14, 0]);
        ArrV := R.Value;
        Rows := VarArrayHighBound(ArrV, 1);
        Cols := VarArrayHighBound(ArrV, 2);
        {$IFDEF DEBUG}
        DebugList.Add(Format('Количество ячеек в таблице = %d', [(Rows) * Cols]));
        DebugList.Add(Format('Rows = %d, Cols = %d', [Rows, Cols]));
        {$ENDIF}
        CSeek := 0;
        D := 1;
        for I := 1 to Rows do
        begin
          if (CompareStr(Trim(VarToStr(ArrV[I, 1])), Trim('Итого')) = 0) then
            Break;
          if (CompareStr(Trim(VarToStr(ArrV[I, 1])),
            Trim('отдел')) = 0) or
            (CompareStr(Trim(VarToStr(ArrV[I, 1])), Trim('10.05')) = 0) or
            (CompareStr(Trim(VarToStr(ArrV[I, 1])), Trim('10.06')) = 0) or
            (CompareStr(Trim(VarToStr(ArrV[I, 1])), Trim('10.09')) = 0) then
          begin
            CSeek := I + 2;
            Continue;
          end;
          if CSeek > I then
            Continue;
          for j := 1 to Cols do
          begin
            case j of
              1:
                begin
                  if VarToStr(ArrV[I, j]) <> '' then
                  begin
                    ObjData := TDataContainer.Create;
                    ObjData.Name := ArrV[I, j];
                  end;
                end;
              3:
                begin
                  if VarToStr(ArrV[I, j]) <> '' then
                    ObjData.InventoryNumber := GetInventoryNumber(ArrV[I, j]);
                end;
              10:
                begin
                  if (D mod 2 <> 0) then
                  begin
                    if VarToStr(ArrV[I, j]) <> '' then
                      ObjData.DataCount := ArrV[I, j];
                  end
                  else
                    ObjData.Cost := ArrV[I, j];
     
                  if (ObjData <> nil) and (ObjData.DataCount > 0) then
                  begin
                    FData.Add(ObjData);
                    DebugList.Add(ObjData.AsString);
                  end;
                end;
            end;
            Inc(D);
          end;
        end;
        {$IFDEF DEBUG}
        DebugList.Add('Objects created: ' + IntToStr(FData.Count));
        D:=1;
        for ObjData in FData.Items.Values do
           D := D + ObjData.DataCount;
        DebugList.Add('Total objects count: ' + IntToStr(D));
        DebugList.SaveToFile('C:\ExcelDebug.txt');
        {$ENDIF}
      finally
        {$IFDEF DEBUG}
        DebugList.Free;
        {$ENDIF}
        Excel.Quit;
      end;
    end;

    При разборе выхлопа из 1С в Excel - excel и формат выгрузки сделали всё, чтобы я люто наговнокодил-(

    Cynicrus, 08 Апреля 2015

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

    +100

    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
    // функция создания случайного ключа для шифровки/дешивровки сообщения
    function keyCreate(): string;
    const
      alf: string = 'abcdefjhijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789';
    var
      i, k: integer;
      logName: string;
    begin
      logName := '';
      for i := 0 to 15 do
      begin
        k := RandomRange(1, 62);
        logName := logName + alf[k];
      end;
      Result := logname;
    end;

    Какой оригинальный подход.

    Cynicrus, 06 Апреля 2015

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

    +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
    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
    program st1r;
    uses crt;
    var
    st:string;
    n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,i:integer;
    begin
    clrscr;
    n0:=0; n1:=0; n2:=0; n3:=0; n4:=0;
    n5:=0; n6:=0; n7:=0; n8:=0; n9:=0;
    Write('Введите строку, состоящую из цифр: ');
    Readln (st);
    for i:=1 to length (st) do
    begin
    if Pos('0',st[i])<>0 then n0:=n0+1;
    if Pos('1',st[i])<>0 then n1:=n1+1;
    if Pos('2',st[i])<>0 then n2:=n2+1;
    if Pos('3',st[i])<>0 then n3:=n3+1;
    if Pos('4',st[i])<>0 then n4:=n4+1;
    if Pos('5',st[i])<>0 then n5:=n5+1;
    if Pos('6',st[i])<>0 then n6:=n6+1;
    if Pos('7',st[i])<>0 then n7:=n7+1;
    if Pos('8',st[i])<>0 then n8:=n8+1;
    if Pos('9',st[i])<>0 then n9:=n9+1;
    end;
    
    Writeln ('Количество вхождений в строку из цифр ',st);
    Writeln ('0: ',n0);
    Writeln ('1: ',n1);
    Writeln ('2: ',n2);
    Writeln ('3: ',n3);
    Writeln ('4: ',n4);
    Writeln ('5: ',n5);
    Writeln ('6: ',n6);
    Writeln ('7: ',n7);
    Writeln ('8: ',n8);
    Writeln ('9: ',n9);
    readln(st);
    end.

    студенту было дано задание: "Для каждой цифры '0', '1', ... '9' подсчитать количество их вхождений в строку S".

    shipushek, 06 Апреля 2015

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

    +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
    // Функция шифрования
    function encryptAecMessage(): string;
    var
      //  myCript: TSyna3Des;
      tmpKey: string;
      //encryptingStr: string;
      aProcess: TProcess;
      pubKeyPath: string;
    begin
      tmpKey := keyCreate();
      pubKeyPath := ExtractFileDir(ParamStr(0)) + '/workinkey/key2_rsa.pub';
      //  myCript := TSyna3Des.Create(tmpKey);
      //encryptingStr := myCript.EncryptCTR(msg);
      aProcess := TProcess.Create(nil);
      // openssl rsautl -in /home/maksim/test -out /home/maksim/Загрузки/Keys -inkey /home/maksim/key2_rsa.pub
      AProcess.CommandLine := 'echo ' + tmpKey +
        ' | openssl rsautl -in /home/maksim/test -out ' +
        '/home/maksim/Загрузки/Keys -inkey ' + pubKeyPath + ' -pubin -encrypt';
      Result := '';
    end;

    Вот такое кусок отборного кала нашёл в старой версии игрового сервера-)

    Cynicrus, 06 Апреля 2015

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

    +93

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    function THero.getMinimalJsonData():SOString;
    begin
      Result := '{"username":"'+name+
                  '","userid":'+IntToStr(id)+
                  ',"level":'+IntToStr(general.level)+
                  ',"creditstate":'+IntToStr(TTransfer.calcCreditState(general.creditPoints,general.level,general.creditFine))+
                  ',"sign":"'+addiction.GetS('sign')+'"}';
    end;

    Использовать готовый класс? Не только в строку руками, только хардкор.

    Cynicrus, 05 Апреля 2015

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