{ La siguiente función calcula e imprime los dígitos comunes iniciales de dos fracciones num1/den1 y num2/den2 en base 10, y devuelve el número de dígitos producidos después de la coma decimal. Los numeradores/denominadores son representados con el tipo "int64", que permite representar todos los enteros entre -2^63 y 2^63 - 1. } function digitos_comunes(num1, den1, num2, den2 : int64) : int64; var dig1, dig2 : int64; { dígito corriente } k : int64; { posición del dígito } begin dig1 := num1 div den1; { parte entera de num1/den1 } dig2 := num2 div den2; { parte entera de num2/den2 } k := 0; while dig1 = dig2 do { mientras dig1 y dig2 coinciden... } begin write(dig1); if k = 0 then write(','); { imprime la coma decimal } { cálculo del próximo dígito } num1 := 10 * (num1 mod den1); { 0 <= num1/den1 < 10 } num2 := 10 * (num2 mod den2); { 0 <= num2/den2 < 10 } dig1 := num1 div den1; { 0 <= dig1 < 10 } dig2 := num2 div den2; { 0 <= dig2 < 10 } k := k + 1 end; writeln('...'); digitos_comunes := k - 1 { no se cuenta la parte entera } end; { Debido a las limitaciones del tipo "int64", no se pueden calcular más de 47 iteraciones de la sucesión (u_n) sin superar la capacidad del tipo. } const num_iter = 47; { El siguiente programa calcula num_iter iteraciones de la sucesión (u_n), usando los últimos dos términos para determinar los dígitos de sqrt(2). } var n, k : int64; num0, den0 : int64; { fracción anterior } num1, den1 : int64; { fracción corriente } begin num1 := 1; { numerador de u_0 } den1 := 1; { denominador de u_0 } for n := 1 to num_iter do begin num0 := num1; den0 := den1; { Cálculo de u_n = num1/den1 a partir de u_(n-1) = num0/den0 } num1 := num0 + 2 * den0; den1 := num0 + den0; end; { Imprime los dos últimos términos } writeln('Aproximación #', num_iter - 1, ' = ', num0, ' / ', den0); writeln('Aproximación #', num_iter, ' = ', num1, ' / ', den1); { Calcula e imprime los dígitos comunes de dichos términos } write('raíz(2) = '); k := digitos_comunes(num0, den0, num1, den1); writeln('(', k, ' dígitos después de la coma)') end.