Vous êtes sur la page 1sur 8

Primer examen intermedio de la asignatura Programacin Orientada a Objetos

4/11/98: Problemas de JAVA 1. Supongamos que vamos a definir una clase llamada Arbol. En esa clase habr un atributo llamado nombre. Convendr definir ese atributo como variable de objeto o como variable de clase? Por qu? (1 punto) 2. Escriba un programa que imprima una etiqueta como la siguiente:
3. 4. 5. 6. 7. 8. ------------------------| Nombre | | Direccin | | Ciudad | | Telfono | -------------------------

con el menor nmero de instrucciones posible (1 punto). 9. La clase Math posee un mtodo esttico sqrt. Escribir una instruccin que asigne a x el valor de la raz cuadrada de
10. 11. 12. 13. 2 b -4ac -----2a

1. (1 punto). 2. x=Math.sqrt((b*b-4*a*c)/(2*a));
3. 4. 5. 6. 7. 2 2.0 3 3.14... 1

14. Cul ser el resultado de las siguientes expresiones?


15. 16. 17. 18. 19. 52 % 10 Math.sqrt(4) 22 / 7 22 / 7f 4 - 3 / 4 - 3

(1 punto). 20. Supongamos que una clase contiene las siguientes declaraciones de atributos. Cules de ellas sern rechazadas por el compilador de JAVA? Por qu?
21. 22. int i, j, k; max = 10 ;

23. 24. 25. 26. 27. 28.

double x = 1; double K = 1,000; static int Premio = 50; static int 2doPremio = 25; int horaLocal = 4.30; static double x = 6;

(1 punto). 29. Cuntos asteriscos imprimir el bucle siguiente? Por qu?


30. 31. for (int star = 9; star<0; star++) System.out.print('*');

(1 punto). 32. Se desea imprimir una secuencia de lneas como la siguiente:


33. 4****+

donde cada lnea contiene un nmero, tantos asteriscos como indica el nmero, y un signo +. Para ello se ha escrito el siguiente programa:
int numero; for (numero = 1; numero<5; numero++) System.out.print(numero); for (int aster = 1; aster<numero; aster++) System.out.println(aster); System.out.println('+');

Qu escribira en realidad este programa? Cmo habra que corregirlo para que haga lo que se desea? (2 puntos). 34. Cundo una clase no necesita constructor? (1 punto). 35. Escriba un programa que imprima las dcadas del siglo XX (1900 1910...) en una sola lnea y pase lnea al final. (1 punto).

Soluciones:
8. Como variable de objeto, porque cada objeto tiene un nombre diferente.
9. 10. 11. 12. 13. 14. 15. 16. void print() { System.out.println("---------------"+ "|"+nombre+"|"+ "|"+direccion+"|"+ "|"+ciudad+"|"+ "|"+telefono+"|"+ "---------------"); }

17. 18. x=Math.sqrt((b*b-4*a*c)/(2*a));


19. 20. 21. 22. 23. 2 2.0 3 3.14... 1

24. 25. Son errneas:

26. 27. 28.

max = 10 ; double K = 1,000; static int 2doPremio = 25; empezar por 2 29. static double x = 6;

// No se da el tipo // Es 1.000 // Un identific.no puede // Variable duplicada

30. Ninguno, el interior del bucle no se ejecuta nunca. 31. Tal como est, escribe:
32. 33. 34. 35. 36. 12341 2 3 4 +

Se podra programar as:


int numero; for (numero = 1; numero<5; numero++) { System.out.print(numero); for (int aster = 1; aster<numero; aster++) System.out.print("*"); System.out.println('+'); }

37. Cuando no es necesario dar valores iniciales diferentes a sus atributos.


38. 39. 40. for (int i=1900; i<2000; i+=10) System.out.print(i+" "); System.out.println("");

41.

Segundo examen intermedio de la asignatura Programacin Orientada a Objetos


16/12/98: Problemas de Smalltalk 1. Cul es el resultado de las siguientes expresiones? Si alguna de ellas es incorrecta, corregirla con el nmero mnimo de cambios y decir cul sera entonces el resultado (5 puntos). o 5 < #(2 4 6 8 10) at: 3 ifTrue: [1] ifFalse: [0] o 5 < 'abcd' at: 3 < $d ifTrue: [4] ifFalse: [6] ifTrue: [1] ifFalse: [0] o | x y | x:=0. y:=#(1 3 5 7 9). y at: 3 to: 2*y size - 1 do: [:i|x:=x+i]. x o | x | x:=3+4*5 - 2//3+6. x<15 ifTrue: [x:=x+1] ifFalse: [x:=x - 1]; ifTrue: [x] ifFalse: [x//3]
o o o o | x | x:=SortedCollection with: 'abcd' with: 'mnop' with: 'cdef' with: 'cddd'. x select: [ :i | i at: 1 = $c ] asSortedCollection: [ :i :j | i>j]

2. Escribir un mtodo que realice una bsqueda binaria en una coleccin de datos ordenados. En qu clase debera definirse el mtodo? (5 puntos).

Soluciones:
1.
o o o o o o o o

5 <(#(2 4 6 8 10) at: 3)ifTrue: [1] ifFalse: [0] Resultado: 1 5 <(('abcd' at: 3)< $d ifTrue: [4] ifFalse: [6])ifTrue: [1] ifFalse: [0] Resultado: 0 | x y | x:=0. y:=#(1 3 5 7 9). (y at: 3) to: 2*y size - 1 do: [:i|x:=x+i]. x Resultado: 35 Ningn cambio. Resultado: 5
| x | x:=SortedCollection with: 'abcd' with: 'mnop' with: 'cdef' with: 'cddd'. (x select: [ :i | (i at: 1) = $c ]) asSortedCollection: [ :i :j | i>j]

Resultado: SortedCollection ('cdef', 'cddd')


2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. der 18. 19. 20. ] ] ] busquedaBinariaDe: x desde: izq hasta: der "Programa de bsqueda binaria en una coleccin ordenada" | centro | izq=der ifTrue: [ x=(self at: izq) ifTrue: [^izq] ifFalse: [^0] ] ifFalse: [ centro := izq+der//2. x=(self at: centro) ifTrue: [^centro] ifFalse: [ x<(self at: centro) ifTrue: [ ^self busquedaBinariaDe: x desde: izq hasta: centro ] ifFalse: [ ^self busquedaBinariaDe: x desde: centro+1 hasta:

21. Debera definirse en la clase Array (aunque slo sera aplicable a arrays ordenados), SortedCollection, o un antepasado comn de ambas.

Examen final de la asignatura Programacin Orientada a Objetos


5/2/99: A) Problemas de anlisis y diseo

1. Los motores elctricos pueden ser de corriente alterna o continua, aunque algunos funcionan con ambas. Los de corriente alterna pueden ser sncronos o de induccin. Entre los motores elctricos podemos citar los motores sncronos, los motores de induccin, los motores universales y los motores de imn permanente. En el hogar suelen encontrarse motores de induccin y universales. Estos se usan para obtener altas velocidades en mezcladoras o aspiradoras. Funcionan con corriente alterna o continua. Los motores de imn permanente funcionan slo con continua y se encuentran en juguetes. Se pide: Construir un diagrama de clases de motores elctricos, especificando posibles atributos y utilizando herencia mltiple (1 punto). o Modificar el diagrama de clases anterior para eliminar la herencia mltiple. Hay varios modos de hacerlo? (1 punto). 2. Un motor elctrico tiene un control externo que decide cundo debe ponerse en marcha o pararse. El motor dispone de dos bobinas, una de encendido y la otra de marcha. Al ponerse en marcha, las dos bobinas reciben corriente. Cuando el motor entra en rgimen permanente, slo recibe corriente la bobina de marcha. El paso de puesta en marcha a rgimen permanente es controlado automticamente por un sensor interno. El motor contiene tambin un sensor de temperatura que provoca la parada automtica si el motor se sobrecalienta. En este caso, el motor no puede ponerse en marcha de nuevo hasta que se pulse el botn "reset". Se pide:
o o o

Construir el diagrama de estados del motor, incluyendo las actividades realizadas en cada estado. (1 punto). Escribir la lista de los eventos que afectan el funcionamiento del motor. (1 punto).

B) Problemas de SMALLTALK 3. Cul es el resultado de las siguientes expresiones? Si alguna de ellas es incorrecta, corregirla con el nmero mnimo de cambios y decir cul sera entonces el resultado (1 punto).
4. a) (#(1 'abc' #Juan) class with: 2 with: "abcd") at: 2 5. b) (#(1 #(2 3) 4) at: 2) at: 2 + 1 6. c) | x | x:=7. 5 < x ifTrue: [ x < 8 ifTrue: [ x = 6 ifTrue: [ x:=2*x ] 7. ifFalse: [ x:=2*x+1 ]] ifFalse: [ x:=2*x-1 ] ifFalse: [ x=x//2 ] ] 8. d) | x | 9. x:=SortedCollection with: 'abcd' with: 'mncp' with: 'cdcf' with: 'cddd'. 10. x select: [ :i | i at: 3 = $c ] asSortedCollection: [ :i :j | i>j] 11. e) | a b | a:=Array new: 2. a at: 1 put: #('abcd' #(2 3)). 12. b:=Array new: 2. b at: 1 put: 2. b at: 2 put: a at: 1 at: 2. 13. a at: 2 put: b. a

14. Definir una clase Matriz con tres parmetros: filas, columnas, datos. Escribir los mtodos necesarios para que pueda crearse un objeto de clase Matriz (aunque no tenga datos). (1 punto). C) Problemas de JAVA 15. Sea el siguiente programa JAVA:
16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. class TryTry { public static void main(String[] args) { try { if (args.length==0) throw 5; else throw "abcd"; } catch (int n) { System.out.println("Error " + n); } catch (Object o) { System.out.println("Error " + o); } } }

Si este programa es correcto, explicar lo que hace. Si es incorrecto, explicar por qu. (1 punto). 30. Construir un programa que, ejecutado indistintamente como aplicacin o como "applet", escriba "Hola, mundo!" en la pantalla. (1 punto). D) Problemas de C++ 31. Construir un "template" que implemente la clase Bag a la Smalltalk, con los siguientes mtodos: o Un constructor que cree un objeto Bag vaco. o Un destructor que borre el objeto. o Un mtodo "add" que aada un valor nuevo al objeto. o Un mtodo "do" que ejecute una funcin sobre cada elemento y devuelva un objeto del mismo tipo que los contenidos en la bolsa. o Mtodos adicionales al gusto. Se supondr que hay memoria suficiente para todo (no preocuparse de los fallos de memoria). Aadir un programa principal que genere un objeto Bag de enteros e introduzca varios enteros. (2 puntos).

Soluciones:
A) Problemas de anlisis y diseo 1.
o

Diagrama de clases con atributos:

o o o o o o o o o o o o o o o o o o o

Motor elctrico (voltaje, potencia, velocidad, etc) Motor de corriente alterna ---------> Motor universal (frecuencia, etc) ^ (uso) Motor sncrono | Motor de induccin | (uso) | Motor de corriente continua ----------Motor de imn permanente (induccin magntica, uso)

Sin herencia mltiple:


Motor elctrico Motor de corriente alterna Motor sncrono Motor de induccin Motor universal alterno Motor de corriente continua Motor de imn permanente Motor universal continuo

O bien:
Motor elctrico Motor de corriente alterna Motor sncrono Motor de induccin Motor de corriente continua Motor de imn permanente Motor universal

2. Motor elctrico: o Estados:


o o o o o o o o o Parado Arrancando En marcha (rgimen permanente) Sobrecalentado

Eventos:
Pulsacin del control de encendido/apagado Pulsacin del botn de reset Activacin del sensor interno de rgimen permanente Activacin del sensor interno de sobrecalentamiento

B) Problemas de SMALLTALK
3. 4. 5. 6. 7. 8. 9. a) (#(1 'abc' #Juan) class with: 2 with: 'abcd') at: 2 ^ ^ Resultado: 'abcd' b) ((#(1 #(2 3) 4) at: 2) at: 2) + 1 ^ ^ Resultado: 4 c) | x | x:=7. 5 < x ifTrue: [ x < 8 ifTrue: [ x = 6 ifTrue: [ x:=2*x ] 10. ifFalse: [ x:=2*x+1 ]] ifFalse: [ x:=2*x- 1 ] ] ifFalse: [ x:=x//2 ] 11. ^ ^ ^ ^ 12. Resultado: 15

13. d) | x | 14. x:=SortedCollection with: 'abcd' with: 'mncp' with: 'cdcf' with: 'cddd'. 15. (x select: [ :i | (i at: 3) = $c ]) asSortedCollection: [ :i :j | i>=j] 16. ^ ^ ^ ^ 17. Resultado: SortedCollection ('mncp', 'cdcf', 'abcd') 18. e) | a b | a:=Array new: 2. a at: 1 put: #('abcd' #(2 3)). 19. b:=Array new: 2. b at: 1 put: 2. b at: 2 put: ((a at: 1) at: 2). 20. ^^ ^ ^ 21. a at: 2 put: b. a 22. Resultado: Array (('abcd' (2 3)) (2 (2 3)))

23.
24. Variables de objeto: filas, columnas, datos. 25. Mtodo de clase: 26. new: aNumber1 new: aNumber2 27. "Crea una matriz" 28. |x| 29. x:=Matriz new. "Crea el objeto con el constructor por defecto" 30. x new: aNumber1 new: aNumber2. "Lanza el mtodo de objeto" 31. ^x "Devuelve el objeto" 32. Mtodo de objeto: 33. new: aNumber1 new: aNumber2 34. "Asigna valores a las variables de objeto" 35. filas := aNumber1. 36. columnas := aNumber2. 37. datos := Array new: filas. 38. "Da estructura a los datos" 39. 1 to: filas do: [:i|datos at: i put: (Array new: columnas)]

40. C) Problemas de JAVA 41. El programa TryTry es incorrecto porque en JAVA no se pueden lanzar nmeros ni cadenas de caracteres, sino slo objetos descendientes de la clase Throwable.
42. 43. 44. 45. 46. 47. /* Aplicacin/applet */ import java.applet.Applet; import java.awt.Graphics; public class HelloWorld2 extends Applet { public static void main(String[] args) { System.out.println("Hola, Mundo!"); // Display the string 48. } 49. public void paint(Graphics g) { 50. g.drawString("Hola, mundo!", 50, 25); 51. } 52. }

53.

Vous aimerez peut-être aussi