Problema con C


9 respuestas [Último]
Imagen de Qorin
Qorin
96 puntos

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
2376 puntos

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)
0 puntos

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)
0 puntos

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 Angus1976
Angus1976 (no verificado)
0 puntos

calla

saludos

Imagen de Uncle_Unnamed
Uncle_Unnamed
98 puntos

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)
0 puntos

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

Imagen de BatchDrake
BatchDrake (no verificado)
0 puntos

system("pause");

Uffff

Imagen de Angus1976
Angus1976 (no verificado)
0 puntos

jajajajaj hostia si

saludos

Imagen de Angus1976
Angus1976 (no verificado)
0 puntos

FAGAS xDD

saludos