Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: rackdon en 12 de Mayo 2014, 13:16

Título: problema con funciones matemáticas básicas en C
Publicado por: rackdon en 12 de Mayo 2014, 13:16
Buenos dias.
Con el siguiente código intento crear una función que me pida un número y con ese número hacer las operaciones, pero no se puede porque me da error al compilar. Estoy empezando con las funciones y creo que no las he entendido del todo bien ya que sino creo que funcionaria. ¿me podríais echar una mano a ver donde está el error?

Muchisimas gracias

Código: [Seleccionar]
// Funciones matemáticas //

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

double numero (double x); //prototipo de funcion//

main()
{
      // raiz cuadrada //
      printf("***Raiz cuadrada***\n\n");
      numero;
      printf ("La raiz cuadrada del n%cmero introducido es: %.2lf \n\n", 163, sqrt(numero) );
     
      // funcion exponencial //
      printf("***funcion exponencial***\n\n");
      numero;
      printf("La funci%cn exponencial del n%cmero introducido es: %.2lf \n\n", 162, 163, exp (numero) );
     
      // logaritmo base e //
      printf("***Logaritmo base e***\n\n");
      numero;
      printf("El logaritmo base e del n%cmero introducido es: %.2lf \n\n", 163, log (numero) );
     
      // logaritmo base 10 //
      printf("***Logaritmo base 10***\n\n");
      numero;
      printf("El logaritmo base 10 del n%cmero introducido es : %.2lf \n\n", 163, log10 (numero) );
     
      // valor absoluto //
      printf("***Valor absoluto***\n\n");
      numero;
      printf("El valor absoluto del n%cmero introducido es: %.2lf \n\n", 163, fabs (numero) );
     
      // Redondear al entero más pequeño //
      printf("***Redondeo al entero m%cs peque%co no menor que el n%cmero introducido***\n\n", 160, 164, 163);
      numero;
      printf("El entero m%cs peque%co del n%cmero introducido, no menor que %cste es: %.0lf \n\n", 160, 164, 163, 130, ceil (numero));
     
      // Redondear al entero más grande //
      printf("***Redondeo al entero m%cs grande no mayor que el n%cmero introducido***\n\n", 160, 163);
      numero;
      printf("El entero m%cs grande del n%cmero introducido, no mayor que %cste es: %.0lf \n\n", 160, 163, 130, floor (numero));
     
      // X elevado a la potencia y //
      printf("x (n%cmero 1) elevado a la potencia y (n%cmero 2)\n\n", 163, 163);
      double x =0;
      numero;
      x = numero;
      numero;
      printf("El n%cmero 1 elevado a la potencia n%cmero 2 es: %.2lf \n\n", 163, 163, pow( x, numero) );
     
      // Residuo de x/y como un número de punto flotante //
      printf("***Residuo de num1/num2 como un n%cmero de punto flotante***\n\n", 163);
      numero;
      x = numero;
      numero;
      printf("El residuo de num1/num2 como un n%cmero de punto flotante es: %.2lf \n\n", 163, fmod (x, numero));
     
      // Seno trigonometrico //
      printf("***Seno trigonom%ctrico***\n\n", 130);
      numero;
      printf("El seno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, sin(numero) );
     
      // Coseno trigonometrico //
      printf("***Coseno trigonom%ctrico***\n\n", 130);
      numero;
      printf("El coseno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, cos(numero) );
     
      //Tangente trigonométrica //
      printf("***Tangente trigonom%ctrica***\n\n", 130);
      numero;
      printf("La tangente trigonom%ctrica del n%cmero introducido es: %.2lf \n\n", 130, 163, tan(numero) );
     
     
     


system ("pause");
return 0;
}

double numero (double x)
{
       printf("Por favor introduzca un n%cmero: ",163);
       scanf("%lf", &x);
       return x;
}
Título: Re:problema con funciones matemáticas básicas en C
Publicado por: Alex Rodríguez en 12 de Mayo 2014, 14:50
Viendo el código no entiendo bien qué es lo que quieres hacer, o como dices si no estás entendiendo bien el concepto de función.

double numero (double x) significa que esta función te devuelve un double y te pide un double para poder ser ejecutada.

Para invocar esta función necesitarías llamarla con por ejemplo numero(3.63) donde 3.63 es el número que le pasas a la función.

Tú escribes numero; pero esto no es una llamada válida a la función.

Si entiendo lo que quieres hacer podrías escribir:

double pedirNumeroyDevolverlo ()
{
       printf("Por favor introduzca un n%cmero: ",163);
       scanf("%lf", &x);
       return x;
}

El () indica que no hay que pasarle ningún dato a la función. double indica que la función devolverá un tipo double.

El valor que te devuelve la función tendrías que almacenarlo o invocarlo directamente. Si lo almacenas podría ser en una variable auxiliar como:

numeroObtenido = pedirNumeroyDevolverlo();

Y luego...

printf("El seno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, sin(numeroObtenido) );

La otra alternativa sería invocarlo directamente (aunque esto es más lioso y no te aseguro que vaya a funcionar):

printf("El seno trigonom%ctrico del n%cmero introducido es: %.2lf \n\n", 130, 163, sin(pedirNumeroyDevolverlo()) );

Saludos.
Título: Re:problema con funciones matemáticas básicas en C
Publicado por: rackdon en 12 de Mayo 2014, 23:17
Muchisimas gracias.

Ya he entendido entonces como funciona, tenía la idea pero me faltaban algunos detalles.
Gracias por todo.
Un saludo