Написание программы в С
Программа для вычисления длин сторон прямоугольного треугольника и его площади (вычисление длины должно быть оформлено в виде функции).
Вот собственно мои не особо успешные труды:
#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));
}