Problema con C

10 posts / 0 nuevo(s)
Ir al último post
Imagen de Qorin
Qorin
Desconectado
Poblador desde: 07/02/2010
Puntos: 96

Bueno...me sabe mal que todos los post sean míos pero allá va.

He empezado a trastear con C y he "intentado" hacer un programa que a partir de 2 numeritos enteros encuentre el modulo, como si se tratara de números complejos.

el código que llevo hecho hasta ahora es el siguiente:

#include <stdio.h>
#include <math.h>
main (){
  int real,imag,quad1,quad2;
  quad1=pow(real,2);
  quad2=pow(imag,2);
  printf("Nombre real\n");
  scanf("%d", &real);
  printf("Nombre imaginari\n");
  scanf("%d", &imag);
  printf("suma : %d\n", real+imag);
  printf("quadrat del real %d\n", quad1);
  printf("quadrat del imag %d\n", quad2);
  return 0;
}

Abro la terminal y escribo:

gcc primera.c /usr/lib/libm.a -o calc

Se me crea un archivo calc y lo ejecuto

./calc

Aquí empieza el problema, me pide el nombre real, inserto 2 por ejemplo.

Me pide numero imaginario, pongo 3.

Me muestra la suma correcta, que es 5.

Pero tanto el cuadrado del 1ro como el cuadrado del 2ndo me muestra -2147483648 una burrada vamos.

Creo que es problema de pow(x,y) relacionado con la librería math.h. Realmente esto de las librerías no lo entiendo mucho, dónde se encuentran? te las instalas con el paquete build-essential (que previamente tuve que instalar para el compilador gcc)?

Si alguien sabe la solución que me eche una mano porfavor

Hoygan grasias de hantebraso xD

Imagen de kawaku
kawaku
Desconectado
Poblador desde: 25/01/2009
Puntos: 2791

Si no has tenido errores de compilación (y así ha debido de ser ya que has podido ejecutar el programa) diría que el error no será por la biblioteca sino por otra cosa.

Hace mucho que no programo cosas matemáticas en C, pero diría (tras un primer vistazo a la referencia de math.h y pow(), y viendo el número que te da como resultado -¿overflow?) que podría ser un problema de tipos.

Prueba a declarar las variables con tipo double.

Imagen de BatchDrake
BatchDrake (no verificado)

Bueno, normal :S

Para empezar, estás usando pow con números enteros mosqueante. Pero lo que de veras hace que casque es que a pow le estás pasando variables que no has inicializado. Para que tu programa funcione, has de llamar a pow después de que las variables real e imag tengan un valor (o sea, después de su scanf correspondiente).

 

Imagen de BatchDrake
BatchDrake (no verificado)

Y math.h no es una librería, es un fichero de cabecera. La librería es /lib/libm.so o libm.a (la que sea). Para compilar programas que usen math.h es mejor que hagas así:

gcc programa.c -o programa -lm

Que te busca automáticamente el paradero de la librería matemática.

Imagen de BatchDrake
Angus1976 (no verificado)

calla

saludos

Imagen de Uncle_Unnamed
Uncle_Unnamed
Desconectado
Poblador desde: 31/01/2009
Puntos: 98

El printf es un coñazo, mejor asín:

#include<iostream>

#include<math.h>

using namespace std;

int main(){

int real,imag,q1,q2;

cout<<"Introduce un numero real: "<<endl;

cin>>real;

cout<<"Introduce un numero imaginario: "<<endl;

cin>>imag;

q1=pow(real,2);

cout<<"Cuadrado del real: "<<q1<<endl;

q2=pow(imag,2);

cout<<"Cuadrado del imaginario: "<<q2<<endl;

system("pause");

}

 

Donde el cin>> es los valores que entras a la consola y los cout<< los valores de salida.

I need a dirty woman... but a horse It´s OK too

Imagen de BatchDrake
BatchDrake (no verificado)

Ni cin, ni cout, ni los flujos existen en C. Eso es de C++.

Imagen de BatchDrake
BatchDrake (no verificado)

system("pause");

Uffff

Imagen de BatchDrake
Angus1976 (no verificado)

jajajajaj hostia si

saludos

Imagen de BatchDrake
Angus1976 (no verificado)

FAGAS xDD

saludos

 OcioZero · Condiciones de uso