Download Práctica 2 de Seminario de Lenguajes A

Document related concepts
no text concepts found
Transcript
Práctica 2 de Seminario de Lenguajes A - Ada, comparación con Java y Delphi
Objetivo: Aprender a encapsular y reusar código mediante subprogramas Ada.
Conocer las formas o modos de pasar parámetros a los subprogramas.
Descubrir las facilidades del overloading y su explotación mediante tipos derivados.
Conocer el overloading de operadores.
Conocer como aislar código mediante bloques de sentencias.
Profundizar en el modelo de E/S de Ada.
Comparar las construcciones aprendidas con Java y Pascal.
1.
Se debe leer tres sucesiones de N números enteros cada una: x 1 . . . xn , y1 . . . yn , z1 . . . zn y calcular:
R=
"
n
X
i=1
1/xi −
n
Y
i=1
zi3
!
#
∗ max(yi ) − min(yi )
Se deben usar tres módulos, uno para calcular la sumatoria, otro para la productoria y por último
uno para el máximo y el mı́nimo. Justificar la elección de procedimiento o función para cada caso.
No se debe usar en los módulos ninguna declaración global.
Optativo(s):
a)
¿ Qué tipo de estructura modular para reutilizar código ofrecen Pascal y Java ?
b)
¿ Cuáles son las formas de pasar parámetros en Pascal y Java ?
c)
¿ Cómo harı́a en Java para devolver desde un método un valor, y varios ?
d)
¿ Cómo se declara en Java un método que no devuelve nada ?
Sub-objetivo: Uso de procedimientos y funciones. Parámetros de entrada y parámetros de salida.
Contemplar problemas con la división por cero.
Comparar los mecanismos de pasaje de parámetros en Pascal y Java
2.
Definir tres funciones matemáticas sobre enteros que calculen lo siguiente:
f (x) = x3 − x2 + 2
g(x) = x2 + 2
h(x) = x2 + x + 2
Luego leer un intervalo cerrado (la cota inferior y la superior) e indicar si existe dentro del intervalo
valores que hacen que las tres funciones tomen el mismo valor. Qué sucede si se definen sobre
Floats?.
Optativo(s):
a)
¿ Se puede en Pascal o en Java definir el for sobre Floats ?
b)
¿ Cómo se define en Java una función que no requiere la instanciación de un objeto de la clase
para invocarla ?
Sub-objetivo: Uso de funciones. Detectar la diferencia entre tipos ordinales y no ordinales. Uso
de for y while. Comparar la construcción del for de Java.
3.
a)
Implementar dos procedimientos, uno para incrementar un valor entero y otro para decrementarlo. El valor del incremento/decremento debe poder definirse por quien invoca las operaciones, si el usuario no lo especifica debe considerarse como 1 (uno) dicho valor.
1
b)
Hacer un programa que llame de tres formas diferentes a los procedimientos.
Optativo(s):
a)
¿ Provee Pascal o Java valores de parámetros por omisión (default) ?
b)
¿ Qué mecanismos de “ligadura” de parámetros al tiempo de la invocación ofrece Pascal y
Java , Cuál de los mecanismos de “ligadura” le parece más legible ?
Sub-objetivo: Parámetros de E/S. Valores por omisión. Llamado/Invocación posicional y nombrada.
4.
Resuelva mediante procedimientos llamados put un programa que imprima indistintamente un
entero o un flotante siempre usando dos decimales. Por ejemplo si se ingresa el entero 3 debe imprimir
3.00, si se ingresa un flotante 2.455 debe imprimir 2.46. Los valores impresos deben mostrase
alineados si se realiza un new_line, Por ejemplo:
...
Put(34);
New_Line;
Put(34.00);
New_line;
Put(34.455);
...
debe generar:
34.00
34.00
34.46
Optativo(s):
a)
¿ Qué mecanismos de “overloading” o sobrecarga ofrece Pascal y Java ?
b)
¿ Cómo se rompe la ambigüedad ?
Sub-objetivo: Overloading de procedimientos de acuerdo a tipos. E/S de Floats y enteros con
formato. Uso de notación puntual. Omisión de sentencia use.
5.
Implementar en Ada un procedimiento para leer Strings de tamaño fijo (constante). Si el usuario
ingresa menos caracteres que el tamaño se debe completar con blancos. Si intenta ingresarse más
valores que los admitidos el procedimiento los ignora. Además del valor leı́do se debe obtener
la cantidad de caracteres ingresados. De que forma se puede resolver la invocación del mismo
procedimiento sin el segundo parámetro?.
Sub-objetivo: Overloading de procedimientos de acuerdo a la cant. de parámetros. Los valores
por omisión solo son para el modo in. Usar skip line.
6.
Implementar un put y un get para valores booleanos. Utilizar el get del ejercicio anterior para
leer los strings ’’true’’ o ’’false’’. ¿ Cómo resolverı́a el hecho de que el valor ingresado por el
usuario no concuerda con un String booleano (true, false) ?, ¿ Cómo lo resuelve Ada ?
Optativo(s):
2
a)
¿ Cómo puede hacer E/S de tipos booleanos o enumerativos en Pascal ?
b)
¿ Cómo resuelven Pascal y Java el problema de la E/S cuando no concuerdan los valores
ingresados con el tipo de la variable ?
Sub-objetivo: Overloading de procedimientos de acuerdo a tipos.
7.
Defina el operador + (suma) que recibe dos parámetros de tipo integer y retorna la suma módulo
10.
Nota: la suma estándar de enteros está definida en el package STANDARD (Standard.”+”).
Sub-objetivo: Overloading de funciones. Notación puntual para indicar que operación usar.
Optativo(s):
8.
a)
¿ Se puede hacer overloading de operadores en Java ?
b)
¿ Se pueden crear nuevos operadores en Ada basados en nuevos sı́mbolos ?
c)
¿ Cuáles son las formas de invocación de operadores en Ada ?
Defina la operación ∗ (multiplicación) de tal forma que sea aceptada entre variables numéricas como si se
utilizara el lenguaje Pascal (casting automático). En qué situaciones resulta ambiguo el uso de la función?.
Sub-objetivo: Overloading de funciones de acuerdo a tipos y valores de retorno.
9.
Realizar un programa que lea 50 valores que representan temperaturas en grados Centı́grados y retorne la
mayor. Luego se debe invocar una función que convierta dicha temperatura a grados Fahrenheit e imprimirla.
Sin cambiar la función realice las modificaciones mı́nimas para que retorne el menor.
Nota: Para convertir de grados Centı́grados a Fahrenheit, usar la siguiente fórmula: T f = ((9/5) ∗ Tc ) + 32.
Sub-objetivo: Casting. Tipos derivados. E/S de tipos derivados. Overloading del >.
10.
Realizar un programa que calcula el perı́metro de un rectángulo. El valor resultante debe estar expresado en
metros. Las dimensiones pasadas como parámetros pueden estar expresadas en dos magnitudes diferentes:
centı́metros o pulgadas 1 . Los valores de la base, la altura y las magnitudes son ingresadas por el usuario.
Las magnitudes se indican como caracteres o strings.
Sub-objetivo: Tipos derivados. E/S con tipos derivados. Overloading basado en tipos.
Optativo(s):
11.
a)
¿ Para que sirve un tipo derivado ?
b)
¿ Proveen Pascal y Java tipos derivados ?
Realizar un programa que calcule distintos volúmenes invocando a procedimientos, con el mismo nombre,
donde cada procedimiento calcula el volúmen para un cuerpo geométrico diferente.
Las posibilidades son:
cubo (l3 )
prisma con base cuadrada (l 2 ∗ h)
cilindro (π ∗ r2 ∗ h)
Sub-objetivo: Overloading basado en tipos y en cant. de parámetros. Definición de constantes.
1
una pulgada equivale aprox. a 2.54 cm
3
Nota: Se debe entregar el ejercicio 11 pasado por máquina. El plazo es de 2 (dos) semanas a partir
del dı́a que se publica esta práctica. Los grupos de alumnos pueden ser de uno o dos integrantes.
Se debe enviar el ejercicio en un e-mail a la cuenta [email protected]. El mismo no debe tener
ningún archivo adjunto y en el Asunto/Subject debe decir: Entrega 1 - Ada. El cuerpo del e-mail solo
debe contener:
El código fuente del ejercicio resulto, con los comentarios que crea pertinentes.
El nombre de los integrante(s) del grupo y su(s) respectivo(s) número(s) de alumno.
4