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

    −20

    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
    #include <iostream>
    using namespace std;
    int main()
    {
    	int counter, k, vector[counter], vector_new[counter];
    	cout<<"Enter the vector lengh"<<endl;
    	cin>>counter;
    	k = 0;
    	for(int i = 1; i <= counter; i++)
    	{
    		cout<<"The "<<i<<" number = ";
    		cin>>vector[i];
    	}
    	for(int i = 1; i <= counter; i++)
    	{
    		for(int x = i + 1; x < counter; x++)
    		{
    			if(vector[i] == vector[x])
    			{
    				k++;
    				vector_new[k] = vector[i];
    			}
    			break;
    		}
    	}
    	for(int i = 1; i <= k; i++)
    	{
    		cout<<"The "<<i<<" element is = "<<vector_new[i]<<endl;
    	}
    	system("pause");
     	return 0;
    }

    Этот код настолько говнокод, что даже отказывается заполнять начальный массив.

    Запостил: Shantykoff, 29 Января 2017

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

    • > vector[counter]
      Какой интересный код - подключишь <vector>, а он сломается!
      Ответить
    • length неправильно написано, ну хоть не dlinna и massiv и mas_new

      ...

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

      ...

      >vector[counter]
      >cin>>counter;
      Ааааа!
      Ответить
      • > Индексация с единицы

        Какие глюки? Просто vector[0] не будет использован. Будет лежать мёртвым грузом.

        >>vector[counter]
        >>cin>>counter;

        Ага. Объявили два массива нулевой длины, а потом запросили длину. Жаль, что действие обратной силы не имеет.
        Ответить
        • > нулевой длины

          Да вы оптимист, коллега.
          Ответить
          • Массив неопределённой длины.
            Ответить
            • А стек тоже на неопределенный размер съедет?
              Ответить
            • Как же хорошо в языках с более строгой типизацией, где размер статического массива можно указать только константой, а выражения с переменными выплёвываются компилятором.

              Мне кажется логичным, когда выражения, содержащие переменные, пригодны для объявления только динамических массивов. Керниган и Ритчи же почему-то посчитали это требование необязательным.
              Ответить
              • на самом деле variable length arrays доступны в с++ лишь в виде gcc-шного расширения. Скажем, в примере:
                int size = 15;
                int arr[size];

                Даже дураку слабому компилятору понятно, что размер массива - 15, хоть size и не помечен как constexpr.

                > Керниган и Ритчи же почему-то посчитали это требование необязательным.

                Легко говорить про плюсы на десктопе. Си на контроллерах - это другой мир, со своими законами и воззрениями
                Ответить
                • Почему вообще не было изначально аллоака и вла? Размер стека нужно было на момент копеляции считать?

                  Потому и переменные нужно было в начале декларировать?
                  Ответить
                  • Как будто антервис знает. А вла и аллока не нужны тащемта.
                    Ответить
                    • Как же без них?
                      В кучу срать?
                      Ответить
                      • Нет. Создавать все объекты статически.
                        Ответить
                        • это как?
                          сразу char tsar_array[STACK_SIZE] ?;)
                          Ответить
                          • struct MyData {
                                ...
                            } myData;
                            
                            int main(int argc, char **argv) {
                                ...
                            }
                            Ответить
                            • так это же засирает статическую область
                              Ответить
                              • вот есть у тебя мк. Без кучи, просто адресное пространство флеш-памяти. Фрагментация недопустима - иначе мк не будет отрабатывать требуемые месяцы/годы бесперебойной службы. Итого два варианта: 1. складывать данные по фиксированным адресам; 2. выделять всю необходимую память сразу при запуске и дальше пользоваться только ей
                                Ответить
                                • Что-то второй вариант не особо от первого отличается :)
                                  Ответить
                                • Вот есть у тебя мк.
                                  А сишного компилятора под него нету.
                                  Только голый асм.
                                  Ответить
                                  • > А сишного компилятора под него нету.
                                    Мы всё-таки в 2017 году живём, когда 32-битный ARM с 4 кило оперативки и 32 кило флеша на борту стоит меньше бакса... И даже умножать умеет!

                                    Не пора ли выбросить всё это восьмибитное говно, под которое на сях нельзя писать? :)
                                    Ответить
                                    • Я всецело за 32-битный прогресс и gcc для мк, но интересно, нет ли в
                                      этих армах подвоха? Чувствительности к наводкам, срока службы, потребляемой мощности, может еще чего-то. Все-таки у 8-битных техпроцесс явно проще и "дорожки" шире.
                                      Ответить
                                      • > нет ли в этих армах подвоха
                                        Да там разрыв не такой большой, на самом деле. Ну сделали этим cortex m0 регистры, АЛУ да шину пошире... Ну памяти побольше досыпали, раз техпроцесс позволяет. Архитектура там простая, набор инструкций от RISC'овых 8-биток не сильно отличается.

                                        По потребляемой мощности некоторые M0 вполне конкурируют с 8-битками.

                                        Срок службы от кристалла, имхо, почти не зависит. Разве что более тонкая флешка может подвести.

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

                                        Ещё у ARM'ов порог вхождения выше чем у 8-биток (но есть и профит - эти знания пригодятся и на старших чипах).
                                        Ответить
                            • Да и глобальные переменные - это пиздец. Ты видимо зеленым забыл выделить.
                              Ответить
                              • а еще там нету ключ слова static, значит в некоторых копеляторах этот символ еще и экспортируется
                                Ответить
                              • > глобальные переменные - это пиздец
                                Ну спрячь их в функцию или класс, если они тебя так пугают. Видимость им всегда можно подрезать.
                                Ответить
                      • Либо в кучу, либо делать массивы фиксированного размера. Просто вла - это мертворожденная абстракция. Ты не можешь позволить себе делать на стеке массивы произвольного размера. Если ты размещаешь на стеке массив, то знаешь, что он туда влезет, т.е его размер ограничен некоторой относительно небольшой константой. А если ты это знаешь, то почему не сделать обычный массив?
                        Ответить
                        • а если я знаю что мой моссив никогда не будет больше чем 500 байт, то чт делать? сразу выделить 500 байт на стеке?
                          Ответить
                          • да
                            Ответить
                            • а вдруг я в ембеддед окружении и каждый байт стека уменьшает байт кучи, и это важно?

                              ну или я так могу поддержать рекурсию на 3 уровня, а так я уже на втором получу SO?

                              Байтоёбство же бывает
                              Ответить
                              • Ну а если реально 500 байт прилетит? Что тогда будет совсеми твоими если? Если в худшем случае у тебя нерабочая программа, то храни данные в куче.
                                Ответить
                                • а бывают такие кейсы когда худший случай настает раз в год,и нет ничего стращного чот в этом случае все упадет

                                  Больной кейс конечно, но всякое бывает.

                                  Но я согласен что для обычного (не сверхмегабайтоёбского программирования под микроконтроллеры 1990го года выпуска) VLA и alloca нужны примерно никогда
                                  Ответить
                                  • > худший случай настает раз в год
                                    > чот в этом случае все упадет
                                    Так вот кто для фобос-грунт прошивку писал...
                                    Ответить
                              • Если ты в эмбеддеде, твой компилятор, скорее всего, говно, не очень умеющее VLA, не?
                                Ответить
                                • > не очень умеющее VLA
                                  Ты так говоришь, будто это что-то плохое.
                                  Ответить
                                  • Ну он, скорее всего, при этом ещё и остальные куски C99 не умеет, а это уже угнетает. В моей жизни хватает кода на древнем говне.
                                    Ответить
                                    • Ну это уже другая проблема. А VLA, имхо, совсем не та фишка, о которой стоит жалеть.
                                      Ответить
                                      • VLA - единственный способ сделать правильный многомерный динамический массив. Идея в том, что указатель на непрерывный кусок памяти из маллока можно перекастовать в указатель на VLA.
                                        Ответить
                                        • >> перекастовать в указатель на VLA.

                                          поясните для студента с последнего ряда: почему нельзя кастануть в массив не указывая размерности? И чем неполно декларированный моссив отличается от VLA ?
                                          Ответить
                                          • Тут трюк в касте в многомерный VLA. Тогда задача вычисления индексов в одномерном куске памяти перекладывается на компилятор. Если размерность не указать, то откуда он вообще её узнает?

                                            int (*array)[N] = calloc(N*M, sizeof(int));
                                            for(int i = 0; i < M; i++)
                                                for(int j = 0; j < N; j++)
                                                     array[i][j] = I*M+N;
                                            Ответить
                                            • В плюсах такой трюк не нужен -- просто напишите один раз класс, который считает многомерные индексы.
                                              Ответить
                                            • А
                                              я понял

                                              ключ слово -- "многомерный") Иначе сдвиги придется считать руками
                                              Ответить
        • vector[0]-то ладно, а вот vector[counter] может попасть куда-нибудь... скажем, в new_vector[0], ну это ладно, а если в k? Это ж смотря как компилятор переменные в стеке располагает...
          Ответить
        • >обратной силы не имеет
          class vector
          {
            int &m_len;
            ...
          public:
            vector(int &len) :  m_len(len) {}
          
            int length() const { return m_len; }
            ...
          };
          Ответить
          • Ну тогда ещё и так, для полного счастья :)
            int& length() { return m_len; }
            Ответить
      • lenght, widht, heigth, depht
        Ответить
        • this code was automatically renegaded
          Ответить
          • viceroy (наместник короля) — анаграмма от слова voreciy (Вореций).
            Ответить
        • оче сложный язык

          хорошо что американцы его улучшили, и теперь можно говорить thru и lite
          Ответить
          • Спасибо! Напомнили мне про ligth и brigth.
            Ответить
          • У Фаулза в "Аристосе" есть восхитительный пассаж насчёт упрощения языка до полной отвратительности.
            Ответить
            • «Универсальный язык»? Но там только пример стандартизации «I saw the men working hard» до «I seed the mans working hardly».

              Или ещё в какой-нибудь главе есть подобный пассаж?
              Ответить
              • Всегда знал, что на говнокодике любую хуйню поймают и поправят.

                В этой же главе Фаулз писал, что придётся пожертвовать красотой и поэзией, не?
                Ответить
              • Вот кстати. В реальной жизни у говнокоданов всё-таки что больше используется?
                - changes were done in rev. xxx
                - changes have been done in rev. xxx
                ?
                У меня - первый вариант.
                Ответить
                • changed in rev. xxx :3
                  Ответить
                • Present Perfect используется, когда ты говоришь о событии, которое началось в прошлом, но ещё не закончилось, либо оно имеет непосредственное отношение к тому, что происходит сейчас.

                  Если ты хочешь уточнить время, когда событие имело место, то Present Perfect уже не подходит, нужно использовать Past Simple.

                  Я бы сказал, что ревизию можно считать "временем", поэтому первый вариант (в пассивном залоге Past Simple) подходит больше.

                  С той поправкой, что "changes were done" звучит кривовато, я бы уточнил "The bug was fixed/introduced in rev XXX" или "This feature was introduced in rev XXX", etc.
                  Ответить
                  • Present Perfect используется тогда же, когда в дойче Perfekt, а Past Simple — когда в дойче Imperfekt/Präteritum?
                    Ответить
                    • Нет, в немецком другие правила. Perfekt чаще всего используется в устной речи, Präteritum в основном используется в письме (в книгах, журналах, etc.). Швейцарцы не используют Präteritum в принципе.

                      Т.е. немецкая фраза "Ich habe Klavier gespielt." отлично переводится как русское "Я играл на пианино." Может, только что, может, вчера, может, 10 лет назад и больше не играю, и т.д.
                      В английском это в зависимости от контекста может переводиться как "I played piano", "I've played piano", "I used to play piano (but now I don't)".
                      Ответить
                      • Обычно да, Perfekt в устной, Präteritum в письменной. Но если быть точнее, то Perfekt используется в коротких сообщениях, т. е. в самодостаточных предложениях, а Präteritum в связных текстах, когда предложение является лишь звеном цепочки повествования.
                        Ответить
                • > - changes were done in rev. xxx
                  Херня
                  > - changes have been done in rev. xxx
                  звучит как "извините, мы накосячили, это убьет мир и это неизбежно"

                  Либо changed in, либо <feature> has changed: <more>
                  Ответить
                • Что вообще и где? Ни разу не писал ни первое, ни второе.
                  Ответить
              • > I seed

                Кстати, я сбился со счёта, сколько раз в жизни я видел сообщения со словами "entries finded", "bytes readed", "bytes writed", etc.
                Ответить
                • > finded
                  Мне больше нравится founded. Основательней звучит.
                  Ответить
                • By the way, what happened with your avatar?
                  Ответить
                  • Самое интересное, что в личной кабинке аватар Романа отображается, а в комментариях — нет.

                    Может быть, у него в Граватаре указано странное возрастное ограничение?

                    P.S. Проверил, дело не в ограничении. И там, и там ГК запрашивает ограничение PG.

                    Граватару не понравилось size=28. Он не хочет генерировать такую мелкую превьюшку.
                    Ответить
                    • > PG
                      Хотя в комментах у нас тут самое настоящее NC-17.
                      Ответить
                      • Но на аватарках вроде ничего страшного нет , хотя можно было бы поставить гоатсе.

                        Предлагаешь добавить возможность устанавливать возрастные оценки для комментариев?
                        Ответить
                      • P.S. А в Казахстане, оказывается, бывает и рейтинг 21+:
                        https://ru.wikipedia.org/wiki/Система_классификации_фильмов_в_Казахстане

                        Что же такое может быть в фильме, что в 18 лет смотреть нельзя, а в 21 год можно?
                        Ответить
                        • То, что без бутылки не понять (а до 21 пить нельзя).
                          Ответить
                          • В РФ до 21 можно покупать алкоголь крепостью до 25 градусов, вообще говоря. Дивной осмысленности ограничение.
                            Ответить
                            • Хахаха
                              Двадцатилетние студенты ржут
                              Ответить
                          • Зато можно понять сидя на бутылке.
                            ba dum tss!
                            Ответить
                  • > what happened with your avatar?

                    Das weiß ich leider nicht. Es funktioniert für mich. Ich werde versuchen, es zu ändern.
                    Ответить
                    • >Что случилось с твоим аватаром?
                      >Он изменился.
                      Ответить
                    • Kaschtschizin, du schwule Sau! Koffer-Bahnhof-Russland, bljad! Russisches Schwein!
                      Ответить
                      • Сёма, ну грёбаный стыд, выучи уже структуру предложений, у тебя ни одного глагола во фразе нет.
                        Кому ты там вообще нужен, если ты даже простую фразу с гугл-транслейтом правильно написать не можешь?
                        Ответить
                        • А он там и не нужен. Ты как давно дойч учишь? Я так и не услышал куда и когда ты свалил.
                          Ответить
                        • Bist du dich sicher, daß er Söma ist? Meiner Meinung nach soll Söma die deutsche Grammatik genug kennen um ohne Googletranslate zu schreiben.
                          Ответить
                          • Kannst du es, Schweinehund?
                            Что такое зёма?
                            Ответить
                            • Кстати, а как будет "Сёма"? Ssöma/ẞöma?
                              Или "Сёма" Германии настолько не нужен, что там это имя ни пером описать, ни в метро крикнуть?
                              Ответить
                              • Эсцет употребляется в исконно немецких словах. Удвоенное «s» иногда используют для передачи зарубежных названий, например, «Kalina krassnaja».

                                Иногда же ничего не удваивают. В этом случае либо помнят, из какого языка пришло слово и как оно в нём произносится (например, нужно помнить, что Sweatshirt пришло из английского и произносится примерно как [свитшо(р)т]), либо плюют на неаутентичность произношения .
                                Ответить
                              • Откуда тут столько знатоков немецкого? Задача для вас - напишите правильно Сёма по немецки. Kaschtschizin, ты тоже.
                                Ответить
                                • Происхождение имени.

                                  Имя Семён происходит от древнееврейского имени שִׁמְעוֹן (Шимон) - "Он (Бог) услышал".

                                  Немецкий аналог — Simon или Simeon. Уменьшительно-ласкательные варианты: Sim, Simi, Simmi, Simönchen, Simchen, Simche, Simke, Simme, Semme, Simmche, Simmele, Simmal, Simma, Simmerl.

                                  Естественно, во всех этих вариантах первый звук звонкий ([з], а не [с]).
                                  Ответить
                                • > Задача для вас - напишите правильно Сёма по немецки

                                  Hallo, ich heiße Linus Torvalds und ich spreche "Сёма" wie "Geh nach Python" aus.
                                  Ответить
                        • Schweinehrücken verboten!
                          Ответить
                        • Мои интструменты это языки программирования. Сраные глаголы любая прыщеблядь за три евро напишет
                          Ответить
                • finded/binded/readed/writed в инглише не так смешно, как в дойче geschissen вместо geschossen.
                  Ответить
                  • Спойлер для тех, кому лень гуглить:

                    https://de.wiktionary.org/wiki/schießen
                    https://de.wiktionary.org/wiki/scheißen
                    Ответить
        • напомнило
          Yes, English can be weird. It can be understood through tough thorough thought, though.
          Ответить
          • эти хотя бы все буквами отличаются, а не "Косил косой косой косой"
            Ответить
          • "Since only two of our tape drives were in working order I was ordered to order more tape units in short order, in order to order the data several orders of magnitude faster
            Ответить
      • >length неправильно написано
        имхо, в компиляторы надо включать проверку орфографии
        Ответить
        • Во всех современных ide она уже есть, так что в компиляторы излишне.
          Ответить
    • - Ну вот, - отвечает, - это и есть моя главная проблема на сегодняшний день: как сделать так, чтобы даже поллюций не было.
      Ответить

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