Найти координаты вершины параболы по трем заданым точкам - C (СИ)
Формулировка задачи:
Помогите написать функцию. Точки задаются в коде. Как из функции вернуть два значения?
main(){
float x1=1,y1=1;
float x2=5,y1=30;
float x3=9.5,y1=13;
VerPar(x1,y1,x2,y2,x3,y3)
printf("x0=%f y0=%f", ???)
}
предварительно так, но компилятору не нравится что перед символом & нехватает ; ,
int VerPar(float x1,float y1,float x2,float y2,float x3,float y3,float &X,float &Y )
{
// 1(1, -2) 2(-1, 6) 3(2, 3) -> A=3 B=-4 C=-1
// 1(1, 0) 2(-1, -4) 3(2, -7) -> A=3 B=2 C=1
float A,B,C;
//A
A=(y3-( (x3*(y2-y1)+x2*y1-x1*y2) / (x2-x1))) /(x3*(x3-x1-x2)+x1*x2);
printf("A=%f ",A);
//B
B= (y2-y1)/(x2-x1) - A*(x1+x2);
printf("B=%f ",B);
//C
C= ( (x2*y1-x1*y2) / (x2-x1) )+A*x1*x2;
printf("С=%f /n",С);
}
У меня не получилось работать с указателями. Пришлось объявлять глобальные переменные. Просьба проверить работает ли алгоритм на произвольных данных. Подскажите, как можно возвращать из функции несколько значений?
#include <stdio.h>
#include <stdlib.h>
float x0,y0;
void VerPar(float x1,float y1,float x2,float y2,float x3,float y3)
{
// 1(1, -2) 2(-1, 6) 3(2, 3) -> A=3 B=-4 C=-1
// 1(1, 0) 2(-1, -4) 3(2, -7) -> A=3 B=2 C=1
float A,B,C;
A=(y3-( (x3*(y2-y1)+x2*y1-x1*y2) / (x2-x1))) /(x3*(x3-x1-x2)+x1*x2);
printf("A=%f ",A);
B= (y2-y1)/(x2-x1) - A*(x1+x2);
printf("B=%f ",B);
C= ( (x2*y1-x1*y2) / (x2-x1) )+A*x1*x2;
printf("C=%f \n",C);
x0= -(B/(2*A));
y0= - ( (B*B-4*A*C) / (4*A) );
}
int main()
{
VerPar(-1,2,1,2,2,5); // вершина (0;1)
printf("x0=%f ",x0);
printf("y0=%f \n",y0);
VerPar(-6,-6,-4,0,2,-6); // вершина (-2;2)
printf("x0=%f ",x0);
printf("y0=%f \n",y0);
return 0;
}Решение задачи: «Найти координаты вершины параболы по трем заданым точкам»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void VerPar(float *x0,float *y0, float x1,float y1,float x2,float y2,float x3,float y3)
{
float A,B,C;
A=(y3-( (x3*(y2-y1)+x2*y1-x1*y2) / (x2-x1))) /(x3*(x3-x1-x2)+x1*x2);
printf("A=%f ",A);
B= (y2-y1)/(x2-x1) - A*(x1+x2);
printf("B=%f ",B);
C= ( (x2*y1-x1*y2) / (x2-x1) )+A*x1*x2;
printf("C=%f \n",C);
*x0= -(B/(2*A));
*y0= - ( (B*B-4*A*C) / (4*A) );
}
int main()
{
float x0,y0,x1,y1,x2,y2,x3,y3;
while(1)
{
printf("Input 3 points\n");
printf ( "x1= " ), scanf ("%f",&x1);
printf ( "y1= " ), scanf ("%f",&y1);
printf ( "x2= " ), scanf ("%f",&x2);
printf ( "y2= " ), scanf ("%f",&y2);
printf ( "x3= " ), scanf ("%f",&x3);
printf ( "y3= " ), scanf ("%f",&y3);
VerPar(&x0,&y0,x1,y1,x2,y2,x3,y3);
printf("x0=%f ",x0);
printf("y0=%f \n",y0);
}
return 0;
}