elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Una mano por favor , ejercicio de c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una mano por favor , ejercicio de c  (Leído 2,858 veces)
kevinlll6

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Una mano por favor , ejercicio de c
« en: 22 Agosto 2014, 06:54 am »

Hola disculpen estoy empezando en c ,y a la hora de querer compilar este programa , tengo problemas en el área de multiplicación , por ejemplo 4.1*3 deberia dar igual a 12.3 , pero me arroja un resultado 12.29999 , ahora 3.4*1.1
3.74 , pero no lo reconoce , y así hay mas números que fallan , pero no todos , porque sucede esto?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. using namespace std;
  6. int main()//Accion Operacion Cuatro cositas
  7. {
  8.    float op1,op2,rpta,res2;
  9.    char op;
  10.    printf("Ingrese la operacion que desee realizar\n");
  11.    printf("Ejemplo: 2 + 3\n \n");
  12.    scanf("%f",&op1);
  13.    scanf("%c",&op);
  14.    scanf("%f",&op2);
  15.    switch(op)
  16.    {
  17.    case '+':
  18.       ;
  19.        printf("\nOPERACION SUMA: \n \n");
  20.        printf("%6.1f + %6.1f =",op1,op2);
  21.        scanf("%f",&rpta);
  22.        if(rpta==op1+op2)
  23.        {
  24.            printf("Felicitaciones!\n");
  25.        }
  26.        else
  27.        {
  28.            printf("Errooooor!\n");
  29.        }
  30.        break;
  31.    case '-':
  32.  
  33.        printf("\nOPERACION RESTA: \n \n");
  34.        printf("%6.1f - %6.1f =",op1,op2);
  35.        scanf("%f",&rpta);
  36.        if(rpta==op1-op2)
  37.        {
  38.            printf("Felicitaciones!\n");
  39.        }
  40.        else
  41.        {
  42.            printf("Errooooor!\n");
  43.        }
  44.        break;
  45.    case '*':
  46.        res2=op1*op2;
  47.        printf("\nOPERACION MULTIPLICACION: \n \n");
  48.        printf("%6.2f * %6.2f =",op1,op2);
  49.        scanf("%f",&rpta);
  50.        printf("%f \n" ,rpta);
  51.       printf ("%f \n", res2);
  52.  
  53.        if(rpta==op1*op2)
  54.        {
  55.            printf("Felicitaciones!\n");
  56.        }
  57.        else
  58.        {
  59.            printf("Errooooor!\n");
  60.        }
  61.        break;
  62.    case '/':
  63.        if(op2!=0)
  64.        {
  65.            system("cls");
  66.            printf("\nOPERACION DIVISION: \n \n");
  67.            printf("%6.1f / %6.1f =",op1,op2);
  68.            scanf("%f",&rpta);
  69.            if(rpta==op1/op2)
  70.            {
  71.                printf("Felicitaciones!\n");
  72.            }
  73.            else
  74.            {
  75.                printf("Errooooor!\n");
  76.            }
  77.        }
  78.        else
  79.        {
  80.            printf("\nOPERACION IMPOSIBLE,NO SE PUEDE DIVIDIR ENTRE 0\n");
  81.        }
  82.        break;
  83.    default:
  84.        printf("\nOPERADOR DESCONOCIDO\n");
  85.    }
  86.    system("pause");
  87.    return 0;
  88. }





« Última modificación: 22 Agosto 2014, 06:58 am por kevinlll6 » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Una mano por favor , ejercicio de c
« Respuesta #1 en: 22 Agosto 2014, 12:06 pm »

Antes de nada, esto va en el foro Programación C/C++.

Estás programando en C, así que esta línea sobra, eso es de C++.
Código
  1. using namespace std;

Y vamos al problema en sí: las operaciones fallan, creo, por la precisión de los decimales, y digo creo porque no tengo mucha idea sobre el tema. Para solucionarlo prueba a declarar las variables como double en vez de como float.

Otra cosa aparte, en la línea 18 debajo del "case'+':" hay un ";" que creo que tampoco pinta nada ahí.

Saludos.


« Última modificación: 22 Agosto 2014, 12:10 pm por Caster » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Una mano por favor , ejercicio de c
« Respuesta #2 en: 2 Septiembre 2014, 12:01 pm »

Como te dijo Caster, el problema es de precisión.

Quizás, antes de realizar operaciones con decimales deberías aprender cómo se almacenan éstos números y que problemas pueden aparecer.

Los números en coma flotante permiten almacenar números bastante grandes / pequeños incluso con decimales... pero a cambio sacrifica precisión. Si quieres reducir esta pérdida de precisión puedes probar a usar double en vez de float.

Código
  1. printf("%6.1f + %6.1f =",op1,op2);

Tu ahí estás forzando a que en el número se imprima únicamente hasta el primer decimal... pero eso no quiere decir que el número real almacenado en op1 y op2 vayan a tener un número con un decimal... la conversión a coma flotante puede hacer que el número almacenado no sea exactamente el que esperas.

A modo de ejemplo: un float tiene una precisión de 6 dígitos, esto quiere decir que un número, por ejemplo el 1 puede acabar representado dentro del rango 0.999990 y 1.000009. O el número 12.3, este número puede acabar representado por un número cualquiera dentro del rango 12.29990 y 12.30009.

Lo dicho, si esta precisión te da problemas, cambia a double.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[MOD] por favor necesito ayuda!!! me podeis echar una mano? mi dvd no lee vcd
Multimedia
nerokt 2 1,883 Último mensaje 14 Febrero 2005, 01:51 am
por arda-lothi
¿Me echáis una mano con este ejercicio de un libro?
Redes
OmarHack 0 2,138 Último mensaje 4 Marzo 2013, 13:21 pm
por OmarHack
Ejercicio devc++ una mano con un error
Ejercicios
linkwollf 2 2,854 Último mensaje 2 Octubre 2014, 00:08 am
por linkwollf
Ayuda con ejercicio! POR FAVOR!
Programación C/C++
Trompasl 3 2,916 Último mensaje 8 Mayo 2016, 23:34 pm
por MAFUS
ayuda por favor con un ejercicio, dev c++
Programación C/C++
raenriquez4 8 5,467 Último mensaje 22 Agosto 2016, 06:20 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines