Anuncios Google

Ayuda con C, extraño fallo.

Pues he empezado ha hacer un programa que se llama MathUtilities y de momento tiene 6 opciones:

  • Suma
  • Resta
  • Division
  • Multiplicación
  • Raiz Quadrada
  • IVA

Pero con el IVA ocurre algo extraño. Simpre da 0.   o.O!

Código:

//Cargamos librerías
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
//Main
int main()
    {
	double a, b, c, resultado;
	int Opcion;
 
//Funciones
	double Suma (double , double );
	double Resta (double , double );
	double Multiplicacion (double , double );
	double Division (double , double );
	double Raizcuadrada (double );
    double IVA (double, double);
 
	printf("\t\t-----MathUtilities-----\n\n");
	printf("\t 1- Suma\n");
	printf("\t 2- Resta\n");
	printf("\t 3- Division\n");
	printf("\t 4- Multiplicacion\n");
	printf("\t 5- Raiz cuadrada\n");
	printf("\t 6- IVA\n");
	printf("\t\t Elija Opci¢n:");
	scanf("%d", &Opcion);
 
	switch (Opcion)
	{
	   case 1:
		   resultado = Suma (a, b);
	   break;
 
  	   case 2:
	   	resultado = Resta (a, b);
	   break;
 
 
	   case 3:
	   	resultado = Division (a, b);
	   break;
 
 
	   case 4:
	   	resultado = Multiplicacion (a, b);
       break;
 
       case 5:
	   	resultado = Raizcuadrada (a);
 	   break;
 
       case 6:
	   	resultado = IVA (a, b);
 	   break;
 
 
	   }
 
 printf("\n El resultado es: %lf", resultado);
  getchar();
  getchar();
  return 0;
}
 
 
 
double Suma (double a, double b)
{
	 double c;
     printf("\n Introduzca el primer sumando\n:");
     scanf ("%lf", &a);
     printf("\n Introduzca el segundo sumando\n:");
     scanf ("%lf", &b);
     c = a + b;
     return (c);
}
 
double Resta (double a, double b)
{
	double c;
    printf("\n Introduzca el primer restando\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo restando\n:");
    scanf("%lf", &b);
    c = (a-b);
    return (c);
}
 
double Multiplicacion (double a, double b)
{
	double c;
    printf("\n Introduzca el primer factor\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo factor\n:");
    scanf("%lf", &b);
    c = a * b;
    return (c);
}
 
double Division (double a, double b)
{
	double c;
    printf("\n Introduzca el dividendo\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el divisor\n:");
    scanf("%lf", &b);
    c = a / b;
    return (c);
}
 
double Raizcuadrada (double a)
{
	double c;
    printf("\n Introduzca el numero del que desea la raiz\n: ");
    scanf ("%lf", &a);
    c = sqrt (a);
    return (c);
}
 
double IVA (double a, double b)
{    
     double c;
     printf("Introduzca el IVA:\n");
     scanf("%d",&a); 
     printf("Introduzca el precio\n");
     scanf("%d",&b);
     c = a + a * b /100;  
     return (c);
 
    getchar();
    getchar();
}

Extraño fenomeno xD. Haver si alguien me puede explicar porque ocurre esto.

Gracias.


We're off now to seek all our fortunes to the land... of... our dreams


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sakun-ice

añade

añade un fflush(stdin) despues de pedir las variables haber si te funciona ;)

Haciendo una chapuzeria he

Haciendo una chapuzeria he conseguido que funcione, solo tengo que quitar ahora la frasecita del final:

//Cargamos librerías
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
//Main
int main()
    {
	double a, b, c, resultado;
	float iva, precio, precioIva;
	int Opcion;
 
//Funciones
	double Suma (double , double );
	double Resta (double , double );
	double Multiplicacion (double , double );
	double Division (double , double );
	double Raizcuadrada (double );
    float IVA (float, float, float);
 
	printf("\t\t-----MathUtilities-----\n\n");
	printf("\t 1- Suma\n");
	printf("\t 2- Resta\n");
	printf("\t 3- Division\n");
	printf("\t 4- Multiplicacion\n");
	printf("\t 5- Raiz cuadrada\n");
	printf("\t 6- IVA\n");
	printf("\t\t Elija Opci¢n:");
	scanf("%d", &Opcion);
 
	switch (Opcion)
	{
	   case 1:
		   resultado = Suma (a, b);
	   break;
 
  	   case 2:
	   	resultado = Resta (a, b);
	   break;
 
 
	   case 3:
	   	resultado = Division (a, b);
	   break;
 
 
	   case 4:
	   	resultado = Multiplicacion (a, b);
       break;
 
       case 5:
	   	resultado = Raizcuadrada (a);
 	   break;
 
       case 6:
	   	resultado = IVA (iva, precio, precioIva);
 	   break;
 
 
	   }
 
 printf("\n El resultado es: %lf", resultado);
  getchar();
  getchar();
  return 0;
}
 
 
 
double Suma (double a, double b)
{
	 double c;
     printf("\n Introduzca el primer sumando\n:");
     scanf ("%lf", &a);
     printf("\n Introduzca el segundo sumando\n:");
     scanf ("%lf", &b);
     c = a + b;
     return (c);
}
 
double Resta (double a, double b)
{
	double c;
    printf("\n Introduzca el primer restando\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo restando\n:");
    scanf("%lf", &b);
    c = (a-b);
    return (c);
}
 
double Multiplicacion (double a, double b)
{
	double c;
    printf("\n Introduzca el primer factor\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo factor\n:");
    scanf("%lf", &b);
    c = a * b;
    return (c);
}
 
double Division (double a, double b)
{
	double c;
    printf("\n Introduzca el dividendo\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el divisor\n:");
    scanf("%lf", &b);
    c = a / b;
    return (c);
}
 
double Raizcuadrada (double a)
{
	double c;
    printf("\n Introduzca el numero del que desea la raiz\n: ");
    scanf ("%lf", &a);
    c = sqrt (a);
    return (c);
}
 
float  IVA (float iva, float precio, float precioIva)
{
    printf("Introduzca el IVA:\n");
    scanf("%f",&iva); 
    printf("IVA: %f\n",iva);
    printf("Introduzca el precio\n");
    scanf("%f",&precio);
    precioIva = precio + ((precio * iva)/100);
    printf("Precio sin IVA %f\n",precio);
    printf("Precio con IVA %f\n", precioIva);
 
    getchar();
 
    return 0;
}


We're off now to seek all our fortunes to the land... of... our dreams

Imagen de pspgorrister

Es lo que te había dicho yo,

Es lo que te había dicho yo, pero no me leiste. Usabas scanf("%d") en vez de scanf("%f")

Un saludo.

Porque? Era un Double.

Porque? Era un Double.

Imagen de pspgorrister

  

  

M no se lee tu comentario

M no se lee tu comentario

Imagen de P22

se refiere

a sin comentarios

Imagen de pspgorrister

Sobre la función IVA

  • No uses TODO MAYÚSCULAS para variables o funciones, eso por convenio no escrito en C/C++, suele reservase a constantes.
  • Los 2 últimos getchar() sobran, nunca llega ahí el programa porque sale en el return (c)
  • El IVA no se calcula así, sino "cantidad * tipo_de_iva /100". Es lo que tiene llamar a las variables "a", "b", "c", ... que luego uno no sabé ni lo que es cada una.

 

Cuando abras ese programa la semana que viene y veas la linea "c = a + a * b /100", no va a tener ni idea de lo que calcula.

El resto de código, se ve bien, uso de funciones sentencias "case"

 

Un saludo.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Eso que tu dices te calcula

Eso que tu dices te calcula el IVA, si, pero no te lo añade al precio orginal.

Imagen de pspgorrister

Pues en tu programa pones

Pues en tu programa pones IVA, y el IVA es eso el IVA, sin nada más. ¿Puede ser por el scanf(%d) en vez de %f?

Un saludo.

Imagen de the dragon lives

no estoy muy seguro

Prueba a crear otra variable, calculando el iva como dice gorrister y después añade esa variable mas el precio original

Con lo que dice gorrister me

Con lo que dice gorrister me sigue dando 0.0000000 xD

Imagen de the dragon lives

más extraño aun

a mi me da 1.#QNAN0

xD????? Que pasa aqui?

xD????? Que pasa aqui?

Me he leido todos los tutos y

Me he leido todos los tutos y los entiendo todos menos los de la Recursividad  y los prototipos de funciones. Por lo demas bien.

Códgio corregido, pero sigue dando el mismo error. Que extraño.

//Cargamos librerías
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
//Main
int main()
    {
	double a, b, c, resultado;
	int Opcion;
 
//Funciones
	double Suma (double , double );
	double Resta (double , double );
	double Multiplicacion (double , double );
	double Division (double , double );
	double Raizcuadrada (double );
    double Iva (double, double);
 
	printf("\t\t-----MathUtilities-----\n\n");
	printf("\t 1- Suma\n");
	printf("\t 2- Resta\n");
	printf("\t 3- Division\n");
	printf("\t 4- Multiplicacion\n");
	printf("\t 5- Raiz cuadrada\n");
	printf("\t 6- IVA\n");
	printf("\t\t Elija Opci¢n:");
	scanf("%d", &Opcion);
 
	switch (Opcion)
	{
	   case 1:
		   resultado = Suma (a, b);
	   break;
 
  	   case 2:
	   	resultado = Resta (a, b);
	   break;
 
 
	   case 3:
	   	resultado = Division (a, b);
	   break;
 
 
	   case 4:
	   	resultado = Multiplicacion (a, b);
       break;
 
       case 5:
	   	resultado = Raizcuadrada (a);
 	   break;
 
       case 6:
	   	resultado = Iva (a, b);
 	   break;
 
 
	   }
 
 printf("\n El resultado es: %lf", resultado);
  getchar();
  getchar();
  return 0;
}
 
 
 
double Suma (double a, double b)
{
	 double c;
     printf("\n Introduzca el primer sumando\n:");
     scanf ("%lf", &a);
     printf("\n Introduzca el segundo sumando\n:");
     scanf ("%lf", &b);
     c = a + b;
     return (c);
}
 
double Resta (double a, double b)
{
	double c;
    printf("\n Introduzca el primer restando\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo restando\n:");
    scanf("%lf", &b);
    c = (a-b);
    return (c);
}
 
double Multiplicacion (double a, double b)
{
	double c;
    printf("\n Introduzca el primer factor\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el segundo factor\n:");
    scanf("%lf", &b);
    c = a * b;
    return (c);
}
 
double Division (double a, double b)
{
	double c;
    printf("\n Introduzca el dividendo\n:");
    scanf("%lf", &a);
    printf("\n Introduzca el divisor\n:");
    scanf("%lf", &b);
    c = a / b;
    return (c);
}
 
double Raizcuadrada (double a)
{
	double c;
    printf("\n Introduzca el numero del que desea la raiz\n: ");
    scanf ("%lf", &a);
    c = sqrt (a);
    return (c);
}
 
double Iva (double a, double b)
{    
     double c;
     printf("Introduzca el IVA:\n");
     scanf("%d",&a); 
     printf("Introduzca el precio\n");
     scanf("%d",&b);
     c = a * b /100;  
     return (c);
}

Lo he hecho por separado y si que funciona:

#include <stdio.h>
 
int main()
{
    float IVA,precio,precioIva;
 
    printf("Introduzca el IVA:\n");
 
    scanf("%f",&IVA); 
 
    printf("IVA: %f\n",IVA);
 
    printf("Introduzca el precio\n");
 
    scanf("%f",&precio);
 
    precioIva = precio + ((precio * IVA)/100);
 
    printf("Precio sin IVA %f\n",precio);
 
    printf("Precio con IVA %f\n", precioIva);
 
    getchar();
    getchar();
 
    return 0;
}

 


We're off now to seek all our fortunes to the land... of... our dreams

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.