Cocientes y restos de la transformación decimal
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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
1 2 |
[(12,8053),(4,610),(0,6100),(3,1060),(0,10600),(5,6100), (3,1060),(0,10600),(5,6100)] |
Definir la función
1 |
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,
1 2 3 4 5 6 7 8 9 10 11 |
λ> 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
1 2 3 4 |
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.»
Un comentario