RPA Clase 5 - Departamento de Ciencias e Ingeniería de la

Anuncio
Dra. Jessica Andrea Carballido
[email protected]
Dpto. de Ciencias e Ingeniería de la Computación
UNIVERSIDAD NACIONAL DEL SUR
Iteración
La estructura de control ITERATIVA
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
y en el segundo hablamos de iteración con condición.
Iteración con contador: for
Repetir N veces
Número natural
ACCIONES
Repetir 3 veces
Accion1
Accion2
Accion1
Accion2
Accion1
Accion2
Accion1
Accion2
Ejercicio de Pilates
Recostarse en la colchoneta
Repetir 30 veces
Elevar las piernas
Bajarlas lentamente
Elongar
3
Iteración
Repetir N veces
ACCIONES
Número
natural
PARA i desde: 1 hasta: N HACER
ACCIONES
4
Iteración
Problema: Mostrar un ‘*’ tantas veces como lo indique el usuario.
Algoritmo ASTERISCOS
DE:
N
DS: Asteriscos
Daux:
Para
mostrados en pantalla
i
i desde 1 hasta N hacer
Mostrar(‘*’)
Iteración con contador: for
Problema: A partir de una base y un exponente
calcular la potencia (baseexponente)
Ej.: base=2, exponente=4 debe calcular 24
¿Cuáles son los datos de entrada?
¿Cuáles son los datos de salida?
¿Cuáles pueden ser los casos de prueba?
Exponente
veces
Si base=2, exponente=4 debo calcular 2*2*2*2
Acumulación de productos sucesivos:
1*2
..
*2
..
*2
..
*2
Iteración con contador: for
Algoritmo Potencia
DE: base, exponente
DS: pot
Daux: i
Comienzo
pot <- 1
para i desde 1 hasta exponente
pot <- pot * base
Fin
pot := 1;
for i:= 1 to exponente do
pot := pot * base;
La variable de control toma valores en el rango que
determinan la expresión inicial y la expresión final.
Iteración con contador: for
Expresión inicial
pot := 1;
Expresión final
for i:= 1 to exponente do
pot := pot * base;
• La variable i (podemos usar cualquier variable entera)
se inicializa al ingresar al for con el valor obtenido de evaluar
la expresión inicial. Con este valor se ejecuta por primera
vez el bucle.
• Automáticamente, i se va incrementando en 1 unidad
luego de cada ejecución del bucle. La última vez que se ejecuta
el for es con i = expresión final.
Iteración con contador: for
Program potencia;
Var pot, i, exponente: integer;
begin
writeln(‘Ingrese la base y el exponente’);
readln(base, exponente);
pot := 1;
for i:= 1 to exponente do
pot := pot * base;
writeln(‘El valor de la potencia es: ‘, pot);
end.
Iteración con contador: for
Problema: A partir de un valor n calcular la serie
12 + 22 + 32 + ... + n2
¿Cuáles son los datos de entrada?
¿Cuáles son los datos de salida?
¿Cuáles pueden ser los casos de prueba?
n veces
Si n=5 debo calcular 12 + 22 + 32 + 42 + 52
Acumulación de sumas sucesivas:
0+12
..
+ 22
..
+32
..
+n2
El valor de la base en cada término
varía desde 1 hasta n.
Iteración con contador: for
Algoritmo SumaDeSerie
DE: n
DS: serie
Comienzo
serie <- 0
base <- 1
Repetir n veces
serie <- serie + base*base
base <- base+1
Fin
serie := 0;
for base := 1 to n do
serie := serie + sqr(base);
La variable de control toma valores en el rango que
determinan la expresión inicial y la expresión final.
Iteración con contador: for
program serie;
{Computa 12 + 22 + 32 + ... + n2 }
var base, n, serie: integer;
serie: real;
begin
write (‘Ingrese el valor de n ‘);
readln (n);
serie := 0;
for base:= 1 to n
do
serie := serie + sqr(base);
writeln (‘El valor es ‘, serie);
end.
¿Qué pasa si el usuario ingresa un valor menor o igual a 0?
Iteración con contador: for
Escribir un programa que muestre el código ASCII
de todas las letras mayúsculas.
¿Cuáles son los datos de entrada?
¿Cuáles son los datos de salida?
¿Cuáles pueden ser los casos de prueba?
A= 65
B= 66
C= 67
..
X= 88
Y= 89
Z= 90
32
33 ! 34 " 35 # 36 $ 37 % 38 & 39 '
40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47
48 0 49 1
50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ;
60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E
70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O
80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y
90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c
100 d 101 e 102 f 103 g 104 h 105 ii 106 j 107 k 108 l 109 m
110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w
120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127
128 Ç 129 ü
Iteración con contador: for
Escribir un programa que muestre el código ASCII
de todas las letras mayúsculas.
writeln ('A',‘=', ord('A'));
writeln ('B', '=', ord('B'));
writeln ('C',‘=', ord('C'));
…
La letra “varía” tomando valores 'A','B',… hasta 'Z‘.
Podemos usar una única instrucción reemplazando la
constante literal con una variable.
writeln (letra,‘= ‘, ord(letra));
Iteración con contador: for
Escribir un programa que muestre el código ASCII
de las letras mayúsculas.
program ordinalesLetras;
var letra: char;
begin
for letra := 'A' to 'Z' do
writeln (letra,‘ = ',ord(letra));
end.
La variable de control toma valores en el rango que
determinan los caracteres ‘A’ y ‘Z’.
Iteración con contador: for
Escribir un programa que muestre los factores positivos
de un número entero n.
¿ 1 es divisor de n ?
¿ 2 es divisor de n ?
¿ 3 es divisor de n ?
En cada iteración se evalúa una condición.
¿Cómo lo generalizamos?
¿ i es divisor de n?
¿Cuándo terminamos?
¿Cómo lo expresamos en Pascal?
Iteración con contador: for
program divisores;
{Muestra los divisores de un número n}
var i, n: integer;
begin
write (‘Ingrese el valor para n: ’);
readln(n);
writeln (‘Los factores positivos de n son ‘);
for i := 1 to n do
if (n mod i = 0)
then write (i);
end.
El bloque iterativo se ejecuta n veces;
el valor de la variable de control es diferente cada vez.
Iteración con contador: for
Escribir un programa que muestre los factores positivos
de un número entero n de mayor a menor.
program divisores;
{Muestra los divisores de un número n}
var i,n:integer;
begin
write (‘Ingrese el valor de n’);
readln(n);
writeln (‘Los divisores son ‘);
for i := n downto 1 do
if (n mod i = 0)
then write (i);
end.
Iteración con contador: for
Diagrama de sintaxis
“Instrucción” puede ser una o varias acciones
Iteración con contador: for
Realice trazas para descubrir la salida de los siguientes programas.
for i:= 1 to 5
do
begin
for j:= 1 to 3
do
write (i);
writeln;
end;
for i:= 1 to 5
do
begin
for j:= 1 to 3
do
write (‘(‘, i, ‘ ‘,j, ’)’);
writeln;
end;
for i:= 1 to 5
do
begin
write (i);
for j:= 1 to i
do
write (j);
writeln;
end;
for i:= 1 to 5
do
begin
write (i);
for j:= i downto 1
do
write (j);
writeln;
end;
La instrucción de un for puede ser un for anidado.
Iteración con contador: for
• Nombres claros y uso consistente de mayúsculas y minúsculas.
• Indentación y espaciado.
• Usar comentarios con buen criterio: los comentarios excesivos
pueden resultar contraproducentes; el comentario debe describir
características del problema o de la solución, no del lenguaje de
programación.
• No modificar valores de las variables que controlan los bucles for.
• Si vamos a utilizar la variable de control después de que termina
la iteración debemos inicializarla.
• No podemos asumir ningún valor para la variable de control
una vez que estamos fuera del bucle for.
Iteración
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 es un
dígito (3, 4, 5 o 6) y el tercero es 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.
A3x A3y
A4x A4y
A5x A5y
A6x A6y
B3x B3y
B4x B4y
…
writeln (letra, digito, ’x’,’
‘, letra, digito, ’y’);
Iteración
A3x
A3y
A4x
A4y
A5x
A5y
A6x
A6y
for digito := 3 to 6
do
writeln (letra, digito, ’x’, ’ ‘, letra, digito, ’y’);
Iteración
for letra := ‘A’ to ‘C’ do
for digito := 3 to 6 do
writeln (letra, digito, ’x’, ’
A3x
A3y
A4x
A4y
A5x
A5y
A6x
A6y
B3x B3y
B4x B4y
B5x B5y
B6x B6y
C3x C3y
…
‘, letra, digito, ’y’);
Iteración
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 es un
dígito (3, 4, 5 o 6) y el tercero es una letra (v, w, x, 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
A3v
A4v
A5v
A6v
B3v
B4v
for letra1 := ‘A’ to ‘C’
do
for digito := 3 to 6
do
begin
for letra2 := ‘v’ to ‘z’
do
write(letra1, digito, letra2, ’ ‘);
writeln ;
end
A3w
A4w
A5w
A6w
B3w
B4w
A3x
A4x
A5x
A6x
B3x
B4x
…
A3y
A4y
A5y
A6y
B3y
B4y
A3z
A4z
A5z
A6z
B3z
B4z
CHAU!
Hasta la próxima
clase
Descargar