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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion en c++ que calcule valor de un numero decimal redondeado a n num decimal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion en c++ que calcule valor de un numero decimal redondeado a n num decimal  (Leído 2,246 veces)
juanjoxdlol

Desconectado Desconectado

Mensajes: 1


Ver Perfil
funcion en c++ que calcule valor de un numero decimal redondeado a n num decimal
« en: 29 Marzo 2018, 23:20 pm »

tengo que escribir una función redondear que calcule el valor de un número decimal redondeado a una cantidad n de números decimales. no puedo usar ninguna de las funciones de la biblioteca de c++.
por el momento este es mi codigo.

#include <iostream>
using namespace std;

double redondear(double num, int dec)
{
    if(dec==1)
    {
        double redondeo=int(num+0.5);
        return redondeo;
    }
    return 0;
}


En línea

grossgore

Desconectado Desconectado

Mensajes: 11



Ver Perfil
Re: funcion en c++ que calcule valor de un numero decimal redondeado a n num decimal
« Respuesta #1 en: 30 Marzo 2018, 04:28 am »

tengo que escribir una función redondear que calcule el valor de un número decimal redondeado a una cantidad n de números decimales. no puedo usar ninguna de las funciones de la biblioteca de c++.
por el momento este es mi codigo.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. double redondear(double num, int dec)
  5. {
  6.    if(dec==1)
  7.    {
  8.        double redondeo=int(num+0.5);
  9.        return redondeo;
  10.    }
  11.    return 0;
  12. }
Los códigos deben ir en etiquetas GeSHi


En línea

dijsktra

Desconectado Desconectado

Mensajes: 103


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: funcion en c++ que calcule valor de un numero decimal redondeado a n num decimal
« Respuesta #2 en: 24 Junio 2018, 11:19 am »

El problema es bonito.  Sucede que no se puede plantear como tú haces, ya que la función redondeo solo te puede dar -- el redondeo a la parte entera.

Te acuerdas cuando aprendiste a dividir con papel y lápiz a mano? Pues se trata de hacer lo mismo pero más rápido por computador.

Los números racionales, desde tiempos de la Grecia clásica, se conciben como "razón" entre dos números enteros (p y q ). Como los griegos no conocían el 0, cosa que lastró el desarrollo de matemáticas en Occidente, esta definición no plantea problemas.

Pero nosotros, desde tiempos de los arabes que los trajeron de la India (la de verdad, no la que creyó encontrar Colón en Santo Domingo  :xD :xD , saludos a los hermanos de Santo Domingo) , debemos completar esta definición exigiendo "q > 0"

Atendiendo a su representación decimal, se pueden dividir en dos
  • enteros, los que no tienen parte decimal propiamente
  • decimales, los que tienen parte decimal, ya sea finita o infinita periódica

En nuestro caso, vamos a considerar los enteros como un caso especial de los decimales, con una serie infinita de decimales con el dígito 0.   3 ~ 3.00000000000000000000000000000000......
O sea que el "primer decimal" , será el orden de unidades, el segundo de las décimas, el tercero de las centésimas...

Código
  1. #include <stdio.h>
  2.  
  3.  
  4. /* Formal Spec
  5.    P : N >= 0 , p>=0 , q > 0
  6.    Q :
  7.      rat(p/q) - (p/q + \sum i : 1 <= i <= N : pow(10,-i)*((r_{i-1}*10)/q)
  8.       <= pow(10,-N)
  9.  
  10.    where r_{0} = p%q ;
  11.          r_{n+1} = r_{n}*10 % q
  12.  
  13.    Informally, any rational number can be expressed with arbitrary precission
  14.    just by operating its sucessive remainders.
  15. */
  16. void exprDecUpToN(const int p, const int q,
  17.                   int V[], const int N)
  18. {
  19.  int n,r;
  20.  for(n=1, V[0]=(p/q), r=(p%q);n<N;n++)
  21.    {
  22.      V[n] = (10*r)/q;
  23.      r = (10*r)%q;
  24.    }
  25.  return;
  26. }
  27.  
  28. #define MAX 10000
  29. int main(int argc, char **args)
  30. {
  31.  int N,p, q, V[MAX];
  32.  
  33.  for (; scanf("%d %d %d",&N,&p,&q)==3 ; )
  34.    {
  35.      exprDecUpToN(p,q,V,N+1);
  36.      int n;
  37.      printf("%d.",V[0]);
  38.      for (n=1; n<N+1; n++) printf("%d",V[n]);
  39.      printf("\n");
  40.    }
  41.  return 0;
  42. }


Y ahora unos ejemplos de ejecución. El protocolo de entrada exige primerto meter el número de decimales deseado, el primer entero y el segundo (recuerda que debe ser mayor qie 0).
Llama la atención el último que es decimal infinito periódico.
Código:

1 1 2
0.5
2 1 2
0.50
4 56 8
7.0000
18 1 3
0.333333333333333333
2 3 4
0.75
4 3 4
0.7500
40 56 8
7.0000000000000000000000000000000000000000
500 47 7
6.7142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857142857
En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines