RPA Clase 3 6xh - Departamento de Ciencias e Ingeniería de la

Anuncio
21/03/2016
 Hablar conmigo al final de la clase
Dra. Jessica Andrea Carballido
jac@cs.uns.edu.ar
Dpto. de Ciencias e Ingeniería de la Computación
UNIVERSIDAD NACIONAL DEL SUR
Variables y Constantes
Ciclo de programación
Editar código fuente
Los datos de un programa
están representados por variables o constantes
y tienen asociado un tipo.
Compilar
OK?
Un tipo de dato determina el conjunto de valores
y el conjunto de operadores que se aplican sobre estos valores.
NO
Sí
Ejecutar (test)
OK?
NO (no da el resultado esperado)
Integer
Real
Char
Boolean
El tipo de dato permite realizar controles
para prevenir algunos errores.
Si en una expresión, un operador está asociado
con operandos que no son compatibles con su tipo,
el compilador reporta un error.
Sí
Constantes
Constantes
Queda ligada a un identificador mediante una declaración.
Queda ligada a un identificador mediante una declaración.
const
PI = 3.1415;
fin_texto = ’.’;
cartel = ‘El radio es: ’;
…
begin
x:= 2 * PI
write (cartel);
Ch:=‘*’;
fin:= (Ch = fin_texto)
…
NO!!
PI:=10
1
21/03/2016
TIPOS
El tipo integer
Variables
Una computadora puede representar
un conjunto finito de valores.
El tipo integer brinda un subconjunto de los números
enteros y un conjunto de operaciones
definidas para este subconjunto de valores.
En la declaración de una variable se establece:
•Nombre: cualquier identificador no reservado.
•Tipo: determina el conjunto de valores que puede tomar y
en qué operaciones puede usarse.
El subconjunto está definido por el rango –MaxInt y MaxInt,
donde MaxInt es una constante predefinida.
Algunos operadores predefinidos del tipo integer son:
En ejecución una variable tendrá:
+ - * div mod sqr abs sqrt
•Valor: contenido en el conjunto establecido por el tipo.
•Locación: lugar en memoria en el cual se almacena el valor.
TIPOS
El tipo integer
TIPOS
El tipo real
El tipo real incluye a un subconjunto de los números reales;
aquellos que están dentro de un rango dado
y con cierta precisión.
Dadas las declaraciones
var x, y, M, N: integer;
Son válidas las expresiones:
Algunos de los operadores predefinidos del tipo real
son:
2+x*y
M mod N
+ - * / abs sqr sin cos sqrt
sqr(x) div 2
Computan un valor de tipo real
al aplicarse sobre un operando de tipo real.
abs(M)
trunc round
Se aplican sobre un argumento
de tipo real y computan un número entero
TIPOS
El tipo real
El tipo boolean
Dadas las declaraciones
var v1, v2: real;
Son válidas las expresiones:
2.1 + v1/v2
sqr(v1)
abs(v2-v1)
sqrt(v1) + sqrt(v2*v2)
sin (v1)
El tipo boolean incluye solo a dos valores
que son las constantes predefinidas true y false,
y los tres operadores lógicos or, and y not.
El valor de las variables booleanas
se puede imprimir pero no leer.
Los operadores relacionales <, >, =, <>, <=, >=
se aplican a operandos de tipo integer, real o char
y computan un valor de tipo boolean
TIPOS
2
21/03/2016
El tipo boolean
TIPOS
El tipo char
const minimo = 10;
El tipo char permite representar el conjunto de 256 letras
mayúsculas y minúsculas, dígitos y otros caracteres.
Cada caracter está representado internamente
como un número entero denotando su código ASCII.
maximo = 20;
var temp : integer;
seSuspende : boolean;
…
seSuspende := (temp < minimo) or (temp > maximo);
Pascal no entiende:
Los literales de tipo de caracter se denotan entre apóstrofes,
e.g. 'A', 'B', …, 'a', 'b', 'c', …, '''', '@', …, '0', '1', '2', …
minimo < temp < maximo
TIPOS
TIPOS
El tipo char
American Standard Code for Information Interchange
Está formado por 256 símbolos, aquí se muestran algunos:
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 ü
Las estructuras de control condicionales
permiten modelar situaciones en las cuales
la ejecución de una instrucción
o de un bloque de instrucciones
depende de una condición.
Utilizamos el condicional cuando:
• una instrucción o bloque depende de una condición.
• dos instrucciones o bloques son mutuamente excluyentes
según una condición
TIPOS
El tipo char
Los operadores pred y succ
aplicados a un operando de tipo char
computan un valor de tipo char.
El operador chr aplicado sobre un operando de tipo entero
computa un valor de tipo char.
El operador ord aplicado sobre un operando de tipo char
computa un valor de tipo integer
pred(‘z’)=‘y’
succ(‘C’)=‘D’
chr(35)=‘#’
ord(‘M’)=77
Leer dos números y mostrar el máximo entre los dos.
Si son iguales, mostrar cualquiera.
program maximo;
var x, y: integer;
begin
write (‘Ingrese dos números: ’);
readln (x, y);
write (‘El maximo es ´);
if (x>y) then writeln (x)
else writeln (y);
end.
Máximo
• dos instrucciones o bloques son mutuamente
excluyentes según una condición
3
21/03/2016
La instrucción if evalúa una expresión lógica.
Esta expresión le permite al programador
establecer una condición.
Si la expresión lógica computa true la condición se
satisface y se ejecutan la instrucciones que siguen a la
palabra reservada then.
Si la condición es false se ejecutan las instrucciones
que siguen a la palabra reservada else.
Dados dos números x e y, si el 1ro es menor que el 2do
intercambiarlos. Mostrar luego x e y.
Proponga casos de prueba adecuados para verificar la
solución.
Debemos verificar por lo menos con dos valores:
uno con el que la condición se evalúe a true y el otro
que evalúe a false.
program menorElPrimero;
var x, y, temp : real;
begin
write (´Ingrese dos números´);
readln(x, y);
if (x<y)
then
{Intercambiar los valores}
begin
temp := x ;
• una instrucción o bloque depende
x := y;
de una condición.
y := temp;
end;
writeln (‘x es: ‘, x, ‘ y es: ‘, y);
end.
La indentación adecuada favorece la legibilidad.
Leer los límites de un intervalo cerrado [a,b]
y un número x y determinar si x está en el intervalo.
x está en el intervalo [a, b] si a <= x <= b
Pascal no admite una expresión como a <= x <= b
(x >= a) and (x <= b)
En este caso si la expresión lógica computa true se
ejecutan tres instrucciones.
Todo bloque de dos o más instrucciones se
encierra entre las palabras reservadas begin end.
Si la condición (x<y) es false no se ejecuta ninguna
instrucción dependiente del condicional.
Notemos que el else es opcional.
Incluimos un comentario que describe el significado
del bloque asociado al then.
• una instrucción o bloque depende
de una condición.
Leer los límites de un intervalo cerrado [a, b]
y un número x y determinar si x está en el intervalo.
¿Cuáles son los datos de entrada?
¿Cuáles son los datos de salida?
¿Cuáles pueden ser los casos de prueba?
(a <= x) and (x <= b)
4
21/03/2016
program intervalo;
var a, b: real;
x: real;
pertenece: boolean;
begin
writeln (‘Ingrese los límites del intervalo ’);
Un comercio aplica un descuento del 10% a las ventas que
superan los $250. Escribir un programa que lea el monto
bruto de una venta y muestre el monto luego de aplicar el
descuento correspondiente.
readln (a, b);
writeln (‘Ingrese el valor de x: ‘);
Monto Bruto
Monto final (neto)
pertenece:= (a<=x) and (x<=b);
<= 250
Monto Bruto
if (pertenece
= true)
pertenece
> 250
90% de Monto Bruto
readln (x);
then writeln (‘x pertenece al intervalo’)
else writeln (‘x no pertenece al intervalo’);
end.
¿Cuáles son los datos de entrada?
¿Cuáles son los datos de salida?
Versión 1
program venta;
var monto: real;
Y el dato de salida?
begin
write (´Ingrese el Monto Bruto: ´);
readln (monto);
write (‘El Monto final es ´);
if (monto <=250)
then writeln (monto)
else writeln (monto*0.90);
end.
Escribir un programa que lea el monto de un crédito
y la cantidad de cuotas y calcule el monto de cada cuota.
program cuotas;
Datos de entrada y de salida?
var credito: real;
cantCuotas: integer;
begin
write (‘Ingrese el monto del crédito ‘);
readln (credito);
write (‘Ingrese la cantidad de cuotas ‘);
readln (cantCuotas);
write (‘El monto de la cuota es ´, credito/cantCuotas);
end.
Versión 2
program venta;
const porc = 0.9;
var bruto, neto: real; // el neto es el bruto * porcentaje
begin
write (´Ingrese el Monto Bruto: ´);
readln (bruto);
if (bruto <=250)
then neto := bruto
else neto := bruto * porc;
writeln (´El monto neto es´, neto);
end.
Escribir una nueva versión
donde quede almacenado
en el dato “monto”
el valor del dato de salida.
program cuotas;
var credito: real;
cantCuotas: integer;
begin
...
write (‘El monto de la cuota es ´, credito/cantCuotas);
if (cantCuotas <= 0)
Evitamos
then
la
writeln (‘La cantidad de cuotas debe ser mayor a cero’) posibilidad
de que
else
surja un
error en
write (‘El monto de la cuota es ‘, credito/cantCuotas);
ejecución!
end.
Es importante
validar los datos de entrada para prevenir errores.
5
21/03/2016
Se utiliza cuando una o varias instrucciones
mutuamente excluyentes
dependen de una expresión de un tipo escalar.
Se evalúa una expresión escalar
y de acuerdo al valor computado
se selecciona la instrucción que se va a ejecutar.
Escalar: es un tipo no estructurado
en el que está definida una relación de orden.
read(nota);
case nota of
0: writeln(‘Malo’);
1,2,3: writeln(‘Regular’);
4,5,6 : writeln(‘Bueno’);
7,8,9: writeln(‘Muy Bueno’);
10: writeln(‘Excelente’);
end;
Integer y char son escalares.
Escribir un programa que lea una expresión aritmética
binaria en notación prefija y la compute. En la notación
binaria el operador +, -, * o / precede a sus operandos.
¿Cuáles son los datos de entrada?
program evaluaExpresion;
var
x, y, sol
: integer;
op
: char;
…
¿Cuáles son los datos de salida?
¿Cuáles pueden ser los casos de prueba?
+ 31 8
write (‘Ingrese operador operando operando’);
readln(op, x, y);
if (op <> ´+´) and (op <> ‘-’) and
(op <> ‘*’) and (op <> ´/´)
then
writeln (‘El operador no existe’)
else
begin
...
end
…begin
write ('Ingrese operador operando operando ');
readln(op, x, y);
if (op<>'+') and (op<>'-') and (op<>'*') and (op<>'/')
then writeln ('El operador no existe')
else
begin
case op of
'+': sol := x+y;
'-': sol := x-y;
'*': sol := x*y;
'/': sol := x div y;
end;
writeln ('La solucion es ',sol);
end;
end.
6
21/03/2016
Claridad en los algoritmos
Es importante que un algoritmo sea claro,
y que no presente ambigüedades para quien lo lea.
Para lograr esto hay que tener en cuenta una serie
de pautas de “buen estilo” para la realización de
algoritmos:
– Indentación
– Líneas para agrupar en bloques
– Uso de nombres representativos
CHAU!
Hasta la próxima clase
7
Descargar