Написание программы в С

Программа для вычисления длин сторон прямоугольного треугольника и его площади (вычисление длины должно быть оформлено в виде функции).

Вот собственно мои не особо успешные труды:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void sidelength(int numb1, int numb2, int numb3, int numb4, int i)
{
    float len[3] = { 0 };
    float length = sqrt(pow((numb2 - numb1), 2) + pow((numb4 - numb3), 2));//довжина сторони
    len[i] = length;
    printf("\nlength %f", length);
    printf("\nlength %f", len[i]);
    if (i == 2)
    {
        float p = (len[0] + len[1] + len[2]) / 2;//error(півпериметр)
        float square = sqrt(fabs(p * (p - len[0]) * (p - len[1]) * (p - len[2])));//error(площа прямокутного трикутника)
        printf("\n! %f", p);
        printf("\n! %f", square);
        printf("\nlength %f %f %f", len[0], len[1], len[2]);
    }

}

void main()
{
    for (int i = 0; i < 3; i++)
    {
        int x1;
        int x2;
        int y1;
        int y2;
        printf("Enter x1:");
        scanf("%d", &x1);
        printf("Enter x2:");
        scanf("%d", &x2);
        printf("Enter y1:");
        scanf("%d", &y1);
        printf("Enter y2:");
        scanf("%d", &y2);
        sidelength(x1, x2, y1, y2, i);
        printf("\n");

    }
    
}

Проблема с массивом len[i] - он сохраняет только последнее значение.
Буду благодарен тому кто сможет предоставить исправленный код


Ответы (2 шт):

Автор решения: Akubik

полагаю что проблема в том что массив len[] нужно сделать более глобальным, да и ввод точек сделать лучше контролируемым, координат всего 6 достаточно а не как у Вас 12

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
float len[] = { 0, 0, 0 };
void sidelength(int numb1, int numb2, int numb3, int numb4, int i)
{
    
    float length = sqrt(pow((numb2 - numb1), 2) + pow((numb4 - numb3), 2));//довжина сторони
    len[i] = length;
    printf("\nlength %f", length);
    printf("\nlength %f", len[i]);
    if (i == 2)
    {
        float p = (len[0] + len[1] + len[2]) / 2;//error(півпериметр)
        float square = sqrt(fabs(p * (p - len[0]) * (p - len[1]) * (p - len[2])));//error(площа прямокутного трикутника)
        printf("\n! %f", p);
        printf("\n! %f", square);
        printf("\nlength %f %f %f", len[0], len[1], len[2]);
    }

}

void main()
{
    for (int i = 0; i < 3; i++)
    {
        int x1;
        int x2;
        int y1;
        int y2;
        printf("Enter x1:");
        scanf("%d", &x1);
        printf("Enter x2:");
        scanf("%d", &x2);
        printf("Enter y1:");
        scanf("%d", &y1);
        printf("Enter y2:");
        scanf("%d", &y2);
        sidelength(x1, x2, y1, y2, i);
        printf("\n");

    }
    
}

Пример IDEONE

И если немного упростить...

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

float sidelength(int numbx[], int numby[], int n, int n1)
{
    return sqrt(pow((numbx[n1] - numbx[n]), 2) + pow((numby[n1] - numby[n]), 2));//довжина сторони
}   

void main()
{
    float len[3], p, square;
    int x[3], y[3];
    
    for (int i = 0; i < 3; i++)
    {
        printf("\nEnter node x%d:", i);
        scanf("%d", &x[i]);
        printf("\nEnter node y%d:", i);
        scanf("%d", &y[i]);
        if(i > 0)
            len[i] = sidelength(x, y, i, i - 1);
    }
    len[0] = sidelength(x, y, 2, 0);
    p = (len[0] + len[1] + len[2]) / 2;//(півпериметр)
    square = sqrt(fabs(p * (p - len[0]) * (p - len[1]) * (p - len[2])));//(площа будь-якого трикутника)
    printf("\nSquare: %f", square);
    printf("\nLength: %f %f %f", len[0], len[1], len[2]);
} 

Пример тут IDEONE

→ Ссылка
Автор решения: Harry

Попробуйте так - с заданием не 6, а только 3 точек - вершин треугольника.

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

double length(double x1, double y1, double x2, double y2)
{
    x1 -= x2;
    y1 -= y2;
    return sqrt(x1*x1+y1*y1);
}

int main(int argc, const char * argv[])
{
    double x[3], y[3], l[3];
    for(int i = 0; i < 3; ++i)
    {
        printf("X Y of point %d : ", i+1);
        scanf("%lf %lf",&x[i],&y[i]);
    }

    for(int i = 0; i < 3; ++i)
    {
        l[i] = length(x[i],y[i],x[(i+1)%3],y[(i+1)%3]);
        printf("Length of edge %d: %lf\n", i+1,l[i]);
    }

    double p = (l[0] + l[1] + l[2])/2;

    double S = p*(p-l[0])*(p-l[1])*(p-l[2]);

    if (S < 0) printf("Non-exist triangle\n");
    else printf("Area of triangle = %lf\n", sqrt(S));

}
→ Ссылка