hola chicos vereis me estoy iniciando en esto de la programacion en c utiizo el dev-C++ y estoy haciendo un programa el cual dado dos lados haya todos los angulos q posee el triangulo.el problema esta en q me compila pero a la hora de ejecutar despues de meter los datos salta, dejandome a dos velas he buscado un monton por internet y han aunque he encontrado cosas parecidas no lo he logrado.
Os dejo el codigo para q m critiqueis y sacamos algo en claro.
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define PI 3.14159265
int main()
{
int a,base,d,c,A,B,C,l;
printf("Introduce altura: ");
scanf("%i",&a);
printf("Introduce base: ");
scanf("%i",&l);
c = sqrt((a^2)+(l^2));
A = acos((l*l+c*c-a*a)/(2*l*c))*180/PI;
B = acos((a*a+c*c-l*l)/(2*a*c))*180/PI;
C = acos((a*a+l*l-c*c)/(2*a*l))*180/PI;
printf("A tiene %.1i \n",A);
printf("B tiene %.1i \n",B);
printf("C tiene %.1i \n",C);
return(0);
}
Copiando y pegando tu codigo en el codeblocks y dandole unos valores me rula, ya no comprobe si el resultado que da debe ser el correcto o no.
Aqui screen:
(http://file:///C:/Piury/Pruebas/Imagenes%20internet/Respuesta_El_Hacker.png)
Sin profundizar mucho en el codigo, a primera vista veo que tienes variables sin utilizar, aunque eso no influye en el funcionamiento del programa, te recomiendo que las borres si no las usas (base, d).
Luego, veo que en la sentencia c = sqrt((a^2)+(l^2)), utilizas ^para elevar al cuadrado. No se hace asi, o utilizas una funcion de la biblioteca math.h (que supongo que tendra una funcion para calcular los cuadrados) o simplemente lo cambias por a*a y l*l.
Saludos.
muchas gracias por responderme ya he cambia esas cosillas, lo compilo y lo hace anque abajo me pone/ warning converting to "int" from "double" en las lineas en las q hago las operaciones, asu ves me deja compilar pero al ejecutar introduzco los datos altura y base y luegono m sale nada es como si el programa termine ai os dejo el codigo retocado
PD: quite la libreria conio.h gracias a los post de arriba q me he ido leyendo jejeje
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main()
{
int a,c,A,B,C,l;
printf("Introduce altura: ");
scanf("%i",&a);
printf("Introduce base: ");
scanf("%i",&l);
c = sqrt((a*a)+(l*l));
A = acos((l*l+c*c-a*a)/(2*l*c))*180/PI;
B = acos((a*a+c*c-l*l)/(2*a*c))*180/PI;
C = acos((a*a+l*l-c*c)/(2*a*l))*180/PI;
printf("A tiene %.1i \n",A);
printf("B tiene %.1i \n",B);
printf("C tiene %.1i \n",C);
return(0);
}
PD2:estoy utilizando el dev-C++ no se si sera bueno pero es con el q me enseñaron en la uni
Pon system("PAUSE") justo encima del return 0, a ver si va a ser por eso xD
con el system pause no me compila me da error en la linea scanf("%i",&l); o en la de debajo
21 [Warning] converting to `int' from `double' me sale este error.
Cambia los valores de las variables a double, dado que stas haciendo operaciones que te van a devolver decimales.
Mm y si no te va el system("PAUSE")... prueba a hacertelo tu manualmente, es decir:
char x;
printf("Presione una tecla para continuar");
scanf("%c",&x);
En vez de system("pause") utiliza la funcion de la libreria stdio.h:
getchar();
Si sigue sin dar el resultado esperado miro un poco el codigo aver si veo el fallo.
Un saludo
ahora me sale pero los numeros no concuerdan con los datos =hay algun fallo en los operandos y no lo veo, dejo el codigo para q se vea mejor
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main()
{
char x;
double a,c,A,B,C,l;
printf("Introduce altura: ");
scanf("%d",&a);
printf("Introduce base: ");
scanf("%d",&l);
c = sqrt((a*a)+(l*l));
A = acos((l*l+c*c-a*a)/(2*l*c))*180/PI;
B = acos((a*a+c*c-l*l)/(2*a*c))*180/PI;
C = acos((a*a+l*l-c*c)/(2*a*l))*180/PI;
printf("A tiene %.1d \n",A);
printf("B tiene %.1d \n",B);
printf("C tiene %.1d \n",C);
printf("Presione una tecla para continuar");
scanf("%c",&x);
getchar();
return(0);
}
tras estarlo mirando ytal creo q el problema esta en las operaciones matematicas sinembargo no consigo ver el error
Ten en cuenta que el valor devuelto por la función acos es el arco coseno de X expresado en radianes.
Saludos.
Edito, ya veo que lo transformas a grados
no el problema del programa creo q mas bn es en las operaciones pero no se q esta mal
alguien??
Cita de: dvaid en 27 Agosto 2011, 01:11 AM
alguien??
A ver, ¿exactamente qué le ocurre al programa? (no se ejecuta, se ejecuta pero da resultados erróneos...).
El problema se debe a que estas utilizando "%d" (correcto para leer e imprimir valores de tipo "int").
Para leer valores de tipo "double" con scanf debes utilizar "%lf" y para imprimirlos con printf utiliza "%f".
Un saludo
rir3760 muchisismas gracias ese era el problema,como siempre en C lo mas tonto es siempre lo mas complicado de encontrar,no dudes ni un momento en pedirme ayuda para cualquier cosa.mas tarde subire el programa para todo aquel q este interesado.
Pd:mucisimas grais otras no sabes cuantos cabezazzos me e dado contra la pared cuando vi la tonteria q era,