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

    −42

    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
    96. 96
    //Просто скажите говнокод это или нет. Сильно не пинать, я ток учусь программировать. Нужно адекватное мнение 
    //По идее я правильно решил?
    //Вот условие задачи:
    //
    {
    А) Исследуя модель танцевального кружка, можно заметить, что в любой
    момент одна из двух очередей обязательно пуста. В самом деле, если приходит
    больше мальчиков, то будет пуста девчоночья очередь и наоборот. Можно ли
    обойтись одной очередью? Придумайте, как это сделать.
    
    Подсказка: добавьте функцию для тестирования очереди с тем, чтобы
    выяснить, не пуста ли она. И, если не пуста, то кто томится в ней — мальчик или
    девочка? Эта функция не должна изменять состояние очереди.}
    //Вот моё решение:
    uses Crt;
    var
     S_IN : String; 	//Stream In
     S_OUT : String; 	//Stream Out
     b : boolean;           //Lenth = 0 or no?
     S : String;            //Boys and Girls
     c1, c2, c3 : char;		//Symbols: first and second
     i : Integer; 		//Index in input stream
    //Кто томится в очереди, мальчик или девочка?
    function EmptyQue (var Que : String; var boy_or_girl : char) : boolean;
    begin
     if Length (Que) = 0 then EmptyQue:=false
     else
     begin
      boy_or_girl:=Que[1];
      EmptyQue:=true;
     end;
    end;
    //Постановка символа arg в очередь Que
    procedure PutInQue (var Que : String; arg : char);
    begin
     Que:=Que+arg;
    end;
    //Являются ли первый символ в очереди и текущий одинакового регистра
    function Test (const Que : String): boolean;
    begin
     if ((c3 in ['A'..'Z']) and (c1 in ['A'..'Z'])) // 'A'..'Z'
        or
        ((c3 in ['a'..'z']) and (c1 in ['a'..'z'])) //'a'..'z'
     then
      Test:=true
     else
     Test:=false;
    end;
    //Извлечь из очереди
    function GetFromQue (var Que : String; var arg : char) : boolean;
    var
     b : boolean;
    begin
     b:=Test (Que);                 //Если первый в очереди и текущий, мальчик или
     if b then GetFromQue:=false    //девочка, то идем дальше, пару не составляем
     else
     begin
      GetFromQue:=true;
      arg:=Que[1];
      Delete (Que,1,1);
     end;
    end;
    begin
     ClrScr;
     S_IN:='ZHJKqwertASDyuiopQWERTYUIOPasdf';
     S_OUT:='';
     c3:=#0;
     S:='';
     for i:=1 to Length (S_IN) do
     begin
      c1:=S_IN[i];
      b:=EmptyQue (S,c3);
      if b then begin
       if c1 in ['A'..'Z'] then begin
        if GetFromQue (S,c2) then S_OUT:=S_OUT+c1+c2+' '
        else
        PutInQue (S,c1);
       end
       else
       begin
        if GetFromQue (S,c2) then S_OUT:=S_OUT+c2+c1+' '
        else
        PutInQue (S,c1);
       end;
      end
      else
      PutInQue (S,c1);
     end;
     Writeln ('Входной поток: ');
     Writeln (S_IN);
     Writeln ('Выходной поток: ');
     Writeln (S_OUT);
     Writeln ('В очереди остались:');
     Writeln (S);
     Readln;
    end.

    Хочу узнать мнение других людей. Наговнокодил ли я или нет, пока решал задачу (задача из книги по программированию "Песни о Паскале"). Короче дана входная строка, состоящая из маленьких и больших латинских букв (большие - мальчики, маленькие - девочки). Есть две очереди Boys и Girls. Если текущий символ (это в цикле) мальчик, то достаем девочку, иначе - достаем мальчика.
    :
    ...
    for i:=1 to Length(S_IN) do begin
    c1:= S_IN[i]; { выбираем из входного потока }
    if c1 in ['A'..'Z']
    then begin { если это мальчик...}
    { если в очереди есть девочка }
    if GetFromQue(Girls, c2)
    { добавляем пару в выходной поток }
    then S_OUT:= S_OUT+c1+c2+’ ’
    { а иначе помещаем мальчика в очередь }
    else PutInQue(Boys, c1);
    end
    else begin { а если это девочка...}
    { если в очереди есть мальчик }
    if GetFromQue(Boys, c2)
    { добавляем пару в выходной поток }
    then S_OUT:= S_OUT+c2+c1+’ ’
    { а иначе помещаем девочку в очередь }
    else PutInQue(Girls, c1);
    end
    end;
    ...
    Теперь необходимо всё делать в одной очереди (а не Boys и Girls)

    Запостил: Small_Diamond, 11 Июня 2016

    Комментарии (48) RSS

    • Где здесь C++, Small_Diamond?!
      Ответить
    • Неправильно - разделять людей по гендерному признаку, тем более - писать для этого какой-то говнокод.
      Ответить
      • xD Эта задача на очереди и стеки в Паскале) Не надо агриться)))
        Ответить
        • Думаю тебе стоит применить паттерн «джва стека».
          Ответить
    • function Test (const Que : String): boolean;
      begin
       if ((c3 in ['A'..'Z']) and (c1 in ['A'..'Z'])) // 'A'..'Z'

      Уже плохо: какие-то глобальные переменные, да ещё и с ни о чём не говорящими названиями.

      Если от этого кода оторваться и вернуться через несколько недель, то Вы уже сами не вспомните, какой фрагмент что делает.

      Вообще рекомендую погуглить материал по теме «сцепление модулей».
      Ответить
    • > Просто скажите говнокод это или нет.
      Следи за руками, Small_Diamond! Свой код ты выложил на сайт govnokod.ru, откуда можно сделать вывод, что твой код - это говнокод. Всё просто!
      Ответить
    • как же меня радует что я не пишу на пас кале
      Ответить
    • >Исследуя модель танцевального кружка, можно заметить
      >Если приходит больше мальчиков

      >танцевального
      >больше мальчиков

      impossible
      Ответить
      • На самом деле это может быть так. ибо

        1. Мальчики не выбирают сами, а родители не спрашивают (по себе знаю) что хочет чадо, и, если учитывать, сколько идиотов стало вокруг, вполне логично, что всякие вейперы и хипстеры отправляют пацанов в плясуны.

        2. Парни в сознательном возрасте могут идти на балет ради девчонок. Логично, если ты один на 20 баб, то ты в шоколаде, даже если крив и страшен. А потом некоторые втягиваются, и все.
        Ответить
        • Да, забавно будет. Пришел надеясь что будешь один на 20 баб, а по факту пришло больше мальчиков. Ну и делать нечего, втянулся потихоньку, тем более европейские ценности.
          Ответить
          • >будешь один на 20 баб
            Фу хуйня. Даже не матюкнешься.

            В балете гейропейские ценности прижились задолго до того, как у вас стало принято материть европку, но при этом все хорошее привозить оттуда.
            Ответить
        • > вейперы
          Кто все эти люди?
          Ответить
          • Если не ошибаюсь, это те, кто курит пар.
            Ответить
            • "Пар на 95% безопаснее дыма, и вообще - законом не запрещено - парю где хочу!"

              Примерно так переводится кудахтанье среднестатистического питуха на русский язык
              Ответить
              • У вас там поди весь универ курил сосал эту хуйню?
                Ответить
                • я в универе год как не был
                  Ответить
                  • Тогда на работе? Иначе почему ты на этих дураков так обижаешься?
                    Ответить
          • Питухи в обличиe человеков
            Ответить
        • кроме балета есть танцы попроще и без колготок
          Ответить
    • Алгоритмическая сложность удаления сосёт.
      Ответить
    • Перечитайте тред глазами "нормального человека" ©.
      >колготки
      >пидары
      >сосёт
      Ответить
      • http://www.nsfwyoutube.com/watch?v=RZkK9b8Rvko
        Ответить
        • Кста, вчера копался в исходниках ютуб-даунлоадера и вычитал там, что проверку можно обойти без nsfwyoutube. Просто https://www.youtube.com/v/<id>
          Ответить
          • Я знал, что стандартный код для айфрейма (https://www.youtube.com/embed/<id>) не проверяет возраст, а оказалось, что у него есть псевдоним на целых четыре символа короче.
            Ответить
          • У меня не всегда работало видео. Алсо, не сработает если запрещено встраивание.
            Ответить
    • Охренеть сколько говна на комментили
      Ответить
      • Вообще то у тебя очередь одна. Это переменная S.

        procedure TForm1.Button1Click(Sender: TObject);
        var s,a:string; {a - входной поток s - очередь}
        v,z,i:integer; {v - счетчик очереди: 0 - нет очереди, положительное - очередь больших, отрицательное -очередь маленьких z - текущий сивол: -1 маленькая 1 большая i - Index }
        begin
        a:=Edit1.Text;
        s:=a[1];
        if (ord(a[1]) div 97) = 1 then v:=1 else v:=-1;
        for i:=2 to length(a) do
        begin
        if (ord(a[i]) div 97) = 1 then z:=1 else z:=-1;
        memo1.Lines.Add('Очередь : '+s+' '+inttostr(v));
        if v=0 then
        begin
        Memo1.Lines.Add('Очереди нет ');
        v:=v+z;
        s:=a[i];
        end
        else
        if v*z>0 then
        begin
        s:=s+a[i];
        v:=v+z;
        end
        else
        begin
        Memo1.Lines.Add('Пара образована : '+s[1]+'-'+a[i]);
        delete(s,1,1);
        if z=1 then v:=v+1 else v:=v-1;
        end;

        end;
        Memo1.Lines.Add('В очереди остались :'+s);
        end;
        Ответить

    Добавить комментарий