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

  • Автор темы Rivass
  • Дата начала
R

Rivass

#1
Вот я написал программу нахождения корней квадратного уравнения.
Но дело в том что я не знаю как мне вывести именно корни найденные функцией.... Помогите пожалуйста разобраться...
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("Ошибка!");
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
Ну или сделать переменные глобальными (что не особо хорошо)...
Или расширить функцию, и давать ей либо ссылку (как в моем примере), либо полноценный указатель (но ссылка - лучше и правельнее)

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 - был, то да, нам же в этом случае понадобиться записать значение, вот тут то и нужен адрес переменной, а для вывода только значение нужно... ;-)
 
R

Rivass

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

DarkKnight

Well-known member
01.08.2010
653
0
#4
А вообще при таких типозированных характеристиках выходных, не плохо конечно заводить или структуру или класс....
Ну конечно это не для такого рода задач, но все же...
Примерно вот так:
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("Ошибка! Вещественных корней нет");
}