Ejemplos sobre repetición Tecnologías en Educación Matemática Dr. Carlos Gonzalía Problema: 𝑌 𝑋 Consideremos el problema de definir un algoritmo que calcule la potenciación 𝑋 𝑌 , con X e Y naturales (incluyendo al cero). Hay muchos algoritmos distintos para resolver esto, veamos la forma que adoptan en Pascal. 𝑌 𝑋 : prod := 1; For i:= 1 to Y do prod := prod * X; For-do 𝑌 𝑋 : For-downto prod := 1; For i := Y downto 1 do prod := prod * X; 𝑌 𝑋 : While prod := 1; i := 1; While i<=Y do begin prod := prod* X; i := i+1 end; 𝑌 𝑋 : While (ojo con el contador!) prod := 1; i := 0; While i<Y do begin prod := prod* X; i := i+1 end; 𝑌 𝑋 : While (contador reverso) prod := 1; i := Y; While i>0 do begin prod := prod* X; i := i-1 end; 𝑌 𝑋 : Repeat (mal!) prod := 1; i := 1; { i:= 0 también está mal!} Repeat prod := prod *X; i := i+1 Until i>Y; 𝑌 𝑋 : Repeat (bien!) prod := 1; If Y>0 then begin i := 1; Repeat prod := prod *x; i := i+1 Until i>Y; end 𝑌 𝑋 : Repeat (contador reverso) prod := 1; If Y>0 then begin i := Y; Repeat prod := prod *x; i := i-1 Until i=0; end 𝑌 𝑋 sin producto Supongamos que carecemos del producto de enteros como operación primitiva. Entonces debemos calcular un producto a*b como la suma repetida de a, b veces. Esto convierte a cualquiera de los ejemplos anteriores en uno con ciclos anidados. 𝑌 𝑋 : For-do anidados prod := 1; For i:= 1 to Y do begin { prod := prod * X } suma := 0; for j := 1 to X do suma := suma+prod; prod := suma end; 𝑌 𝑋 : While anidados prod := 1; i := 1; While i<=Y do begin { prod := prod*X } j := 1; suma := 0; While j<=X do begin suma := suma+prod; j:= j+1 end; prod := suma; i := i+1 end; 𝑌 𝑋 : Repeat anidados If X=0 then prod := 0 else if Y=0 then prod := 1 else begin i := 1; Repeat j := 1; Repeat { prod := prod*X } suma := suma+prod; j := j+1 Until j>X; prod := suma; i := i+1 Until i>Y; end