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
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