Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Explicaciones PORFAVOR!

Estas en el tema de Explicaciones PORFAVOR! en el foro de C/C++ en Foros del Web. Hola que tal? saludos a todos aquellos que estan leyendo este post y agradesco de antemano los que se tomen la molestia de leerlo y ...
  #1 (permalink)  
Antiguo 02/02/2012, 01:09
 
Fecha de Ingreso: febrero-2012
Mensajes: 56
Antigüedad: 12 años, 3 meses
Puntos: 1
Explicaciones PORFAVOR!

Hola que tal?
saludos a todos aquellos que estan leyendo este post y agradesco de antemano los que se tomen la molestia de leerlo y ayudarme con mi problema

Bueno, pues esto esta asi:
hace ya 4 meses comence una carrera en programacion, la verdad es que me gusta mucho y estoy muy emosionado, sin embargo, todos mis compañeros ya antes habian tomado cursos o departe de la escuela les enseñaban, cosa que no paso conmigo :S entonces la carrera se me esta tornando muy dificil en este punto, puesto que ya me dejeron unos proyectos, y estos no corren, entonces me estoy desesperando, y comienzo a desanimarme en cuanto a la programacion...

¿ustedes que dicen?

Por Otro lado
Estoy elaborando un pequeño programilla en C el cual va a determinar las raices de una ecuacion cuadratica, y no me queda, me dice esto: undefined reference to `sqrt'
y pues ya busque como loco respuesta a esto, ya mire bastante por su foro, y he decidido crear una cuenta, pues mas que nada para que me ayuden PORFAVOR

Al tratar de compilar lo hago con gcc, y me gustarian respuestas con gcc, puesto que ese tenemos que usar

Aqui, enseguida, una copia de lo que he escrito ACLARO: no quiero que nadie me haga mi tarea ni mucho menos, yo busco una explicacion clara y detallada del problema, puesto que estoy buscando aprender

GRACIAS




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

main()
{
float a,b,c,x1,x2,x,disc,raiz;
printf("Este es un Programa que calcula las raices de una ecuacion cuadratica\n");
printf("Dame el valor de A\n");
scanf("%f",&a);
printf("dame el valor de B\n");
scanf("%f",&b);
printf("dame el valor de C\n");
scanf("%f",&c);

disc=b*b-4*a*c;

if(disc<0)

{
printf("Existen dos raices camplejas\n");
}

else
if(disc==0)
{
x1=(-1*b)/(2*a);
printf("El valor de X es: %.2f\n",x);
}
else
{
raiz=sqrt(disc);
x1=((-1*b)+raiz)/(2*a);
x2=((-1*b)-raiz)/(2*a);
printf("Los valores de X son %f y %f\n",x1,x2);
}
}




La verdad es que no se ni que hago :S
si violo alguna regla del foro o algo, porfavor decidmelo
  #2 (permalink)  
Antiguo 02/02/2012, 05:15
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Explicaciones PORFAVOR!

Para usar la funcion sqrt tienes que enlazar la libreria math a la hora de compilar. No funciona solo con el include.

gcc main.c -lm -o ejercicio.exe

Cada vez que uses la libreria math tienes que agregar el -lm para compilar.

Saludos
  #3 (permalink)  
Antiguo 02/02/2012, 05:18
Avatar de aos_26  
Fecha de Ingreso: enero-2012
Ubicación: Vila-seca, Tarragona, España
Mensajes: 5
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Explicaciones PORFAVOR!

Si te fijas el error que te da hace referencia a que la instrucción sqrt no esta definida.
Esto puede pasar por el echo de que el compilador no coja la librería math.h.

No se que compilador usas pero un ejemplo de como se arreglaría en Geany (Linux) seria el siguiente:

Construir> establecer comandos de construccion y añadimos -lm a esta linea:

Cita:
gcc -Wall -o "%e" "%f"

Queda de la siguiente manera:

Cita:
gcc -Wall -o "%e" "%f" - lm
  #4 (permalink)  
Antiguo 02/02/2012, 07:12
Avatar de NazcaiN  
Fecha de Ingreso: diciembre-2008
Ubicación: en mi pueblo
Mensajes: 228
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Explicaciones PORFAVOR!

hace poco que estoy programando en c++, y en mi tutorial dice que es imprescindible poner using namespace std; no creo que ese sea tu problema, pero mi pregunta es la siguiente ¿por qué si supuestamente es imprescindible poner using namespace std; tú no lo has puesto? es que quisiera saber para qué sirve :) muchas gracias!! ^^
__________________
había una vez un hombre tan sumamente pobre que sólo tenía dinero.
  #5 (permalink)  
Antiguo 02/02/2012, 08:33
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Explicaciones PORFAVOR!

Pasa que jordy48 esta usando C y no C++.

El codigo de C++ se suele encerrar entre sectores para que si combinas dos librerias no alla conflicto en funciones o metodos con el mismo nombre.
Para referirse a ese sector primero se pone el nombre del sector luego dos dos puntos "::" y luego el nombre del metodo funcion u objeto.

Mucha veces esto es inecesario entonces lo que se hace es usar el:
using namespace std;

De esta forma nos evitamos de anteponer std:: cada vez que queremos usar el cout o el cin y muchas otras cosas mas.

Espero que allas entendido.
  #6 (permalink)  
Antiguo 02/02/2012, 16:19
Avatar de NazcaiN  
Fecha de Ingreso: diciembre-2008
Ubicación: en mi pueblo
Mensajes: 228
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Explicaciones PORFAVOR!

Gracias por la explicación, he estado mirando los conceptos clave (que no entendía) en internet, y ahora si me quedó claro :) Muchas gracias!!!
__________________
había una vez un hombre tan sumamente pobre que sólo tenía dinero.
  #7 (permalink)  
Antiguo 02/02/2012, 16:50
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Explicaciones PORFAVOR!

Cita:
Iniciado por jordy48 Ver Mensaje

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

main()
{
float a,b,c,x1,x2,x,disc,raiz;
printf("Este es un Programa que calcula las raices de una ecuacion cuadratica\n");
printf("Dame el valor de A\n");
scanf("%f",&a);
printf("dame el valor de B\n");
scanf("%f",&b);
printf("dame el valor de C\n");
scanf("%f",&c);

disc=b*b-4*a*c;

if(disc<0)

{
printf("Existen dos raices camplejas\n");
}

else
if(disc==0)
{
x1=(-1*b)/(2*a);
printf("El valor de X es: %.2f\n",x);
}
else
{

//raiz=sqrt(disc);
// prueba esto otro

raiz = Math.sqrt(disc);

x1=((-1*b)+raiz)/(2*a);
x2=((-1*b)-raiz)/(2*a);
printf("Los valores de X son %f y %f\n",x1,x2);
}
}
Prueba lo que está en negrita.
No es sólo enlazar la librería mátemática, tienes que llamar a sus funciones explícitamente.

Si no te funciona, busca documentación online sobre Math.sqrt();
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #8 (permalink)  
Antiguo 02/02/2012, 17:03
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Explicaciones PORFAVOR!

Y eso de donde lo sacaste?
  #9 (permalink)  
Antiguo 02/02/2012, 17:40
 
Fecha de Ingreso: febrero-2012
Mensajes: 56
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Explicaciones PORFAVOR!

EDITADO:

Hola, bueno resulta que hice los pocos consejos que pude entender de lo que me dejaron, sin embargo ahora me aparece algo similar, es esto:
raiz.c: En la función ‘main’:
raiz.c:35:8: error: ‘Math’ no se declaró aquí (primer uso en esta función)
raiz.c:35:8: nota: cada identificador sin declarar se reporta sólo una vez para cada función en el que aparece


y pues la verdad me estoy desesperando que no le halle una solucion porque ya me voy quedando atras en esto :S
no se si podrian ayudarme plx!

Como datos complementarios para no producir ambiguedades y puedan ayudarme mejor les dare una pequeña informacion extra:
-Uso lenguaje C y unicamente lenguaje C
-Para compilar uso el GCC y para escribir el KWrite
-Un amigo me dijo que el lo soluciono poniendo esto: gcc raiz.c -lm, sin embargo a mi no me funciono


__________________________________________________ _________________________________
-------------------------------------------------------------------------------------------------------------------------------------------------

Muchas gracias por sus respuestas, algunas mas explicitas que otras, pero estoy agradecido por las molestias que se tomaron, ahora mismo ire a probar cual de todas estas mes sirve, y les mantendre comunicados

Saludos

Última edición por jordy48; 02/02/2012 a las 22:30
  #10 (permalink)  
Antiguo 03/02/2012, 04:53
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Explicaciones PORFAVOR!

Tranquilo, el código está bien. El único problema es la raiz, por lo que buscamos en la documentacion online haber si encontramos como llamar a la función que está dentro de la librería math.h

Una vez estuve dos días buscando como se llamaba a la función sinus. No veas lo desesperante que es.
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #11 (permalink)  
Antiguo 03/02/2012, 05:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Explicaciones PORFAVOR!

Que hay en la linea ocho de tu codigo..??

No sigas el consejo de Math.sqrt(disc); porque no es cierto. Sacale el "Math."
  #12 (permalink)  
Antiguo 03/02/2012, 08:08
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Explicaciones PORFAVOR!

Hola! es como dice sam90 saca el Math.srqt(disc) y deja el codigo como tenias. Yo tambien uso gcc pero es raro que no t compile con: gcc raiz.c -o raiz -lm

Saludos
  #13 (permalink)  
Antiguo 03/02/2012, 08:54
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Explicaciones PORFAVOR!

Sam90 tiene razón, eso de Math.sqrt() no sirve.

Mira compilé tu programa y me funciona tal y como está, como esta tu original del principio, lo único que he tenido que darle las opciones de enlazar las librerías

gcc -o raiz raiz.c -lm

Me crea el ejecutable

/.raiz

Me ejecuta el programa sin problemas. Tendría que funcionarte.

[URL=http://www.fismat.umich.mx/mn1/manual/node16.html]Documentación Online de la Librería matemática[/URL]

Para las opciones busca en el internete hay mucha documentación pero el -l es para las librerías.
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.

Última edición por caperutxa; 03/02/2012 a las 08:56 Razón: El enlace no se ve como toca¿?
  #14 (permalink)  
Antiguo 04/02/2012, 16:18
 
Fecha de Ingreso: febrero-2012
Mensajes: 56
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Explicaciones PORFAVOR!

Muchas gracias a todos por sus respuestas, estoy deberas muy agradecido por la ayuda brindada, y en cuanto a mi problema, ya lo solucione :D

lo que pasaba era que al terminar yo de compilar, no sabia como encontrar el ejecutable, pero ya se como se hace.
ahora mi unico problemilla son las cadenas haha, asi que tengan por seguro que estare preguntando por el foro ;)

Gracias
Salu2

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:29.