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

    +2

    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
    double vvod (double a1, double a2, double a3) {
     
    // a1=a a2=b a3=c
     
    	cout<<"Введите значение коэфицента a: ";
    	cin>>a1;
    	cout<<endl;
    	cout<<"Введите значение коэфицента b: ";
    	cin>>a2;
    	cout<<endl;
    	cout<<"Введите значение коэфицента c: ";
    	cin>>a3;
    	cout<<endl;
    	return (a1);
    	return (a2);
    	return (a3);
    }

    Оказывается в С++ можно возвращать 3 значения из функции
    http://ideone.com/tGWRpl - полная версия.

    Запостил: pabloid, 05 Сентября 2013

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

    • yield не?
      Ответить
    • сентябрь, школьные лабы начались
      в фортране по ссылке по умолчанию передача, там бы работало
      Ответить
      • Судя по ебанутым именам в духе a1, a2, a3 это действительно прямой порт с фортрана...
        Ответить
        • В фортране немного по другому.
          Ответить
          • > немного по другому.
            Вроде бы переменные, начинающиеся на i-n определялись как целые, а остальные как вещественные? Я в чем-то тупанул? Поясните плиз, как там должно быть...

            P.S. Есть преподы, которые на лабах по фортрану заставляют студентов вместо нормальных имен юзать говно в духе n1, n2, n3...
            Ответить
    • я в cpp не силен, но не по ссылки ли он присваивает значения?
      Ответить
      • нет.
        Ответить
      • Возвращается только а1.
        Ответить
        • Есть ли жизнь после return...
          Ответить
          • Есть, но недолго:
            http://coliru.stacked-crooked.com/a/6d42fe38b7757743
            P.S. Извините за процедурный стиль, я больше не буду :)
            Ответить
            • Плохо понял код, но хомяк их арифметикой указателей просто сдёрнул со стека?
              Ответить
              • Ага, правда, не разбирался, что за хрень с порядком извлечения значений.
                Ответить
                • Наверняка Борманд знает в чём дело с порядком.
                  user@gk/~>summon @bormand_
                  Ответить
                • Х.б.з. UB такой UB. Мне на моей машине пришлось пофиксить порядок на нормальный (собирал с -O0):
                  get_result[0] = *(&getter-1);
                  get_result[1] = *(&getter-2);
                  get_result[2] = *(&getter-3);
                  А с -O2 вообще не пашет, т.к. компилятор заинлайнил get().
                  Ответить
            • По-царски сделано!
              Ответить
          • Есть, если сделать
            #define return
            :)
            Ответить
    • return std::make_tuple(a1, a2, a3);
      Ответить
    • Кстати, кто-нибудь под кресты, может из буста или другой библиотеки знает о аналоге yield return?
      Ответить
      • Ну boost::coroutine где-то в опасной близости от yield.
        Ответить
        • А как же код от мастера, демонстрирующий близость к елде?

          PS: Пля, когда уже liveworkspace.org заработает. Я буду жаловаться.
          Ответить
          • http://www.boost.org/doc/libs/1_54_0/libs/coroutine/doc/html/coroutine/coroutine.html

            Вот тут в главах Calling a coroutine или Transfer of data посмотри пример. Имхо самый натуральный yield.
            Ответить
    • Надо было просто return a1, a2, a3; написать.
      Ответить
      • Тогда функцию надо объявить как
        double, double, double vvod() {
            // ...
            return a1, a2, a3;
        }
        Иначе компилятор не поймет, и вернет только a3.
        Ответить
        • double, double, double:nth-child(n) { ... }
          аналог nth-value.
          Ответить
      • А разве скобки не нужны, если более одного значения?
        Ответить
        • Здесь нет неоднозначности, так что не нужны.
          Ответить
    • Судя по ideone, "Уравнение имеет один корень x=-nan". Хорошо, что не 2*pi*nan.
      Ответить
      • Задача: добавьте три символа так, чтобы этот код начал работать.

        P.S. Я не пойму логику автора... Неужели ему действительно удобнее оперировать a1, a2, a3 нежели a, b, c?
        Ответить
        • > diskr(a,b,c);
          > cout << "Дискриминант равен: " << d << endl;
          Пришло время сохранить дискриминант в переменную. Дискриминант сам не сохранится... Я сохраняю дискриминанты каждый день...
          Ответить
    • > pow(dis, 0.2)
      Зачем тут корень пятой степени? O_o
      Ответить
      • > Неужели ему действительно удобнее оперировать a1, a2, a3 нежели a, b, c?
        dis=(a2*a2)-(4*a1*a3); смотрится как непонятная хрень.
        Может, автору рассказали о вреде однобуквенных переменных - и он решил использовать двухбуквенные?

        Хотя, может быть, это просто человек, далёкий от любых проявлений математики. Все запомнили D=b*b-4*a*c, а у него a1,a2,a3,...aN.
        Вот как раз и вычисление "квадратного" корня...
        Ответить
        • Кстати, a2 * x^2 + a1 * x + a0 имело бы смысл.
          Ответить
        • >Все запомнили D=b*b-4*a*c, а у него a1,a2,a3,...aN.
          Он тоже запомнил, ему в начале каждой процедуры приходится себе напоминать // a1=a a2=b a3=c
          Ответить
    • кот фигня, не стоит заморачиваться.
      Ответить
    • Нафига тут эта хрень?!
      Ответить
      • Астрологи объявили месяц школоты и студентоты. Прирост лаб на ГК удваивается.
        Ответить
        • А население серверов уменьшается вдвое
          Ответить
          • Это уже месяц чумы.
            Ответить
            • Стан олдфагов поразила бубонная чума. Отряды Тараса с позором бегут с поля брани. Боевой дух войск орлежки повысился (теперь они могут заполонить объявлениями вдвое больше гомосячих сайтов).
              Ответить
        • По традиции, месяц начинается каждую неделю.
          Ответить
    • Нихуя себе
      Ответить

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