miércoles, 3 de abril de 2013

Un programa para sacar decimales


La programación en informática comenzó, como todo el mundo sabe, o debiera saber, con problemas aritméticos. Las "computers" se inventaron, como su mismo nombre indica, para computar, es decir, para hacer cálculos aritméticos, que son la base y yo no sé si la esencia misma de todas las matemáticas. Gauss llamaba a la aritmética la "reina de las matemáticas". Si nos fijamos un poco todo va "secundum prius ac posterius", como decía ya un famoso pensador en la Edad Media. Efectivamente, toda la aritmética - y quizás la matemática entera - se podría resumir en aquello de un famoso título: "Uno, dos, tres,...infinito.".
Para hacer la programación interesante lo mejor es plantearse problemas aritméticos. Es una mina inagotable. Y además hasta puede resultar útil. Lo cual no importa mucho, pero sí nos puede estimular y hacernos "presentables" ante los demás, que no piensan más que en eso.
Bien, pues después de este breve prólogo, vamos a presentar un programita que no hace nada extraordinario, solo sacar decimales en una división, todos los que quieras. El programa está calcado sobre lo que hacemos todos con lápiz y papel cuando nos ponemos a hacer una división, según nos enseñaron en la escuela; todo aquello de bajo una cifra y pongo un cero, etc. El resultado es presentado, pero el número no puede ser utilizado; es como una cadena. Para que el número sea utilizable habría que añadir a la parte entera décimas, más centésimas, etc., pero yo no sé por qué misterio, con ese procedimiento no saca más de 6 decimales. Quizás con setprecision(20). Lo he probado y no ha funcionado mayormente. Claro, habría que incluir #include<iomanip>.
Las variables: dv=dividendo, ds=divisor, q, Q, d[i] = cociente, R= resto.

#include<iostream>
#define N 20
using namespace std;
int main()
{
long int dv,ds,q=1,Q,R;
int i,E,d[N];
for(i=0;i<N;i++) d[i]=0;
cout<<"\tVamos a transformar una fracción en una expresión decimal (20 decimales)\n";
cout<<"Dame el numerador N de la fracción: ";cin>>dv;
cout<<"Dame el denominador D de la fracción: ";cin>>ds;
while(q*ds<=dv)
q++;
Q=q-1;
R=dv-Q*ds;
E=Q;
for(i=0;i<N;i++){
if(R==0) break;
else {
dv=R*10;q=1;
while(q*ds<=dv)
q++;Q=q-1;
R=dv-Q*ds;
d[i]=Q;
}
}
cout<<"La fracción decimal es: "<<E<<",";
for(i=0;i<N;i++) cout<<d[i];
cout<<endl;
return 0;
}

No hay comentarios:

Publicar un comentario