#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
/* declaración de variables */
float lado;
float lado2;
float lado3;
float area;
float s;
/* Cabecera */
printf("**********************************************\n");
printf("***** CALCULADOR DE AREAS DE TRIANGULO *******\n");
printf("**********************************************\n\n");
/* Introducción de datos */
INTRODUCCION_DATOS:
printf("Introduce el valor de uno de los lados, al que llamaremos lado\n");
scanf("%f", &lado);
printf("Introduce el valor de otro de los dos lados, al que llamaremos lado2\n");
scanf("%f", &lado2);
printf("Introduce el valor del ultimo lado al que llamaremos lado3\n");
scanf("%f", &lado3);
if(lado+lado2<lado3 || lado+lado3<lado2 || lado2+lado3<lado){
printf("\n\nOK. Estos, son los datos que has introducido:\n Lado 1 = %f \n Lado 2 = %f\n Lado 3 = %f\n\n", lado, lado2, lado3);
/*OPERACIONES*/
s=(lado+lado2+lado3)/2;
area=sqrt(s*(s-lado)*(s-lado2)*(s-lado3));
printf("El area para de tu triangulo es\nAREA = %f\n\n", area);
}
else {
printf("\n\nNo se puede calcular el area.\n");
printf("La suma de dos de los lados no puede ser mayor que el lado mas grande\n\n");
goto INTRODUCCION_DATOS;
}
system("PAUSE");
}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
/* declaración de variables */
float lado;
float lado2;
float lado3;
char otra_vez;
float area;
float s;
/* Cabecera */
printf("**********************************************\n");
printf("***** CALCULADOR DE AREAS DE TRIANGULO *******\n");
printf("**********************************************\n\n");
/* Introducción de datos */
INTRODUCCION_DATOS:
printf("Introduce el valor de uno de los lados, al que llamaremos lado\n");
scanf("%f", &lado);
printf("Introduce el valor de otro de los dos lados, al que llamaremos lado2\n");
scanf("%f", &lado2);
printf("Introduce el valor del ultimo lado al que llamaremos lado3\n");
scanf("%f", &lado3);
if(lado+lado2<lado3 || lado+lado3<lado2 || lado2+lado3<lado){
printf("\n\nOK. Estos, son los datos que has introducido:\n Lado 1 = %f \n Lado 2 = %f\n Lado 3 = %f\n\n", lado, lado2, lado3);
/*OPERACIONES*/
s=(lado+lado2+lado3)/2;
area=sqrt(s*(s-lado)*(s-lado2)*(s-lado3));
printf("El area para de tu triangulo es\nAREA = %f\n\n", area);
printf("Quieres calcular otro area?(s/n)\n\n");
scanf("%c", &otra_vez);
if(otra_vez == s){
goto INTRODUCCION_DATOS;
}
else{
system("EXIT");
}
}
else {
printf("\n\nNo se puede calcular el area.\n");
printf("La suma de dos de los lados no puede ser mayor que el lado mas grande\n\n");
goto INTRODUCCION_DATOS;
}
system("PAUSE");
}
danitxu escribió:Hola bspz,
primero de todo deberias de incializar las variables que usas, como el lado, lado2, etc...
Pienso que lo más sencillo sería pedirle al usuario sólo 2 datos, base y altura.
El área de un triángulo es (base * altura) / 2
Creo que así debería ser más fácil.
Salu2, y no te desanimes.
danitxu escribió:(sqrt(s*(s-lado)*(s-lado2)*(s-lado3))
¿De donde sale está fórmula?![]()
nu se.
#include
#include
int main()
{
float lado1,lado2,lado3,s,area;
printf("Introduce el lado 1: ");
scanf("%f",&lado1);
printf("Introduce el lado 2: ");
scanf("%f",&lado2);
printf("Introduce el lado 3: ");
scanf("%f",&lado3);
s=(lado1+lado2+lado3)/2;
area=sqrt(s*(s-lado1)*(s-lado2)*(s-lado3));
printf("El área del triángulo es: %g\n",area); /* El %g es para que no te salgan tantos decimales.
Por pura razón de estética */
}
zheo escribió:¿Comprobais que dada esa longitud de lados se puede formar un triángulo?
Por otro lado, para lo de la introducción de datos tienes que cambiar las líneas 32 y 33:
scanf(" %c", &otra_vez);
if(otra_vez == 's'){
Delante del %c hay ahora un espacio. El fallo que tenías es porque el caracter retorno de carro (el enter) se queda en el buffer, y cuando haces un scanf, lo recoge.
Por otro lado tienes que poner el caracter entre comillas, para indicar que es un literal.
El fallo viene porque cuando el semiperímetro es más pequeño que uno o que los tres lados, éste sale negativo, y la raíz de un negativo no es un número real.
Por otro lado hay un error en el programa de bpsc. Al meter los lados 4,5,6.4 da un error, cuando es un triángulo rectángulo válido:
4^2 + 5^2 = 6.4^2
Esos mismos datos en el programa de Moki_X dan como resultado del área 9.99999, que es correcto (debería ser 10, pero hay que contar con los errores de redondeo)
if(lado+lado2<lado3 || lado+lado3<lado2 || lado2+lado3<lado){
[...]
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
/* declaración de variables */
float hipotenusa,cateto1,cateto2,area,s;
char otra_vez;
/* Cabecera */
printf("*CALCULADOR DE AREAS DE TRIANGULO*\n\n\n");
/* Introducción de datos */
INTRODUCCION_DATOS:
printf("Introduce el valor de la hipotenusa: ");
scanf("%f",&hipotenusa);
printf("Introduce el valor del cateto 1: ");
scanf("%f",&cateto1);
printf("Introduce el valor del cateto 2: ");
scanf("%f",&cateto2);
if(cateto1+cateto2>hipotenusa){
printf("\n\nEstos, son los datos que has introducido:\n Hipotenusa = %f \n Cateto 1 = %f\n Cateto 2 = %f\n\n", hipotenusa, cateto1, cateto2);
/*OPERACIONES*/
s=(hipotenusa+cateto1+cateto2)/2;
area=sqrt(s*(s-hipotenusa)*(s-cateto1)*(s-cateto2));
printf("El area para de tu triangulo es\nAREA = %g\n\n",area);
printf("Quieres calcular otro area?(s/n) ");
scanf("\n\n%c",&otra_vez);
/*CALCULAR OTRO AREA*/
if(otra_vez == 's'){
goto INTRODUCCION_DATOS;
}
else{
system("EXIT");
}
}
else {
printf("\n\nNo se puede calcular el area.\n");
printf("La suma de catetos no puede ser mayor que la hipotenusa\n\n");
goto INTRODUCCION_DATOS;
}
system("PAUSE");
}
)En clase han dicho algo de "fflush(sdio);" para borrar el buffer y que funcione de nuevo el scanf (según parece es un problema del compilador), pero lo he probado poniendolo delante del scanf y na, me da error al compilar, lo que ni idea de si es así, hay que incluir alguna libreria, o no se... :S
handyman escribió:Es fflush(stdin), pero NO es ANSI C (Sólo funciona en Windows porque así lo quiso Bill Gates).
Alberich escribió:Pero no uses gotoooooo. Mete todo dentro de una estructura do...while que se repita mientras otra_vez sea igual a 's'.
Aracem escribió:Te enseñan con goto!?????????????????????????????
Tenia un profesor en la politecnica de madrid que decía que la programación con goto es basura y de programadores pesimos.
como te enseñan eso?
P.D.: ewok, cerote cerote de los grandes, ni lo miraban.
jonkoman escribió:Nadie responde...
- Porque hay que usar goto para el tratamiento de errores.
) estructura de datos y tal en PASCAL... me siento marginado entre tanto C
es más, en fundamentos de redes usamos ADA ya que un año lo hicieron con C y todo era problemas por la libertad que te da para hacer barbaridades y que el compilador ni se cosque
.
juas escribió:Es cosa rara por lo que parece cursar esas asignaturas en pascal y no en C no?
).
Alberich escribió:Pero no uses gotoooooo. Mete todo dentro de una estructura do...while que se repita mientras otra_vez sea igual a 's'.
#include <stdio.h>
#include <math.h>
int main() {
/* declaración de variables */
float hipotenusa,cateto1,cateto2,area,s;
char otra_vez;
/* Cabecera */
printf("*CALCULADOR DE AREAS DE TRIANGULO*\n\n\n");
/* Introducción de datos */
printf("Introduce el valor de la hipotenusa: ");
scanf("%f",&hipotenusa);
printf("Introduce el valor del cateto 1: ");
scanf("%f",&cateto1);
printf("Introduce el valor del cateto 2: ");
scanf("%f",&cateto2);
do{
if(cateto1+cateto2>hipotenusa){
printf("\n\nEstos, son los datos que has introducido:\n Hipotenusa = %f \n Cateto 1 = %f\n Cateto 2 = %f\n\n", hipotenusa, cateto1, cateto2);
/*OPERACIONES*/
s=(hipotenusa+cateto1+cateto2)/2;
area=sqrt(s*(s-hipotenusa)*(s-cateto1)*(s-cateto2));
printf("El area para de tu triangulo es\nAREA = %g\n\n",area);
printf("Quieres calcular otro area?(s/n) ");
scanf("\n\n%c",&otra_vez);
}
else {
printf("\n\nNo se puede calcular el area.\n");
printf("La suma de catetos no puede ser mayor que la hipotenusa\n\n");
printf("Quieres calcular otro area?(s/n) ");
scanf("\n\n%c",&otra_vez);
}
}while(otra_vez == 's');
}
zheo escribió:¿Comprobais que dada esa longitud de lados se puede formar un triángulo?
s4ur0n escribió:
Una pequeña aclaracion. Con 3 rectas de longitud cualquiera siempre se puede formar un tirangulo, por lo que no es necesario comprobar si con esas longitudes introducidas se puede formar un triangulo, ya que siempre habra uno. Otra cosa es si te pidiesen un triangulo especifico, como equilatero, rectangulo o isosceles.
s4ur0n escribió:Una pequeña aclaracion. Con 3 rectas de longitud cualquiera siempre se puede formar un tirangulo, por lo que no es necesario comprobar si con esas longitudes introducidas se puede formar un triangulo, ya que siempre habra uno. Otra cosa es si te pidiesen un triangulo especifico, como equilatero, rectangulo o isosceles.
Alberich escribió:
Si uno de los segmentos es más corto que la suma de los otros dos no se puede formar un triángulo, simplemente porque los extremos no llegan a unirse.
s4ur0n escribió:Por cierto, es justamente al contrario de como lo dices. Si la suma de los dos mas pequeños es menor o igual que la longitud del segmento mayor no se formara un triangulo.
Alberich escribió:
LOL
Al rico owned![]()
s4ur0n escribió: zheo tenia razon
#include <stdio.h>
#include <math.h>
int main() {
/* declaración de variables */
float hipotenusa,cateto1,cateto2,area,s;
char otra_vez;
/* Cabecera */
printf("*CALCULADOR DE AREAS DE TRIANGULO*\n\n\n");
/* Introducción de datos */
do{
printf("Introduce el valor de la hipotenusa: ");
scanf("%f",&hipotenusa);
printf("Introduce el valor del cateto 1: ");
scanf("%f",&cateto1);
printf("Introduce el valor del cateto 2: ");
scanf("%f",&cateto2);
if(cateto1+cateto2>hipotenusa){
printf("\n\nEstos, son los datos que has introducido:\n Hipotenusa = %f \n Cateto 1 = %f\n Cateto 2 = %f\n\n", hipotenusa, cateto1, cateto2);
/*OPERACIONES*/
s=(hipotenusa+cateto1+cateto2)/2;
area=sqrt(s*(s-hipotenusa)*(s-cateto1)*(s-cateto2));
printf("El area para de tu triangulo es\nAREA = %g\n\n",area);
printf("Quieres calcular otro area?(s/n) ");
scanf("\n\n%c",&otra_vez);
}
else {
printf("\n\nNo se puede calcular el area.\n");
printf("La suma de catetos no puede ser mayor que la hipotenusa\n\n");
printf("Quieres calcular otro area?(s/n) ");
scanf("\n\n%c\n\n",&otra_vez);
}
}while(otra_vez == 's');
}
).
Por cierto, os agradecería que de momento no pegarais codigo al respecto que se me van los ojos jaja