15/2/97:
A) Problemas de análisis y diseño
Herencia Agregación Asociación PAIS->CAPITAL COMENSAL->TENEDOR ARCHIVO->DIRECTORIO ARCHIVO->REGISTRO POLIGONO->VERTICE PROGRAMADOR->LENGUAJE I/O DEVICE->MODEM OBJETO->ATRIBUTO CARRETERA->CIUDAD POLIGONO->PENTAGONO
B) Problemas de SMALLTALK
a) 'a'+6 b) Set new add: 'HOLA'; add: 'ADIOS'; size; yourself c) |x| x:=0. #(1 2 3 4) do: [:i|x:=x+i]. ^x
a) 3+4*5- 3\\8 Resultado: 0 b) Transcript show: OrderedCollection with: 'abcd' with: 'mnop' at: 2 Resultado: en la ventana Transcript aparece 'mnop' c) 1+ Array new size + #(1 2 3 4) size * 5 + String with: $a with: $b size Resultado: 35
C) Problemas de JAVA
class Stack { static final int STACK_EMPTY = -1; Object[] elements; int top = STACK_EMPTY; boolean isEmpty() { if (top==STACK_EMPTY) return true; else return false; } Object pop() { if (top==STACK_EMPTY) return null; else return elements[top--]; } void push(Object o) { elements[++top] = o; } }
class Tonta { boolean v; void set() { v = true; } public static void main(String[] args) { MasTonta o = new MasTonta(); o.set(); } } class MasTonta extends Tonta { boolean v; void set() { v = false; super.set(); System.out.println(v); System.out.println(super.v); } }
D) Problemas de C++
class Integer { int value; public: Integer (int v) {value=v;} int function (int n) { Integer c((value<n) ? n : value); Integer d((value<n) ? value : n); return (c.value%d.value==0) ? d.value : d.function(c.value%d.value); } }; void main (int argc, char **argv) { if (argc==3) { Integer a(atoi(argv[1])); printf ("El resultado es %d\n", a.function(atoi(argv[2]))); } else printf ("Número de argumentos inválido\n"); }
Herencia Agregación Asociación PAIS->CAPITAL X COMENSAL->TENEDOR X ARCHIVO->DIRECTORIO X ARCHIVO->REGISTRO X POLIGONO->VERTICE X PROGRAMADOR->LENGUAJE X I/O DEVICE->MODEM X OBJETO->ATRIBUTO X CARRETERA->CIUDAD X POLIGONO->PENTAGONO X
Escenario 1 (sólo hay dos mínimos posibles):
Escenario 2 (ejemplo):
Estados: V: Ver hora, H: Ajustar hora, M: Ajustar minuto. Eventos de entrada: pulsar botón A, pulsar botón B. Diagrama de transición: A B V H V H M H M V M Acciones asociadas a transiciones: Casilla H-B: avanzar la hora. Casilla M-B: avanzar el minuto.
a) Error. b) Un conjunto de Strings con los elementos 'HOLA' y 'ADIOS'. c) 10.
a) 3+4*5- 3\\8 b) Transcript show: ((OrderedCollection with: 'abcd' with: 'mnop') at: 2) c) 1+ Array new size + #(1 2 3 4) size * (5 + (String with: $a with: $b) size)
int size; Stack(int size) { this.size = size; elements = new Object[size]; }
y en push habría que comprobar que no rebosa la pila, devolviendo quizá un código de retorno.
false true
enum boolean {false=0, true}; const int STACK_EMPTY = -1; template <class T> class Stack { T *elements; int size, top; public: Stack (int size) { this->size = size; elements = new T[size]; top = STACK_EMPTY; } ~Stack () { delete elements; } boolean isEmpty() { return (top==STACK_EMPTY) ? true : false; } boolean pop(T &el) { if (top==STACK_EMPTY) return false; el = elements[top--]; return true; } boolean push(T el) { if (top==size-1) return false; elements[++top] = el; return true; } } void main () { Stack<short> ss(10); Stack<double> ds(10); ss.push(5); ds.push(5.5); // ... }