Instituto de Computación Curso de Programación 1

Anuncio
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 1 of 6
Instituto de Computación
Curso de Programación 1 - Práctico 8
1. Identifique los parámetros de entrada (de valor) y de salida (variables) en el siguiente
encabezado de procedimiento :
PROCEDURE Cheque (x, y, z : integer; VAR a, b, c : integer);
2. Explique la diferencia entre un parámetro formal y un parámetro verdadero.
3. Examine el siguiente código:
PROGRAM ...
...
PROCEDURE Inicio (tiempo, espacio: real; VAR dia: real; signo: char);
...
BEGIN
...
Inicio (3.5, 6.0, hora, `Z');
...
END.
Identifique los parámetros formales y los parámetros verdaderos.
4. Escribir un procedimiento con solo tres parámetros enteros: a, b y c. El efecto del
procedimiento debe ser
"girar" los valores de los parámetros hacia la derecha de manera que, después de la ejecución,
el valor que
originalmente estaba en a quede en b, el que estaba en b quede en c y el que estaba en c quede
en a. Probar
el procedimiento con un programa que tome a, b y c de la entrada estándar.
Ejemplos de entrada:
4 1 7
-12 6 2
Ejemplos de salida:
7 4 1
2 -12 6
5. Considere el siguiente programa :
PROGRAM alcance (input, output);
VAR tum, num, temp : Integer;
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 2 of 6
PROCEDURE Prog (a, b : integer; VAR c : integer);
VAR reloj : Integer;
BEGIN
reloj := a * b;
reloj := reloj + 1;
c := reloj + a;
WriteLn (a, b, c, reloj)
END;
(*Programa principal*)
BEGIN
tum := 1;
num := 2;
Prog (tum, num, temp);
WriteLn (temp);
tum := 0;
num := 1;
Prog (tum, num, temp);
WriteLn (temp)
END.
a. Identifique las variables globales del programa principal.
b. Identifique la variable local declarada en el procedimiento Prog.
c. Identifique los parámetros formales del procedimiento Prog. Determine los parámetros
de entrada (de valor) y de salida (variables).
d. Determine los parámetros de valor verdaderos en la primera invocación del
procedimiento.
e. Determine los parámetros de valor verdaderos en la segunda invocación del
procedimiento.
f. Determine la salida estándar del programa. ¿Cuántas líneas se escribirán ?
6. Dado el siguiente procedimiento
PROCEDURE Prueba (x: Real; y: Integer; VAR z: Real);
y las siguientes variables
VAR tiempo
: Real;
tiempo_i : Integer;
Determine cuales de las siguientes invocaciones son correctas. Justifique.
Prueba(
Prueba(
Prueba(
Prueba(
Prueba(
Prueba(
Prueba(
1, 2.0, tiempo );
tiempo_i, 3, tiempo );
tiempo_i, 3, 2.0 );
1, 3, tiempo_i );
5 * tiempo_i, round( 7.3 ), tiempo ); (* tiempo_i ya fue inicializada
tiempo, 3, tiempo );
Prueba( 5, 33.8, tiempo ), 92, tiempo )
7. Considere el siguiente problema. Un piso rectangular que mide 12 metros por 15 metros está
cubierto parcialmente por tapetes circulares. El radio de un tapete es de un metro. El radio del
otro es de dos metros. El resto del ejercicio plantea cómo hallar el área de la parte del piso que
está descubierta.
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 3 of 6
a. Escriba una función que dado el radio de un círculo (un real), devuelva el área
correspondiente.
b. Escriba una función que calcule el área de un rectángulo de longitud y anchura dadas.
c. Escriba un programa completo en Pascal que incluya las funciones desarrolladas en las
partes anteriores. El programa deberá incluir invocaciones de las funciones para calcular
el área de cada círculo, y una invocación para determinar el área del piso rectangular.
Después, el programa principal deberá determinar el área descubierta del piso y exhibir
ese resultado.
8. Implemente un procedimiento para calcular las raíces de un polinomio de 2do grado. Este
tendrá 6 parámetros: 3 para los coeficientes del polinomio (enteros), 2 para las raíces (reales) y
uno para la cantidad de raíces halladas (entero). Determine qué parámetros deben ser de valor
y qué parámetros deben ser variables.
9. Implemente un procedimiento que dado un arreglo de enteros devuelva el valor mas grande y
el índice en que éste ocurre. El largo del arreglo es dado por una constante N global a la
función.
10. Para cada uno de los siguientes problemas, indique si la forma mas apropiada de expresar la
solución
es con una función o un procedimiento, justificando brevemente.
a. Dado un número primo, determinar el número primo inmediato más grande.
b. Dado un entero positivo N diferente de cero, determinar el número de factores únicos de
N y los dos (o menos) factores
únicos más grandes.
c. Dado un carácter del conjunto de caracteres ASCII, determinar su posición ordinal en el
conjunto de caracteres EBCDIC.
d. Dado un número de años N y una cantidad que se va a obtener, C, determinar la tasa
mínima de interés anual necesaria
para alcanzar C en N años si el interés es compuesto anual, y la tasa de interés anual
necesaria para alcanzar C en N
años si el interés es compuesto mensual.
11. Escriba una función llamada conv que convierta un arreglo de caracteres, cada uno de los
cuales contiene un dígito decimal, al entero equivalente. Por ejemplo, si el parámetro de
entrada es [ `1', `2', `3' ], entonces el entero resultante será 123. El largo del arreglo es dado
por una constante N global a la función.
12. Escriba una función llamado magnitud que tenga cuatro parámetros de entrada (de valor)
llamados x1, y1, x2 y y2, y retorne la distancia absoluta entre los puntos (x1,y1) y (x2,y2).
Todas las variables son de tipo real.
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 4 of 6
13. Escriba una función en Pascal para determinar el área de una figura de cuatro lados, dadas las
coordenadas de los vértices de la figura. Utilice la función de área de triángulos siguiente.
FUNCTION CalcArea( a, b, c: Real ) : Real;
(*Calcula el area de un triangulo de lados a, b, c*)
VAR s
: Real (* Mitad del perimetro del triangulo*)
perimetro : Real; (* Perimetro del triangulo*)
BEGIN
perimetro := a + b + c;
s := perimetro / 2;
(* Calculo del area mediante la formula de Heron *)
CalcArea := sqrt (s * (s-a) * (s-b) * (s-c))
END;
14. Reescriba el programa del Ejercicio 10 del Práctico 7, implementando y utilizando esta
función:
FUNCTION EsPrimo( valor: Integer ) : Boolean;
solo si "valor" es primo *)
(* Devuelve TRUE si y
15. Escriba una función booleana llamada "Multiplo" que tenga dos argumentos enteros m y n.
"Multiplo" debe producir el valor
True si m es un múltiplo entero de n, o si n es un múltiplo entero de m. Escriba un programa
para probar
esta función. El programa deberá leer una pareja de enteros positivos de cada línea de datos de
entrada,
invocar a "Multiplo", y exhibir el resultado de esta función. La secuencia de enteros
finaliza cuando el usuario ingresa el valor -1.
Ejemplo de entrada/salida:
4 7
Falso
4 8
Verdadero
16 8
Verdadero
-1
16. Implemente una función que dados 2 arrays de caracteres, determine si el primero es prefijo
del segundo. Luego reescriba el Ejercicio 7 del Práctico 7 utilizando esta función. En caso de
que la cadena más corta
pertenezca a la más larga, despliegue en la salida estándar la posición en que comienza la
coincidencia. Tomando
el primer ejemplo dado en el Ej. 7, la salida sería:
El texto 'tor' se encuentra dentro del texto 'totora' ( posición de
comienzo: 3 ).
En caso de que no haya coincidencia, el mensaje deberá ser el mismo que en el Ej. 7 del Pr. 7.
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 5 of 6
17. Una matriz simétrica a es un arreglo cuadrado bidimensional con la propiedad de que a[i,j] =
a[j,i].
Una matriz así se puede almacenar en forma compacta ( en el arreglo ac) ya que basta con
almacenar
una sola vez los elementos duplicados del arreglo. En primer término, diseñe un método para
almacenar
un arreglo de éstos sin repetir los elementos duplicados. Después escriba una función OBTSIM
( ac, i, j ) que de
el valor de a[i,j] y un procedimiento ALMASIM( ac, i, j, val ) que almacene val en la posición
que
corresponda del arreglo compacto ac.
Sugerencia: basta con almacenar n elementos de la columna n; pensar en un arreglo
unidimensional que contiene los
elementos de la columna uno, después de la columna dos, y así sucesivamente.
18. La función de Ackermann se define de la siguiente manera, donde m, n y el resultado son
todos valores enteros:
A(m,n)
= n + 1 si m = 0
= A( m - 1, 1 ) si m <> 0 y n = 0
= A( m - 1, A( m, n - 1 )) si m ni n son 0
Escriba una función en Pascal que calcule el valor de la función de Ackermann, dados los
parámetros m y n.
Tenga en cuenta que valores altos de m y n producen tiempos de ejecución largos.
19. Escriba una función que produzca el factor primo más pequeño de su argumento entero
positivo. Escríbir un programa principal
que use esta función para exhibir los factores primos de los enteros que aparecen en los datos
de entrada.
La secuencia de enteros termina en 0. Exhibir los resultados para cada dato en una línea,
precedidos por el entero mismo
y un signo de igual. Separar los factores primos mediante asteriscos.
Ejemplo de entrada:
39 42 1517 0
Ejemplo de salida:
39 = 3 * 13
42 = 2 * 3 * 7
1517 = 37 * 41
20. Implemente una función recursiva que dado un arreglo de enteros de tamaño N, retorne el
máximo elemento del mismo.
21. Escriba un procedimiento que reciba un valor entero, y que lo exhiba en el mínimo espacio
posible, utilizando solo
proposiciones write con un parámetro de tipo caracter. Esto se puede hacer si se trata la
exhibición como un problema
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Instituto de Comptución - Curso de Programación 1 - Práctico 8
Page 6 of 6
recursivo. Suponiendo que el entero a exhibir es N, el problema se resolverá de este modo:
Si N es negativo, poner '-' y luego imprimir la representación de -N,
que va a ser un entero positivo.
Si N es mayor o igual a 10, llamar recursivamente este procedimiento con
N DIV 10.
Exhibir N MOD 10
Escriba un programa principal para probar el procedimiento, tomando el valor entero de la
entrada estándar.
In.Co. - Curso de Programación 1
http://www.fing.edu.uy/inco/cursos/prog1/pm/uploads/Materiales/Practico8.html
28/10/2005
Descargar