Вопрос: Реш. кв. ур-ий, возврат по ссылке из функции

Тема в разделе "C/C++/C#", создана пользователем Rivass, 30 ноя 2010.

  1. Rivass

    Rivass Гость

    Вот я написал программу нахождения корней квадратного уравнения.
    Но дело в том что я не знаю как мне вывести именно корни найденные функцией.... Помогите пожалуйста разобраться...
    Код (C++):
    #include <stdio.h>
    #include <math.h>
    #include <iostream>
    double get_vr(double A,double B,double C)
    {
    double D=(B*B)-(4*A*C);
    double x=(-B+sqrt(D))/(2*A);
    double y=(-B-sqrt(D))/(2*A);
    if (D>=0)
    return 1;
    else
    return 0;
    }
    void main()
    {
    setlocale(LC_ALL,"Russian");
    double A,B,C,x,y;
    scanf_s ("%lf %lf %lf",&A,&B,&C);
    if (get_vr(A,B,C) == 1)
    printf_s("%lf %lf",&x,&y);
    else
    printf_s("Ошибка!");
    }
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну или сделать переменные глобальными (что не особо хорошо)...
    Или расширить функцию, и давать ей либо ссылку (как в моем примере), либо полноценный указатель (но ссылка - лучше и правельнее)

    Код (C++):
    #include <stdio.h>
    #include <math.h>
    #include <iostream>
    double get_vr(double A,double B,double C, double& kor1, double& kor2)
    {
    double D=(B*B)-(4*A*C);
    kor1 =(-B+sqrt(D))/(2*A);
    kor2 =(-B-sqrt(D))/(2*A);
    if (D>=0)
    return 1;
    else
    return 0;
    }
    void main()
    {
    setlocale(LC_ALL,"Russian");
    double A,B,C,x,y;
    scanf_s ("%lf %lf %lf",&A,&B,&C);
    if (get_vr(A,B,C,x,y) == 1)
    {
    printf_s("%lf %lf",x,y);
    }
    else
    printf_s("Ошибка!");
    }
    И кстати у тебя в printf_s - ошибка была, там не нужна ссылка на память, там нужно именно значение переменной (так что от туда символы & - нужно убрать)... Вот если бы scanf - был, то да, нам же в этом случае понадобиться записать значение, вот тут то и нужен адрес переменной, а для вывода только значение нужно... ;-)
     
  3. Rivass

    Rivass Гость

    DarkKnight125
    Огромное спасибо!!! теперь понял! Выручаешь уже в который раз, и не только меня))
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А вообще при таких типозированных характеристиках выходных, не плохо конечно заводить или структуру или класс....
    Ну конечно это не для такого рода задач, но все же...
    Примерно вот так:
    Код (C++):
    #include <stdio.h>
    #include <math.h>
    #include <iostream>

    struct TKvSist
    {
    double kor1;
    double kor2;
    double Deskremenant;
    bool isVeshest;
    };

    TKvSist get_vr(double A,double B,double C)
    {
    TKvSist Res;
    double D=(B*B)-(4*A*C);
    Res.Deskremenant = D;
    Res.kor1 =(-B+sqrt(D))/(2*A);
    Res.kor2 =(-B-sqrt(D))/(2*A);
    if (D>=0)
    Res.isVeshest = true;
    else
    Res.isVeshest = false;
    return Res;
    }
    void main()
    {
    setlocale(LC_ALL,"Russian");
    double A,B,C,x,y;
    scanf_s ("%lf %lf %lf",&A,&B,&C);
    TKvSist Answer = get_vr(A,B,C);
    if (Answer.isVeshest)
    {
    printf_s("%lf %lf",Answer.kor1,Answer.kor2);
    }
    else
    printf_s("Ошибка! Вещественных корней нет");
    }
     
Загрузка...

Поделиться этой страницей