1. C++ / Говнокод #28079

    0

    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
    int main() {
    
      ifstream input_file;
    
      input_file.open("DATA");
      
      string line;
      while (getline(input_file, line)) {
        size_t i = 0, j = 0;
        string fname, sname;
        float score;
    
        char c = line[0];
        while((c != ' ') && (j < line.size())) {
          c = line[j];
          j++;
        }
        fname = line.substr(i, j - i - 1);
        i = j;
        j += 1;
    
        c = line[i];
        while((c != ' ') && (j < line.size())) {
          c = line[j];
          j++;
        }
        sname = line.substr(i, j - i - 1);
        i = j;
        j += 1;
    
        score = stof(line.substr(i, line.size()));
    
        Data dat;
        dat.fname = fname;
        dat.sname = sname;
        dat.score = score;
    
        vec.push_back(dat);
      }
      
      const auto comp_fname = [](Data a, Data b){return a.fname >= b.fname;};
      const auto comp_sname = [](Data a, Data b){return a.sname >= b.sname;};
      const auto comp_score = [](Data a, Data b){return a.score >= b.score;};
    
      const auto dcomp_fname = [](Data a, Data b){return a.fname < b.fname;};
      const auto dcomp_sname = [](Data a, Data b){return a.sname < b.sname;};
      const auto dcomp_score = [](Data a, Data b){return a.score < b.score;};
    
      print(vec);
      char choice = 0, order = 0;
      cout << "Как сортировать (0 - Fфмилия, 1 - Iмя, 2 - CpegHuu_6aJlJl): ";
      cin >> choice;
      cout << "А в какмо порядке?7? (0 - по убыванию, 1 - по возрастанию)Ж ";
      cin >> order;
      
      if (choice == '0') {
        if (order == '0') {
          sort(vec.begin(), vec.end(), comp_fname);
        } else {
          sort(vec.begin(), vec.end(), dcomp_fname);
        }
      } else if (choice == '1') {
        if (order == '0') {
          sort(vec.begin(), vec.end(), comp_sname);
        } else {
          sort(vec.begin(), vec.end(), dcomp_sname);
        }
      } else if (choice == '2') {
        if (order == '0') {
          sort(vec.begin(), vec.end(), comp_score);
        } else {
          sort(vec.begin(), vec.end(), dcomp_score);
        }
      }
    
    // и т.д. ...

    Как вам? Зачёт? Незачёт? Удовлетворительно?

    Запостил: JloJle4Ka, 12 Марта 2022

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

    • Как вам лаба? Есть тут профессоры?
      Ответить
    • Пор тянка
      Ответить
    • Тут UB, убери.
      Ответить
      • Где именно?
        Ответить
        • Технически, в строках 58, 64, 70, потому что используемые компараторы не обеспечивают Strict Weak Ordering.
          Ответить
          • И что? Оно же работает.
            Ответить
            • Что, никто не знает?

              Strict Weak Ordering означает, что элементы сравнивают строгими неравенствами, т.е. < вместо <=, при этом из того, что отсутствуют a < b и b < a, не следует, что a == b.

              Как это может напитулить программу? Этого я не знаю...
              Ответить
            • С таким везением лотерейный билет, что ли купил.

              http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
              https://i.imgur.com/i0ZUJim.png
              Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
              #include <algorithm>
              
              int main()
              {
                      int arr[31] = {
                          7978558,    9241630,    65706826,   639636154,  1033996244, 
                          1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                          1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                          1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                          1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                          138146428,  337412092,  329155246,  21320082,   1751867558,
                          1155173784
                      };
              
                      std::sort(std::begin(arr), std::end(arr),
                                [](int a, int b) { return a <= b; });
              }
              Код. Отлично крашится на Шланге с libc++.
              Ответить
              • GCC его нормально компилирует и запускает, как с <=, так и с <. Шлангобляди соснули?
                Ответить
                • Не, просто конкретно эта последовательность не складывается в нужном порядке, чтобы что-то стриггерить. В libstdc++ можно получить бесконечный цикл и повисшую программу, если найдёшь нужный порядок.
                  Ответить
                  • Именно поэтому я за "Nim".
                    Ответить
                    • Именно поэтому я за S" Forth", и максимально минимальный уровень абсракции.
                      Ответить
              • Для меня, как для не крестобляди, не понятно, откуда вылазит сегфолт?
                Ответить
                • Компараторы в крестах должны давать Strict Weak Ordering.
                  Если C(a, b) == true → C(b, a) == false
                  Ну и если ты ожидаешьт, что у тебя в условии окажется false, а оно там никогда не оказывается, получается плохо. В libc++ вроде проблема выхода из рекурсии, в libstdc++ — цикла.
                  Грубо говоря, компаратор говорит, нужно ли эти два значения поменять местами, чтобы получился порядок. И если он всегда говорит «да», это может плохо кончится.
                  Ответить
                  • Понятно.

                    Обобщённоепрограммированиепроблемки.
                    Ответить
    • Лучше перепиши на Си без всего этого крестодерьма.
      Ответить
      • Это лаба по Си.
        Ответить
        • У меня в Си нет никаких "cin", "cout" и "ifstream".
          Это крестопарашная говностандартная библиотека
          Ответить
          • Но преподы-то не знают.

            Тсссссс...
            Ответить
            • Ну тупыыыые...
              Нахуй таких преподов вообще держат?
              Ответить
          • > cin

            stdin

            > cout

            stdout

            > ifstream

            #define ifstream FILE*
            Ответить
            • А как ты "<<" и ">>" в Си перегружать будешь?
              Ответить
              • Расчехлит оригинальный компилятор «Си с классами», который просто перегонял всё в сишный код и потом передавал нормальным компиляторам.
                Ответить
                • А в том оригинальном компиляторе поддерживается "const auto" например?

                  А конструкция типа "[](Data a, Data b)" в нем заработает?
                  Ответить
              • Этого в условии не было.
                Ответить
            • Методы, лямбды, итераторы...
              Ответить
              • > Методы, лямбды, итераторы...

                https://i.imgur.com/HopNrVI.jpg
                Ответить
    • Переведи на "PHP".
      Ответить
      • Человека который такое сможет с больше вероятностью вообще нахуй завернут из обычной евролавки с резюлюцией overqualified.
        В"озмешь такого,. он нарисует код от которого у остальных макак мозг полопается и хуй они смогут тянуть с ним вместе. И работа встанет.
        Ответить
    • Любите хот-доги?
      https://media.breitbart.com/media/2023/07/IMG_5085.jpeg
      Ответить

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