La transformación de una fracción en un número decimal se realiza mediante una sucesión de divisiones. Por ejemplo, para transformar a decimal la fracción
247813 |19980 -19980 --------------- ------- 12.40305305... 48013 -39960 ------ 80530 -79920 ------ 6100 - 0 ----- 61000 -59940 ------ 10600 - 0 ------ 106000 - 99900 ------- 61000 -59940 ------ 10600 - 0 ------ 106000 - 99900 ------- 61000 |
La transformación anterior se puede representar mediante la siguiente lista de cocientes y restos
[(12,8053),(4,610),(0,6100),(3,1060),(0,10600),(5,6100), (3,1060),(0,10600),(5,6100)] |
Definir la función
cocientesRestos :: (Integer,Integer) -> [(Integer,Integer)] |
tal que (cocientesRestos (n,d)) es la lista de los cocientes y restos de la transformación decimal de la fracción n/d como se ha indicado anteriormente. Por ejemplo,
λ> take 9 (cocientesRestos (247813,19980)) [(12,8053),(4,610),(0,6100),(3,1060),(0,10600),(5,6100), (3,1060),(0,10600),(5,6100)] λ> take 10 (cocientesRestos (6,2)) [(3,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0)] λ> take 10 (cocientesRestos (1,2)) [(0,1),(5,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0)] λ> take 10 (cocientesRestos (1,3)) [(0,1),(3,1),(3,1),(3,1),(3,1),(3,1),(3,1),(3,1),(3,1),(3,1)] λ> take 10 (cocientesRestos (23,14)) [(1,9),(6,6),(4,4),(2,12),(8,8),(5,10),(7,2),(1,6),(4,4),(2,12)] |
Soluciones
cocientesRestos :: (Integer,Integer) -> [(Integer,Integer)] cocientesRestos (n,d) = (q,r) : cocientesRestos (10*r, d) where (q,r) = quotRem n d |
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
- El código se debe escribir entre una línea con <pre lang=”haskell”> y otra con </pre>
Pensamiento
“Hay dos maneras de diseñar un software. Una forma es hacerlo tan simple que obviamente no haya deficiencias. Y la otra forma es hacerlo tan complicado que no haya deficiencias obvias.”
Una solución de “Cocientes y restos de la transformación decimal”