Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe...

Post on 16-Apr-2015

15 views 0 download

Transcript of Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe...

Iteración

La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces.

La cantidad de iteraciones puede quedar determinada por una variable de control que toma valores dentro de un rango escalar o por una expresión lógica.

En el primer caso hablamos de iteración con contador en el segundo de iteración con condición.

Iteración: for

Escriba un programa en Pascal que lea dos valores enteros x y n y calcule y muestre:

∑𝑘=0

𝑛

𝑘 . 𝑥❑−𝑥❑

n = 3 y x =5

Computa0x5 – 5 + 1x5 – 5 + 2x5 – 5 + 3x5 – 5

Iteración: for

∑𝑘=0

𝑛

𝑘 . 𝑥❑−𝑥❑

program Sigma1;var k,n: integer; x,suma:integer;begin … suma := 0; for k := 0 to n do suma := suma + k*x - x; writeln ('Suma ',suma:10);end.

Realizar una traza para dos casos de prueba.

Iteración: for

Escriba un programa en Pascal que lea un valor entero n seguido por una secuencia de n enteros y compute:

∑𝑘=1

𝑛

𝑘 .𝑥 𝑘❑

n = 3 y la secuencia es 2 -5 7

Computa1x2 + 2x-5 + 3x7

Iteración: for

program Sigma2;var k,n: integer; x,suma:integer;begin suma := 0; writeln('Ingrese una secuencia de ',n:4,' elementos '); for k := 1 to n do begin readln(x); suma := suma + k*x ; end; writeln ('Suma ',suma:10);end.

∑𝑘=1

𝑛

𝑘 .𝑥 𝑘❑

Iteración: for

Escriba un programa en Pascal que lea los valores de x, m y n y calcule y muestre:

∑𝑗=0

𝑚

∑𝑘=0

𝑛− 1

(𝑚− 𝑗) . 𝑥❑−𝑘 .𝑥❑

Por ejemplo si m=2, n=3y x=5

(2x5 – 0x5)+ (2x5 – 1x5)+(2x5 – 2x5)+

(1x5 – 0x5)+ (1x5 – 1x5)+(1x5 – 2x5)+

(0x5 – 0x5)+ (0x5 – 1x5)+(0x5 – 2x5)

Iteración: for

program Sigma3;var j,k,n,m: integer; x,suma:integer;begin … suma := 0; for j := 0 to m do for k := 0 to n-1 do suma := suma + (m-j)*x - k*x; writeln ('Suma ',suma:10);end.

∑𝑗=0

𝑚

∑𝑘=0

𝑛− 1

(𝑚− 𝑗) . 𝑥❑−𝑘 .𝑥❑

Realizar una traza para dos casos de prueba.

Iteración: for

Escriba un programa en Pascal que lea un valor n y una secuencia de n ternas de valores y compute:

∑𝑗=1

𝑛

∏𝑘=1

3

𝑥 𝑗 ,𝑘❑ ∑

𝑗=1

𝑛

𝑥 𝑗 ,1 .𝑥 𝑗 ,2 .𝑥𝑗 ,3❑

Iteración: forprogram Sigma4;… suma:=0; for j := 1 to n do begin prod := 1; for k := 1 to 3 do begin read(x); prod := prod * x ; end; readln(); suma := suma + prod; end; …end.

∑𝑗=1

𝑛

∏𝑘=1

3

𝑥 𝑗 ,𝑘❑

Iteración: for

program Sigma4;var j,k,n: integer; x,suma,prod:integer;begin…

end.

Realizar una traza para dos casos de prueba.

Iteración: for

Una fábrica asigna a cada artículo un código formado por tres caracteres. El primero es una letra A, B o C, el segundo carácter es un dígito 3, 4, 5 o 6, el tercer es nuevamente una letra x o y.

Escriba un segmento de programa que muestre una tabla con todos los códigos posibles, agrupando los dos códigos que coinciden en los dos primeros caracteres en una misma línea.

Iteración: for

A 3 x A 3 y

A 4 x A 4 y

A 5 x A 5 y

A 6 x A 6 y

B 3 x B 3 y

writeln (letra,digito,’x’,’ ‘, letra,digito,’y’);

Iteración: for

A 3 x A 3 y

A 4 x A 4 y

A 5 x A 5 y

A 6 x A 6 y

for digito := 3 to 6 do writeln (letra,digito,’x’,’ ‘, letra,digito,’y’);

Iteración: for

A 3 x A 3 y

A 4 x A 4 y

A 5 x A 5 y

A 6 x A 6 y

B 3 x B 3 y

B 4 x B 4 y

B 5 x B 5 y

B 6 x B 6 y

Iteración: for

for letra := ‘A´ to ‘C’do for digito := 3 to 6 do writeln (letra,digito,’x’,’ ‘, letra,digito,’y’);

Iteración: for

Una fábrica asigna a cada artículo un código formado por tres caracteres. El primero es una letra A, B o C, el segundo carácter es un dígito 3, 4, 5 o 6, el tercer es nuevamente una letra v, w, x, y y z.

Escriba un segmento de programa que muestre una tabla con todos los códigos posibles, agrupando los cinco códigos que coinciden en los dos primeros caracteres en una misma línea.

Iteración: for

for letra := ‘A´ to ‘C’do for digito := 3 to 6 do begin for tercer := ‘x’ to ‘z’ do write(letra,digito,tercero, ’ ‘); writeln ; end

Escriba un programa que decida si un número N es primo.

Iteración while

Un números natural N es un número primo si tiene solo dos divisores, 1 y N.

Una alternativa intuitiva para decidir si un número primo es hallar el conjunto de divisores.

Una alternativa más eficiente es hallar un divisor distinto a 1 y a N porque en ese caso podemos asegurar que N no es primo.

Escriba un programa que decida si un número N es primo.

Iteración while

Si 2 es un divisor de N entonces N no es primo, no importa si tiene o no otros divisores.

Análogamente si 3, 4, …, son divisores de N, entonces N no tiene divisores.

Una alternativa aun más eficiente es saltear los números pares que no son primos, pero por el momento el principal objetivo es la iteración.

Escriba un programa que decida si un número N entero positivo es primo.

Iteración while

N mod 2 = 0 si computa true N no es primo

N mod 3 = 0 si computa true N no es primo

Para generalizar podemos usar dos variables, una variable entera y una variable booleana.

{Procesamiento}

d:=2;

esPrimo := true;

while (d < N) and (esPrimo = true)

do

if N mod d = 0 then

esPrimo := false

else

d := d + 1;

Iteración while

program NEsPrimo;{Decide si un número N ingresado por consola es primo, asumiendo N > 1}var N,d : integer; esPrimo : boolean;begin{Entrada} write ('Ingrese N '); readln (N);{Procesamiento}…{Salida}…end.

Iteración while

program NEsPrimo;…begin{Entrada}…{Procesamiento}…{Salida} if esPrimo then writeln(n:4,' es primo ') else writeln(n:4,' no es primo') ;

end.

Iteración while

Iteración while

Hacemos la traza para N

4

19

45

Iteración while

expresión lógica

while do instrucción

La instrucción del while es el bloque iterativo.

Cuando la expresión lógica es falsa se produce la

condición de corte de la iteración.

En el bloque iterativo debe modificarse al menos una de las variables de la expresión lógica, para permitir que la expresión lógica se haga falsa y el bucle termine.

Escriba un programa que muestre la suma de los dígitos de un número entero positivo N.

Iteración while

Por ejemplo si N= 605 la suma es 11.

Iteración while

{Procesamiento} M:=N; suma := 0; while (M > 0) do begin suma := suma + M mod 10; M := M div 10; end;

Realizar una traza para dos casos de prueba.

Escriba un programa que decida si un dígito entre 1 y 9 está en un número entero positivo N.

Iteración while

Por ejemplo si d=3 y N= 605 d no está en N.si d=3 y N= 305 d está en N.si d=3 y N= 6035 d está en N.si d=3 y N= 6053 d está en N.si d=3 y N= 6303 d está en N.

Iteración while

{Procesamiento} esta:= false; M:=N; while (M > 0) and (esta = false) do if M mod 10 = d then esta := true else M := M div 10;

Iteración while

program dEstaenN;{Decide si un dígito d está en N }var N,M,d : integer; esta : boolean;begin{Entrada} write ('Ingrese N '); readln (N); write ('Ingrese el dígito '); readln (d);

Iteración while

program dEstaenN;…begin{Entrada}…{Procesamiento}…{Salida} if esta then writeln(d:4,' está en ',N:4) else writeln(d:4,' no está en ',N:4) ;end.

Escriba un programa que muestre la posición menos significativa en la que aparece un dígito d en un número N. Si d no está en N, muestra 0.

Iteración while

Por ejemplo si d=3 y N= 605 la salida es 0.si d=3 y N= 1305 la salida es 3.si d=3 y N= 6035 la salida es 2.