Найти координаты вершины параболы по трем заданым точкам - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы