17/2/97:
A) Problemas de análisis y diseño
El editor se manejará mediante menús emergentes, por medio del ratón, y proporcionará las siguientes operaciones: crear hoja, borrar hoja, hoja siguiente, hoja anterior, crear caja, enlazar cajas, introducir texto, editar texto, seleccionar, mover, cortar, copiar y pegar, abrir diagrama y guardar diagrama. Las operaciones de cortar, copiar y pegar funcionarán a través de un "buffer". Copiar pasa la parte seleccionada de la hoja al "buffer" sin borrarla, cortar la borra. Pegar pasa el contenido del "buffer" a la hoja activa. El contenido del "buffer" se pierde con cada nueva operación de cortar o copiar. Los diagramas tendrán tamaño fijo (no habrá "zoom"). Cuando se mueve una caja, el texto que contiene se moverá con ella, y los enlaces se alargarán adecuadamente.
Se pide:
B) Problemas de SMALLTALK
a) #(1 'abc' #Juan) class b) 'parts' at: 5 put: $y c) |x| x:=2.(String with: $a with: $b with: $c) at: x put: $d; at: x+1 d) 'abcdebcd' indexOf: $d e) |a| a:=Array new: 3. a at: 1 put: #(2 'abcd'). a at: 2 put: 3/4. a at: 3 put: (a at: 1). a
C) Problemas de JAVA
interface X { void m1(); } interface Y extends X { void m2(); } interface Z extends X { void m3(); }y las siguientes clases JAVA:
class A { void m2() {/*...*/} } class B extends A implements Z { void m3() {/*...*/} } class C extends A implements Y,Z { void m1() {/*...*/} }
¿Es correcta la implementación? Si no lo es, ¿qué se podría hacer para corregirla sin modificar la interfaz y con el número mínimo de cambios? (1 punto).
class A { public String str = "AString"; public void show() { System.out.println("A.show: "+str); } } class B extends A { public String str = "BString"; public void show() { super.show(); System.out.println("B.show: "+str); } public static void main(String[] args) { A a = new A(); B b = new B(); A c = new B(); B d = new A(); a.show(); b.show(); c.show(); } }
Si el programa tiene algún error, corregirlo. En cualquier caso, escribir el resultado de su ejecución (1 punto).
D) Problemas de C++
Se supondrá que hay memoria suficiente para todo (no preocuparse de los fallos de memoria).
Añadir un programa principal que genere el árbol binario de enteros:
10 / \ 5 15 / 12
Se programará de tal manera, que la impresión de ese árbol genere el siguiente resultado:
<5^10><12^15^
Escenario:
Entrada -----> T+=Entrada --- | ^ | | | |---> T/N --> Media --> N++ ---------- ^ ^ | | | | | v v | Memoria: N T | ^ ^ | | | | v | | --> N=0 ---------- | | | |---> 0 ------ | v | Reset -------> T=0 ----------
a) Array b) Error c) $c d) 4 e) ((2 'abcd') (3/4) (2 'abcd'))
factorial "Calcula el factorial de self" self>1 ifTrue: [^(self-1) factorial*self]. self<0 ifTrue: [^self error: 'factorial negativo']. ^1
A.show: AString A.show: AString B.show: BString A.show: AString B.show: BString
#include <stdlib.h> #include <iostream.h> template <class T> class BTree { T elem; BTree *left, *right; public: BTree (T first) { elem = first; left = right = NULL; } ~BTree () { if (left) delete left; if (right) delete right; } void add(T next); void print(); } template <class T> void BTree<T>::add(T next) { if (next<elem) { if (left) left->add(next); else left = new BTree (next); } if (next>elem) { if (right) right->add(next); else right = new BTree (next); } } template <class T> void BTree<T>::print() { if (left) { cout << "<"; left->print(); cout << "^"; } cout << elem; if (right) { cout << ">"; right->print(); cout << "^"; } } void main () { BTree<short> ss(10); ss.add(5); ss.add(15); ss.add(12); ss.print(); }