מדעי המחשב ב`

Anuncio
Estado de Israel
Ministerio de Educación
Tipo de Examen:
‫א‬. Bachillerato (Escuelas de enseñanza media)
‫ב‬. Bachillerato externo
Fecha de examen: verano 2013
Cuestionario número: 899205, 603
Traducción al español (12)
Ciencias de la Computación '‫ב‬
Dos unidades de estudio
(complemento a 5 unidades de estudio)
Instrucciones para el examen
‫א‬. Duración del examen: tres horas.
‫ב‬. Estructura del cuestionario y clave de la evaluación:
Este cuestionario consta de dos partes.
Primera parte - Esta parte consta de cuatro preguntas, y de ellas debes
responder a dos.
(2x25) — 50 puntos
Segunda parte - Esta parte consta de preguntas que
se pueden responder según cuatro orientaciones diferentes. Responde
solamente según la orientación en la
que estudiaste, y según las instrucciones correspondientes a dicha orientación.
(2x25) — 50 puntos
Total — 100 puntos
‫ג‬. Material auxiliar permitido:
Cualquier material auxiliar, salvo calculadoras
programables.
‫ד‬. Instrucciones especiales:
(1) En la primera parte, debes escribir todos los programas que te son requeridos en un solo
lenguaje: C# o Java. (2) Indica en la cobertura externa del cuadernillo
cuál es el lenguaje de programación con el que respondes: C# o Java.
(3) Indica en la cobertura externa del cuadernillo
el nombre de la orientación según la cual
estudiaste, una de cuatro orientaciones: Sistemas
de computación y Assembler, Introducción a la
Investigación Operativa, Modelos
computacionales, Programación orientada a objetos.
Nota: No se te descontarán puntos en el caso de que
escribas minúsculas o mayúsculas unas en lugar de otras en el momento de escribir programas.
‫מדינת ישראל‬
‫משרד החינוך‬
:‫סוג הבחינה‬
‫ בגרות לבתי ספר על־יסודיים‬.‫א‬
‫ בגרות לנבחנים אקסטרניים‬.‫ב‬
2013 ,‫ קיץ תשע"ג‬:‫מועד הבחינה‬
603 ,899205 :‫מספר השאלון‬
)12( ‫תרגום לספרדית‬
'‫מד עי המח שב ב‬
)‫ יח"ל‬5-‫ יחידות לימוד (השלמה ל‬2
‫הוראות לנבחן‬
.‫ שלוש שעות‬:‫ משך הבחינה‬.‫א‬
:‫ מבנה השאלון ומפתח ההערכה‬.‫ב‬
.‫בשאלון זה שני פרקים‬
‫ בפרק זה ארבע שאלות ומהן‬- ‫פרק ראשון‬
.‫יש לענות על שתיים‬
‫ נקודות‬50 — )25x2(
‫ בפרק זה שאלות בארבעה‬- ‫ פרק שני‬
‫ ענה על שאלות‬.‫מסלולים שונים‬
‫ לפי ההוראות‬,‫רק במסלול שלמדת‬
.‫בקבוצת השאלות במסלול זה‬
‫ נקודות‬50 — )25x2(
‫ נקודות‬100 —
‫סה"כ‬
:‫ חומר עזר מותר בשימוש‬.‫ג‬
.‫ חוץ ממחשב הניתן לתכנות‬,‫כל חומר עזר‬
:‫ הוראות מיוחדות‬.‫ד‬
‫) את כל התכניות שאתה נדרש לכתוב‬1( ‫בשפת מחשב בפרק הראשון‬
— ‫כתוב בשפה אחת בלבד‬
. Java ‫ או‬C#
‫) רשוֹם על הכריכה החיצונית של‬2( — ‫המחברת באיזו שפה אתה כותב‬
. Java ‫ או‬C#
‫) רשוֹם על הכריכה החיצונית של‬3( ,‫המחברת את שם המסלול שלמדת‬
:‫אחד מארבעת המסלולים‬
‫ מבוא לחקר‬,‫מערכות מחשב ואסמבלר‬
‫ תכנות‬,‫ מודלים חישוביים‬,‫ביצועים‬
.‫מונחה עצמים‬
‫ בתכניות שאתה כותב לא יורדו לך‬:‫ הערה‬
‫ אם תכתוב אות גדולה במקום‬,‫נקודות‬
.‫אות קטנה או להפך‬
.‫ רשוֹם "טיוטה" בראש כל עמוד טיוטה‬.)‫ חישובים וכדומה‬,‫ כל מה שברצונך לכתוב כטיוטה (ראשי פרקים‬,‫ בעמודים נפרדים‬,‫כתוב במחברת הבחינה בלבד‬
!‫רישום טיוטות כלשהן על דפים מחוץ למחברת הבחינה עלול לגרום לפסילת הבחינה‬
Escribe solamente en el cuadernillo del examen, en páginas separadas, todo lo que desees escribir como borrador (títulos, cálculos, etc). Escribe
la palabra "‫ "טיוטה‬al inicio de cada página de borrador. Toda anotación realizada en hojas que no pertenezcan al cuadernillo del examen, puede
causar la anulación del mismo.
¡Buena Suerte!
/Continúa en la página siguiente/
!‫בהצלחה‬
/‫המשך מעבר לדף‬/
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-2-
Preguntas
Este cuestionario consta de dos partes: Primera parte y Segunda parte.
Debes responder a las preguntas de las dos partes, según las instrucciones de cada parte.
Primera parte (50 puntos)
Presta atención: en toda pregunta en la que se requiera implementación,
puedes utilizar métodos de las clases Node<T> , List<T>, BinTreeNode<T>, sin
implementarlos. Si utilizas métodos adicionales, deberás implementarlos.
Responde a dos de las preguntas 1– 4 (cada pregunta – 25 puntos).
1. Presta atención: Para la siguiente pregunta hay dos versiones: una en Java
(páginas 2-3), y la otra en C# (página 4-5). Trabaja de acuerdo al lenguaje que has estudiado.
Para los que resuelven en Java
A continuación se hallan tres métodos sod1 , sod2 , sod3.
public static boolean sod1(List<Integer> list1, List<Integer> list2)
{
Node<Integer> node1 = list1.getFirst();
Node<Integer> node2 = list2.getFirst();
for (int i = 1; i <= 4; i++)
{
if ((node1 == null) || (node2 == null))
return false;
if ((i == 1) || (i == 4))
if (node1.getInfo() != node2.getInfo())
return false;
node1 = node1.getNext();
}
return true;
}
public static boolean sod2(List<Integer> list1, List<Integer> list2)
{
Node<Integer> node1 = list1.getFirst();
Node<Integer> node2 = list2.getFirst();
while ((node1 != null) && (node2 != null))
{
if (node1.getInfo() != node2.getInfo())
return false;
node1 = node1.getNext();
node2 = node2.getNext();
}
return true;
/ continúa en la página 3 /
}
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-3-
public static boolean sod3(List<Integer> list1, List<Integer> list2)
{
Node<Integer> node1 = list1.getFirst();
while (node1 != null)
{
boolean found = false;
Node<Integer> node2 = list2.getFirst();
while ((node2 ! = null) && (!found))
{
if (node1.getInfo() == node2.getInfo())
found = true;
node2 = node2.getNext();
}
if (!found)
return false;
node1 = node1.getNext();
}
return true;
}
‫א‬. Realiza el seguimiento de cada uno de los métodos sod1 , sod2 ,
sod3, con las listas list1 y list2 que están a continuación:
list1: 2 " 4 " 5 " 1 " 1 " 9 ";z
list2: 2 " 4 " 5 " 1 " 4 ";z
Escribe qué es lo que devolverá para cada uno de los métodos. En el
seguimiento muestra el repaso sobre las listas.
‫ב‬. ¿Cuál es la complejidad de tiempo ]‫ [סיבוכיות זמן‬de la ejecución de cada
uno de los métodos sod1 , sod2 , sod3 ? Justifica tu respuesta.
/ continúa en la página 4 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-4-
Para los que resuelven en C#
A continuación se hallan los métodos Sod1 , Sod2 , Sod3 .
public static bool Sod1(List<int> list1, List<int> list2)
{
Node<int> node1 = list1.GetFirst();
for (int i = 1; i <= 4; i++)
Node<int> node2 = list2.GetFirst();
{
if ((node1 == null) || (node2 == null))
if ((i == 1) || (i == 4))
return false;
if (node1.GetInfo() ! = node2.GetInfo())
return false;
}
}
node1 = node1.GetNext();
return true;
public static bool Sod2(List<int> list1, List<int> list2)
{
Node<int> node1 = list1.GetFirst();
while ((node1 != null) && (node2 != null))
Node<int> node2 = list2.GetFirst();
{
if (node1.GetInfo() != node2.GetInfo())
return false;
node1 = node1.GetNext();
node2 = node2.GetNext();
}
return true;
}
/ continúa en la página 5 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-5-
public static bool Sod3(List<int> list1, List<int> list2)
{
Node<int> node1 = list1.GetFirst();
while (node1 != null)
{
bool found = false;
while ((node2 != null) && (!found))
Node<int> node2 = list2.GetFirst();
{
if (node1.GetInfo() == node2.GetInfo())
node2 = node2.GetNext();
}
found = true;
if (!found)
node1 = node1.GetNext();
}
return false;
return true;
}
‫א‬. Realiza el seguimiento de cada uno de los métodos Sod1, Sod2, Sod3,
con las listas list1 y list2 que están a continuación:
list1: 2 " 4 " 5 " 1 " 1 " 9 ";z
list2: 2 " 4 " 5 " 1 " 4 ";z
Escribe qué es lo que devolverá para cada uno de los métodos. En el
seguimiento muestra el repaso sobre las listas.
‫ב‬. ¿Cuál es la complejidad de tiempo ]‫ [סיבוכיות זמן‬de la ejecución de cada
uno de los métodos Sod1 , Sod2 , Sod3 ? Justifica tu respuesta.
/ continúa en la página 6 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
2.
-6-
Presta atención: Para la siguiente pregunta hay dos versiones: una en Java
(página 6), y la otra en C# (página 7).
Trabaja de acuerdo al lenguaje que has estudiado.
Para los que resuelven en Java
Un árbol trinario es un árbol que tiene a lo sumo tres hijos por nodo, un
hijo izquierdo, un hijo medio y un hijo derecho.
A continuación una interface parcial de la clase "Nodo trinario"
TriTreeNode<T>.La clase define un nodo trinario en el que hay un valor de
tipo T y tres referencias [‫ ]הפניות‬a nodos trinarios.
Nombre del método
El método construye un nodo trinario cuyo
valor sea x, y el valor de las tres referencias
será null.
TriTreeNode
El método construye un nodo trinario cuyo
(TriTreeNode<T> left,
valor sea x. left — referencia al hijo
TriTreeNode<T> middle,
izquierdo, middle — referencia al hijo
TriTreeNode<T> right, T x) medio, y right — referencia al hijo derecho.
Los valores de las referencias pueden ser null.
T getInfo ()
El método devuelve el valor del nodo trinario.
void setInfo (T x)
El método cambia el valor conservado en el
nodo trinario por x.
TriTreeNode<T> getLeft()
El método devuelve el hijo izquierdo del nodo
trinario.
Si no hay hijo izquierdo, el método devuelve null.
TriTreeNode<T> getMiddle()
El método devuelve el hijo medio del nodo trinario.
Si no hay hijo medio, el método devuelve null.
TriTreeNode<T> getRight()
El método devuelve el hijo derecho del nodo trinario.
Si no hay hijo derecho, el método devuelve null.
TriTreeNode( T x)
Descripción
‫א‬.
‫ב‬.
Escribe en Java un método externo big que reciba un árbol trinario t
de números enteros mayores que 0, y devuelva el número mayor del árbol. Si el árbol es vacío el método devolverá - 1.
A continuación la declaración del método:
public static boolean noThree(TriTreeNode<Integer> tr)
El método recibirá el árbol trinario tr de números enteros y devolverá
true si en cada uno de los nodos del árbol no hay más de dos hijos.
En caso contrario el método devolverá false. Si el árbol es vacío el
método devolverá true. Implementa el método en Java.
Nota: Puedes utilizar los métodos de la clase TriTreeNode sin implementarlos.
Si utilizas métodos adicionales, deberás implementarlos.
/ continúa en la página 7 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-7-
Para los que resuelven en C#
Un árbol trinario es un árbol que tiene a lo sumo tres hijos por nodo, un
hijo izquierdo, un hijo medio y un hijo derecho.
A continuación una interface parcial de la clase "Nodo trinario"
TriTreeNode<T>.
La clase define un nodo trinario en el que hay un valor de tipo T y tres
referencias [‫ ]הפניות‬a los nodos trinarios.
Nombre del método
Descripción
El método construye un nodo trinario cuyo
valor sea x, y el valor de las tres referencias
será null.
TriTreeNode
El método construye un nodo trinario cuyo
(TriTreeNode<T> left,
valor sea x. left — referencia al hijo
TriTreeNode<T> middle,
izquierdo, middle — referencia al hijo
TriTreeNode<T> right, T x) medio, y right — referencia al hijo derecho.
Los valores de las referencias pueden ser null.
T GetInfo ()
El método devuelve el valor del nodo
trinario.
void SetInfo (T x)
El método cambia el valor conservado en el
nodo trinario por x.
TriTreeNode<T> GetLeft()
El método devuelve el hijo izquierdo del
nodo trinario.
Si no hay hijo izquierdo, el método devuelve null.
TriTreeNode<T> GetMiddle()
El método devuelve el hijo medio del nodo trinario.
Si no hay hijo medio, el método devuelve null.
TriTreeNode<T> GetRight()
El método devuelve el hijo derecho del nodo trinario.
Si no hay hijo derecho, el método devuelve null.
TriTreeNode( T x)
‫א‬. Escribe en C# un método externo Big que reciba un árbol trinario t
de números enteros mayores que 0, y devuelva el número mayor del árbol. Si el árbol es vacío el método devolverá - 1.
‫ב‬. A continuación la declaración del método:
public static bool NoThree(TriTreeNode<int> tr)
El método recibirá el árbol trinario tr de números enteros y devolverá
true si en cada uno de los nodos del árbol hay a lo sumo dos hijos.
En caso contrario el método devolverá false. Si el árbol es vacío el
método devolverá true. Implementa el método en C#.
Nota: Puedes utilizar los métodos de la clase TriTreeNode sin implementarlos.
Si utilizas métodos adicionales, deberás implementarlos.
/continúa en la página 8/
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-8-
3. En esta pregunta hay dos apartados, ‫א‬-‫ב‬, que no tienen relación entre sí.
Responde a ambos.
‫א‬. Una ficha de dominó tiene dos sectores. Sobre uno de los sectores está
escrito uno de los números de una cifra entre 0 y 6 (incluidos), y sobre el otro sector está escrito uno de los números de dos cifras entre 10 y 16 (incluidos).
)1( Escribe en Java o en C# la declaración de la clase BiStone, que
define la ficha de dominó, y sus propiedades.
)2( Escribe en Java o en C# en la clase BiStone un método constructor
que reciba dos números, uno de una cifra entre 0 y 6, y otro de dos
cifras entre 10 y 16.
)3( Escribe en Java o en C# en la clase BiStone un método interno que
devuelva true si el número de una cifra que está en uno de los
sectores de la ficha de dominó es igual a la cifra de las unidades
del número de dos cifras que está en el otro sector de la ficha. En
caso contrario el método devolverá false.
La clase Stones es la colección de todas las fichas BiStone posibles.
En la clase no hay dos fichas con la misma combinación de números.
En total hay en la clase Stones 49 fichas que son fichas Bistone.
)4( Escribe en Java o en C# la declaración de la clase Stones y sus
propiedades.
)5( Escribe en Java o en C# en la clase Stones un método constructor
que produzca la totalidad de las 49 fichas BiStone.
‫ב‬. (Sin relación con el apartado ‫א‬.)
(1) Escribe en Java o en C# un método que reciba un número entero num, mayor que 1, y una lista lst que contenga números enteros mayores que 0, todos menores que num.
El método devolverá una nueva lista cuyos términos son todos
los números enteros mayores que 0 y menores que num, que no
aparecen en la lista lst.
(2) ¿Cuál es la complejidad de tiempo ]‫ [סיבוכיות זמן‬de la ejecución del método que escribiste? Justifica tu respuesta.
/ continúa en la página 9 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
-9-
4. Presta atención: Para la siguiente pregunta hay dos versiones: una en Java (páginas 9-10), y la otra en C# (páginas 11-12). Trabaja
de acuerdo al lenguaje que has estudiado.
Para los que resuelven en Java
En esta pregunta hay dos apartados, ‫א‬-‫ב‬, que no tienen relación entre sí.
Responde a ambos.
‫א‬. A continuación se encuentra el método amir.
public static void amir(BinTreeNode<Integer> t, int x)
{
if (t != null)
{
amir(t.getLeft() , x + 1);
if ((t.getLeft() == null) && (t.getRight() == null))
amir(t.getRight() , x + 1);
t.setInfo(x) ;
}
}
A continuación se encuentra el árbol tree.
tree
5
7
4
i
3
6
Escribe el árbol tree que se obtiene después de operar la convocatoria [‫]זימון‬: amir(tree , 4).
ii ¿Qué es lo que ejecuta el método amir para un árbol cualquiera y x = 0?
(Presta atención: el apartado ‫ ב‬está en la página siguiente.)
/ continúa en la página 10 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 10 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (Sin conexión con el apartado ‫א‬.)
Se da un árbol binario de búsqueda t, que contiene por lo menos tres
nodos cuyos valores son: x, y, z.
A continuación te presentamos dos proposiciones:
(1) Si x, y, z son los valores de tres nodos consecutivos en un
recorrido en inorden (inorder) de t,entonces z = x .
(2) Si x e y son los valores de dos hojas de t (de izquierda a
derecha), entonces x 2 y .
Para cada una de las proposiciones (1)-(2) elige la opción adecuada entre
las tres opciones siguientes:
•
•
•
La proposición es verdadera en cualquier caso. Justifica tu
respuesta.
La proposición no es verdadera en ningún caso. Justifica tu
respuesta.
La proposición es verdadera en algunos casos. Expón un ejemplo
del caso en que la proposición es verdadera, y un ejemplo de un
caso en que la proposición es falsa.
/ continúa en la página 11 /
- 11 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Para los que resuelven en C#
En esta pregunta hay dos apartados, ‫א‬-‫ב‬, que no tienen relación entre sí.
Responde a ambos.
‫א‬. A continuación se encuentra el método Amir.
public static void Amir(BinTreeNode<int> t, int x)
{
if (t != null)
{
Amir(t.GetLeft () , x + 1) ;
if ((t.GetLeft() == null) && (t.GetRight() == null))
}
}
t.SetInfo (x) ;
Amir(t.GetRight () , x + 1) ;
A continuación se encuentra el árbol tree.
tree
5
7
4
i
ii
3
6
Escribe el árbol tree que se obtiene después de operar la convocatoria [‫]זימון‬: Amir(tree , 4) .
¿Qué es lo que ejecuta el método Amir para un árbol cualquiera y
x=0 ?
(Presta atención: el apartado ‫ ב‬está en la página siguiente.)
/ continúa en la página 12 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 12 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (Sin conexión con el apartado ‫א‬.)
Se da un árbol binario de búsqueda t, que contiene por lo menos tres
nodos cuyos valores son: x, y, z.
A continuación te presentamos dos proposiciones:
(1) Si x, y, z son los valores de tres nodos consecutivos en un
recorrido en inorden (inorder) de t,entonces z = x .
(2) Si x e y son dos hojas de t (de izquierda a derecha), entonces
x 2 y.
Para cada una de las proposiciones (1)-(2) elige la opción adecuada entre
las tres opciones siguientes:
•
•
•
La proposición es siempre verdadera. Justifica tu respuesta.
La proposición no es verdadera en ningún caso. Justifica tu
respuesta.
La proposición es verdadera en algunos casos. Expón un ejemplo
del caso en que la proposición es verdadera, y un ejemplo de un
caso en que la proposición es falsa.
/ continúa en la página 13 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 13 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Segunda parte (50 puntos)
Esta parte consta de preguntas que se pueden responder según cuatro
orientaciones:
Sistemas de computación y Assembler, págs. 13-17.
Introducción a la investigación operativa, págs. 18-24.
Modelos computacionales, págs. 25-29.
Programación orientada a objetos en Java, págs. 30-36;
Programación orientada a objetos en C#, págs. 37-43.
Responde solamente a las preguntas de la orientación que estudiaste.
Sistemas de computación y Assembler
Si estudiaste en esta orientación, responde a dos de las preguntas 5-8
(cada pregunta – 25 puntos).
5. En el segmento de datos se definieron los datos de la siguiente manera:
NIBBLE DB1001B
M DW0F000H
NUMBER DW0E539H
A continuación hay un segmento de programa en Assembler.
MOV CX , 4
XOR DX , DX
MOV DH , NIBBLE
SHL DH , CL
MOV CX , 13
MOV AX , NUMBER
AGAIN: MOV BX , M
AND BX , AX
XOR BX , DX
JZ
OK
SHL AX , 1
LOOP AGAIN
JMP SOF
OK:
MOV CH , 1
SOF:NOP
‫א‬. ‫ב‬.
Realiza un seguimiento de la ejecución de este segmento de programa con la ayuda de una tabla de seguimiento.
En la tabla de seguimiento detalla en cada paso el contenido de: AX, BX, CX, DX.
¿Qué es lo que ejecuta el segmento de programa?
/ continúa en la página 14 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 14 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
6. Esta pregunta consta de dos apartados ‫א‬-‫ב‬, los cuales no tienen relación
entre sí. Responde a ambos.
‫א‬. En el segmento de datos se define la variable K de la siguiente
manera:
K
DB5EH
A continuación un segmento de programa en Assembler.
MOV CX , 2
MOV AH , K
NEXT:
SHL AX , CL
DEC CL
SHR AH , CL
ADD AH , AL
SUB AH , CL
LOOP NEXT
Realiza un seguimiento de la ejecución de este segmento de En la tabla de seguimiento detalla en cada paso el contenido de: CL, AH, MOV AL , AH
programa con la ayuda de una tabla de seguimiento.
AL.
/ continúa en la página 15 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 15 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬.
(No tiene relación con el apartado ‫א‬.)
A continuación 4 segmentos de programa en Assembler, i-iv.
Después de la ejecución de cada uno de estos segmentos, el registro acumulador [‫ ]אוגר‬AX, debe contener el mismo valor que contenía antes de la ejecución del segmento.
Para cada uno de los segmentos i-iv que están a continuación,
determina si ejecuta lo que se le pide o si no lo ejecuta. Si el segmento no ejecuta lo que se le pide, ofrece un ejemplo que muestre eso.
i
MOV CL , 4
ROL AX , CL
PUSH AX
POP BX
ROR BX , CL
MOV AX , BX
ii MOV CX , 4
XOR BX , BX
MOV BX , AX
SHR AX , CL
SHL BX , CL
MOV AX , BX
iii MOV CX , 4
XOR BX , BX
ADD BX , AX
SHL BX , CL
SHR BX , CL
MOV AX , BX
iv
MOV CX , 4
ROL AX , CL
PUSH AX
POP DX
ROR DX , CL
MOV AX , DX
/ continúa en la página 16 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 16 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
7. En esta pregunta hay dos apartados, ‫א‬-‫ב‬, que no tienen relación entre sí. Responde a ambos.
‫א‬. A continuación hay un segmento de programa escrito en Java y en C#.
while ((a<b) || (a > 0))
{a = a-1;}
Las variables a y b son variables de tipo entero.
Escribe en Assembler un segmento de programa que ejecute el segmento de programa que te presentamos.
Debes suponer que la variable a está almacenada en el registro acumulador AX y que la variable b está almacenada en el registro acumulador BX.
‫ב‬.
(No tiene relación con el apartado ‫)א‬
(1)Escribe una instrucción que anule los dos primeros bits y los
últimos dos bits del registro acumulador AL sin alterar los valores de los otros bits del registro acumulador.
primeros bits y los últimos dos bits del registro acumulador AL (2)Escribe una instrucción que encienda (convierta en 1) los dos sin alterar los valores de los otros bits del registro acumulador.
(3)Escribe una instrucción que haga que los cuatro bits inferiores del
registro acumulador AL sean 1, sin alterar los valores de los cuatro
bits superiores del registro acumulador AL.
(4) En el segmento de datos se definió el vector [‫ ]מערך‬A del siguiente modo:
A DW 20 DUP (?)
—Escribe una instrucción que introduzca en el registro acumulador AX el contenido del quinto término del vector A.
—Escribe una instrucción que introduzca en el registro acumulador AX la dirección del quinto término del vector A.
/ continúa en la página 17 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 17 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
8. En un segmento de datos se han definido los siguientes datos:
ARR
DW
100
MIN
DW
?
DUP (?)
NUM DW0
Escribe en Assembler un segmento de programa que fije en la variable MIN el menor valor almacenado en el vector ARR. El segmento de programa
fijará en la variable NUM el número de veces que el valor que está en la
variable MIN apareció en el vector.
El segmento de programa deberá pasar una sola vez por todos los miembros
del vector ARR.
Debes considerar a todos los números como números no señalados
[‫]מספרים לא מסומנים‬.
/ continúa en la página 18 /
- 18 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Introducción a la Investigación operativa ]‫[חקר ביצועים‬
Si estudiaste en esta orientación, responde a dos de las preguntas 9-12
(cada pregunta – 25 puntos).
9. Se da el siguiente problema de programación lineal:
max {z = kx1 + 6x2}
sujeto a las restricciones siguientes:
2x1 + 3x2 # 6
5x1 + 2x2 #10
x1 $ 0
x2 no está limitado por un signo.
A continuación un gráfico del lado [‫ ]תחום‬de soluciones posibles para el
k es un parámetro.
problema dado.
x2
6
C
4
2
-4
-2
A
0 G
0
18
10
E (11 , 11 )
D B
2
4
6
x1
-2
F
H
/ continúa en la página 19 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 19 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫א‬. A continuación cinco subapartados (1)-(5) que no dependen uno de otro. En algunos de ellos se da un valor determinado para el parámetro k.
Para cada uno de los subapartados (1)-(5):
•
•
Si la solución óptima es única, halla la solución óptima única, y el valor de la función objetivo para esa solución.
Si la solución óptima no está acotada [‫]לא חסום‬, justifica tu determinación.
• Si no existe solución posible, justifica tu determinación.
(1) k = 0.
(2) k = 6.
(3) Se cambia solamente la función objetivo del problema dado al inicio de la pregunta por: min {z = 6x2} .
inicio de la pregunta por: min {z = 6x1 + 6x2}.
inicio de la pregunta por: min {z = 6x1 + 6x2} , y se agrega la (4) Se cambia solamente la función objetivo del problema dado al (5) Se cambia solamente la función objetivo del problema dado al restricción x2 $ 0 .
‫ב‬.
¿Para qué valores de k el problema de programación lineal dado al inicio de la pregunta tendrá infinitas soluciones óptimas?
Determina el valor de la función objetivo para cada uno de dichos valores de k. Justifica tu determinación.
/ continúa en la página 20 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 20 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
10. Esta pregunta consta de dos apartados ‫א‬-‫ב‬, los cuales no tienen relación
entre sí. Responde a ambos.
‫א‬.Sea G = (V , E) un grafo no orientado representado por la siguiente matriz de adyacencias:
a
b
c
d
e
R
S
S
S
S
S
S
S
T
a
0
1
1
0
0
b
1
0
1
0
0
c
1
1
0
1
0
d
0
0
1
0
1
e
0
0
0
1
0
V
W
W
W
W
W
W
W
X
(1) Dibuja el grafo G representado por la matriz.
(2) ¿Cuántos componentes de conexidad, (Connected Components) hay en el grafo dado y cuáles son?
(3) Retira un arco del grafo G que dibujaste, de modo que el número de componentes de conexidad no varíe.
(4) Un arco de un grafo se llamará "arco separador", si su retiro del
grafo aumenta el número de componentes de conexidad en 1.
Señala un "arco separador" en el grafo G. Dibuja el grafo que se obtiene después de quitar el arco que indicaste.
‫ב‬. (Sin relación con el apartado ‫א‬.)
Sea G = (V , E) un grafo no orientado representado por la siguiente lista de adyacencias:
a " b" c " g " e "<
b " a" e " c "<
c " a" b " f "<
d " e "<
e " a" b " d "<
f " c" g "<
g " a" f "<
(1)
(2)
Crea un algoritmo de búsqueda de profundidad (DFS) sobre el
grafo dado, comenzando en el vértice a. Dibuja en tu cuadernillo
solamente el árbol desplegado (DFS)/ bosque desplegado (DFS) que se obtiene. Básate en la representación dada por la lista de adyacencias.
Crea un algoritmo de búsqueda de anchura (BFS) sobre el grafo dado, comenzando desde el vértice a. Dibuja en tu cuadernillo
solamente el árbol desplegado (BFS)/ bosque desplegado (BFS)
que obtuviste. Básate en la representación dada por la lista de / continúa en la página 21 /
adyacencias.
- 21 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
11. En esta pregunta hay dos apartados ‫א‬-‫ ב‬independientes uno del otro.
Responde a ambos.
‫א‬. A continuación una red:
20
B
2
6
6
A
E
4
8
C
10
F
2
8
5
4
16
D
H
7
G
Halla los recorridos más cortos en la red dada según el algoritmo de Dijkstra, del nodo A a todo otro nodo en la red, y dibuja la descripción esquemática del árbol de recorridos más cortos.
Para cada nodo de la red, escribe la longitud del recorrido más corto desde el nodo A hasta dicho nodo.
‫ב‬.
(Sin relación con el apartado ‫א‬.)
A continuación una red:
A
5
B
8
10
C
1
D
(1)
Halla los recorridos más cortos en la red dada según el algoritmo de Dijkstra, del nodo A a todo otro nodo en la red, y dibuja la descripción esquemática del árbol de recorridos más cortos.
Para cada nodo de la red, escribe la longitud del recorrido más corto desde el nodo A hasta dicho nodo.
(2) Se agrega un arco no orientado (A, D) a la red dada.
¿Cuál debe ser el peso del arco, para que los recorridos más cortos
desde el nodo A a cada uno de los otros nodos no varíen?
/ continúa en la página 22 /
- 22 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
12. En esta pregunta hay cinco apartados ‫א‬-‫ ה‬que no dependen el uno del otro.
Responde a todos los apartados.
‫א‬. En la siguiente tabla se da una parte de una solución básica posible a un problema de transporte: x11 = 5 .
Orígenes
1
2
3
10
1
2
10
Destinos
20
3
11
Oferta
4
15
5
12
7
19
20
0
14
16
18
25
5
5
Demanda
15
15
10
i
Copia la tabla en tu cuadernillo, y completa la solución básica posible de acuerdo al método de la esquina noroeste.
ii Se altera el precio de la celda (3,1) de 0 a 15. ¿Cambiará eso la
solución básica posible que hallaste en el subapartado i? Justifica tu respuesta.
‫ב‬. En la siguiente tabla se da una solución básica posible a un problema de transporte, y se da el valor de u1.
Orígenes
1
2
3
Demanda
10
1
10
5
12
2
Destinos
24
11
5
7
19
24
4
Oferta
ui
15
0
5
10
0
3
20
25
15
26
18
5
5
5
15
15
10
vj
i Copia la tabla en tu cuadernillo, y completa en ella los valores de u2 , u3 , v1 , v2 , v3 , v 4 . ii Explica por qué la solución dada no es la óptima.
/ continúa en la página 23 /
- 23 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ג‬.
En la siguiente tabla se da una solución parcial posible al problema de
transporte y se dan los valores de u1 , u2 , u3 , v1 , v2 , v3 , v 4 correspondientes a esta solución.
Orígenes
1
2
3
10
1
10
Destinos
2
20
3
11
10
5
12
7
19
10
0
14
4
20
15
16
18
5
Demanda
vj
5
15
15
10
0
17
29
18
Oferta
ui
15
-7
25
- 10
5
0
Copia la tabla en tu cuadernillo y completa la solución teniendo en cuenta los valores de u1 , u2 , u3 , v1 , v2 , v3 , v 4 de modo que se obtenga una solución básica posible.
‫ד‬. Se da una tabla que presenta un problema de transporte determinado.
Destinos
Orígenes
1
2
3
Demanda
10
A
10
B
20
C
11
12
7
19
20
0
14
16
18
5
15
15
D
Oferta
15
25
5
10
Se cambia la demanda del destino C de 15 a 20, sin cambiar el resto de las demandas y de las ofertas de la tabla. Dibuja en tu cuadernillo la nueva tabla que incluirá todos los datos de la tabla dada, y permitirá encontrar una solución básica posible de acuerdo al método de la esquina noroeste. En la tabla hay que incluir los precios de cada origen a cada destino.
(Presta atención: el apartado ‫ ה‬está en la página siguiente)
/ continúa en la página 24 /
- 24 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ה‬. En la siguiente tabla se da una solución no óptima que se obtuvo después de k iteraciones para un problema de transporte determinado, y se dan los valores de u1 , u2 , u3 , v1 , v2 , v3 , v 4 .
Destinos
Orígenes
1
10
1
2
10
6
12
2
3
20
31
19
20
9
7
15
5
0
3
4
14
20
3
18
7
Demanda
6
14
15
10
vj
10
10
22
23
Oferta
ui
15
0
23
-3
7
-5
i
ii
¿Cuál es la variable que sale de la base?
Dibuja en tu cuadernillo una tabla nueva que contenga la solución que se obtendrá después de una iteración adicional, es decir después de la iteración k+1.
/ continúa en la página 25 /
- 25 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Modelos computacionales
Si estudiaste en esta orientación, responde a dos de las preguntas 13-16
(cada pregunta – 25 puntos).
13. En esta pregunta hay dos apartados ‫ א‬y ‫ב‬, independientes uno del otro.
Responde a ambos.
‫א‬. A continuación se halla el lenguaje L sobre el alfabeto {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} :
Una palabra pertenece al lenguaje L si el producto de todas las cifras que componen la palabra es divisible por 10 sin resto. Ejemplos de palabras de L:
325 , pues 3*2*5 = 30, y 30 es divisible por 10 sin resto.
30675 , pues 3*0*6*7*5 = 0, y 0 es divisible por 10 sin resto.
543 , pues 5*4*3 = 60, y 60 es divisible por 10 sin resto.
Ejemplos de palabras que no están en L:
123 , pues 1*2*3 = 6, y 6 no es divisible por 10 sin resto.
51 , pues 5*1 = 5, y 5 no es divisible por 10 sin resto.
Indicaremos: Z = {2 , 4 , 6 , 8} D = {1 , 3 , 7 , 9} .
A continuación está el dibujo parcial de un autómata finito determinístico que admite el lenguaje L.
En el dibujo faltan transiciones [‫ ]מעברים‬y signos de entrada.
D
q0
5
Z
q3
q1
0
0
q2
5,D
El dibujo contiene todos los estados del autómata, y todos los estados de admisión ]‫[המצבים המקבלים‬.
Copia en tu cuadernillo el dibujo y complétalo de modo que el autómata admita el lenguaje L.
Debes completar las transiciones faltantes y los signos de entrada faltantes.
Presta atención: No hay que agregar ni quitar estados al autómata.
(Presta atención: el apartado ‫ ב‬está en la página siguiente.)
/ continúa en la página 26 /
- 26 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
A continuación te presentamos un autómata finito no determinístico que admite el lenguaje L sobre el alfabeto {0 , 1}.
q2
1
q3
q1
0
q4
0, 1
0
q0
0, 1
1
q5
0, 1
(1)
Copia en tu cuadernillo cada una de las cinco palabras i-v que están a continuación.
Para cada una de las palabras determina si es admitida o no por el autómata.
Si la palabra es admitida por el autómata, escribe en tu cuadernillo el recorrido que se obtiene para dicha palabra.
i
000
ii
01000
iii
1100
iv
00101
v
1011
(2) ¿Cuál es el lenguaje L definido por el autómata dado?
/ continúa en la página 27 /
- 27 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
14.
En esta pregunta hay dos apartados ‫ א‬y ‫ ב‬independientes uno del otro.
Responde a los dos apartados.
‫א‬. A continuación se halla el lenguaje L sobre el alfabeto {0 , 1}:
L = {0 n 1 k ; n 2 0 , k $ 0 , n + k par}
A continuación está el dibujo parcial de un autómata finito determinístico que admite el lenguaje L.
En el dibujo faltan transiciones [‫ ]מעברים‬y signos de entrada.
q0
0
q1
0
q2
1
q5
0
q4
1
q3
0,1
El dibujo contiene todos los estados del autómata, y todos los estados de admisión ]‫[המצבים המקבלים‬.
Copia en tu cuadernillo el dibujo y complétalo de modo que el autómata admita el lenguaje L.
Debes completar las transiciones faltantes y los signos de entrada
faltantes.
Presta atención: No hay que agregar ni quitar estados al autómata.
(Presta atención: el apartado ‫ ב‬está en la página siguiente.)
/ continúa en la página 28 /
- 28 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
A continuación te presentamos un autómata finito determinístico que admite el lenguaje L sobre el alfabeto {a , b}.
b
q0
a
a
q1
b
b
q2
a
a
b
q3
Para cada una de las proposiciones i-iii determina si es verdadera o falsa.
Si la proposición no es verdadera escribe una palabra que la refute.
i.
L es la colección de todas las palabras sobre el alfabeto {a , b} que contienen la sub-palabra ab y no terminan en b.
ii.
L es la colección de todas las palabras sobre el alfabeto {a , b} que
terminan en b y no contienen la sub-palabra ab.
iii.
L es la colección de todas las palabras sobre el alfabeto {a , b} que
terminan en b o no contienen la sub-palabra ab.
15. L es un lenguaje sobre el alfabeto {a , b , c}.
L = {a n b n c k ; n $1 k es el resto que se obtiene al dividir n por 3}
Construye un autómata-pila [‫ ]אוטומט מחסנית‬para el lenguaje L.
/ continúa en la página 29 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 29 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
16. Esta pregunta consta de tres apartados ‫ א‬, ‫ ב‬, ‫ג‬, independientes uno del otro.
Responde a los tres.
‫א‬. A continuación están los lenguajes L1 , L2 sobre el alfabeto {a , b} L1 = {v : v R ; v ! {a , b}*} L2 = {a m b ; m $ 1}
{a , b}* es la colección de todas las palabras sobre el alfabeto {a , b} (incluyendo la palabra vacía), y v R es la inversa de la palabra v.
Se dan dos palabras en L2 : w1 = a i b y w2 = a j b tales que: j ! i .
Halla la palabra w de modo que se cumpla:
w1 : w ! L1
w2 : w g L1
‫ב‬. A continuación se halla el lenguaje L1 sobre el alfabeto {a , b , c} , y el lenguaje L2 sobre el alfabeto {a}:
L1 = {a n b k c m ; k = max (n , m) , n $1 , m $1}
L2 = {as ; s $ 1}
Se dan dos palabras en L2 : w1 = a i , w2 = a j , tales que: j 2 i .
Halla la palabra w tal que cumpla:
w1 : w ! L1
w2 : w g L1
‫ג‬. A continuación está el lenguaje L1sobre el alfabeto {a, b} , y el lenguaje L2 sobre el alfabeto {a , b , c} :
L1 = {a n b k ; n $ 0 , k $ 0}
L2 = {a m cb r ; el resto de dividir m + r por 2 es 1 } , {a n b n ; n $ 0}
(1) Construye un autómata finito determinístico que admita el lenguaje L1.
(2) ¿Cuál es el lenguaje L1+ L2 ? ¿Es un lenguaje regular? Justifica tu respuesta.
(3) Valiéndote del resultado que obtuviste en el subapartado (2), explica por qué el lenguaje L2 no es regular.
/ continúa en la página 30 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 30 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Programación orientada a objetos
Si estudiaste en esta orientación y escribes en Java, responde a dos de las
preguntas 17-20. (Cada pregunta – 25 puntos)
17. ‫א‬. A continuación una interface parcial de la clase Node, y en ella hay cuatro métodos.
Node(T x)
Node(T x , Node<T> next)
Node<T> getNext()
String toString()
El método construye un eslabón.
El valor del eslabón es x, y no tiene
eslabón sucesor.
El método construye un eslabón. El
valor del eslabón es x, y el eslabón
sucesor es next.
El valor de next puede ser null.
El método devuelve el eslabón
sucesor.
Si no hay eslabón sucesor, el método
devuelve null.
El método devuelve una cadena que
describe el eslabón.
(1) ¿Cuál es el mecanismo que posibilita dos métodos de nombre
idéntico en la misma clase?
(2) ¿Es posible agregar a la interface de la clase Node un tercer
método constructor?
En caso afirmativo escribe una declaración adecuada para el
método. En caso contrario, explica por qué.
/ continúa en la página 31 /
- 31 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. Se dan las clases Node1<T>, Node2<T> herederas de la clase Node<T>.
public class Node1<T> extends Node<T>
{
public Node1(T x)
{ super(x); }
public Node1(T x, Node<T> n) { super(x, n); }
public String toString()
{ return "$" + super.toString() + "$";}
}
public class Node2<T> extends Node<T>
{
public Node2(T x)
{ super(x); }
public Node2(T x, Node<T> n) { super(x, n); }
public String toString()
{ return "#" + super.toString() + "#";}
}
Se da el método main en la clase Test.
En el método main faltan partes de instrucciones en las líneas indicadas (i)-(v).
Copia esas líneas en tu cuadernillo y complétalas, de modo que la
salida del método main sea (de izquierda a derecha) 1$2$#3#$4$5
public class Test
{
public static void main(String[] args)
{
Node<Integer>
nd =
nd =
(ii)
nd =
(iv)
nd =
nd =
(iii)
(v)
while(nd !=null)
{
System.out.print(nd);
nd = nd.getNext();
}
}
}
(i)
;
;
;
;
;
/ continúa en la página 32 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 32 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
18. Esta pregunta consta de dos apartados ‫ א‬,‫ ב‬, independientes uno del otro.
Responde a ambos.
‫א‬. He aquí algunas definiciones:
interface IOne {...}
interface ITwo {...}
interface IThree extends IOne {...}
class C1 implements IOne {...}
class C2 implements ITwo {...}
class C3 implements IThree {...}
class C4 extends C3 implements ITwo {...}
A continuación te presentamos ocho segmentos de programa, i-viii.
En caso de no ser correcto, justifica tu determinación, y determina si hay
Para cada uno de ellos determina si es correcto o incorrecto.
errores de compilación [‫ ]הידור‬o errores de ejecución.
i
ITwo a = new ITwo();
iii
C3 c = new C4();
ii
iv
v
vi
ITwo b = new C2();
C2 d = new C4();
C4 e = new C3();
C4 f = (C4)(new C3());
vii IOne g1 = new C1();
C4 g2 = new C4();
g1 = g2;
viii IOne h1 = new C4();
ITwo h2 = new C2();
h2 = h1;
/ continúa en la página 33 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 33 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
Se dan las clases A y B, y se da el método main en la clase Test.
public class A
{
public A(int k) { System.out.print(k + " "); }
}
public class B extends A
{
public B(int k)
{
A a = new A(10);
System.out.print(k + " ");
}
}
public class Test
{
public static void main(String[] args) { A a = new B(6);
}
}
La clase B no fue compilada.
ii
Corrige el error que explicaste en el subapartado i de modo que la instrucciones de impresión ni cambiar instrucciones de impresión i
Explica cuál es el error.
salida del método main sea (de izquierda a derecha) 10 6, sin agregar existentes, y sin cambiar la clase Test.
Copia en tu cuadernillo la clase / clases que has corregido.
iii Corrige el error que explicaste en el subapartado i de modo que la salida del método main sea 6 10 6, sin agregar instrucciones de impresión ni Test. Copia en tu cuadernillo la clase / clases que has corregido.
cambiar instrucciones de impresión existentes, y sin modificar la clase / continúa en la página 34 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 34 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
19. Esta pregunta consta de dos apartados ‫ א‬, ‫ ב‬, independientes uno del otro.
Responde a ambos.
‫א‬. He aquí un proyecto y en él las clases AAA, BBB y Run.
public class AAA
{
protected int x;
public AAA(int k)
{ x = k;
}
public String toString() {return "H"; }
}
public class BBB extends AAA
{
public BBB(int k)
{ super(k);
}
public String toString()
{return "T";
}
public AAA convertToAAA()
{return new AAA(x);}
}
public class Run
{
public static void main (String[] args)
{
AAA s1 = new AAA(10);
AAA s2 = new BBB(20);
BBB s3 = new BBB(30);
System.out.print(s1 + " ");
System.out.print(s2 + " ");
System.out.print(s3 + " ");
System.out.print((AAA)s3 + " ");
System.out.print(s3.convertToAAA());
}
}
Escribe un seguimiento para el método main en la clase Run, y escribe la
salida.
En el seguimiento hay que escribir los valores de las variables, y los valores
de los atributos de cada objeto.
/ continúa en la página 35 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 35 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
Se da un proyecto y en él las clases A y B, y Test.
public class A
{
public int x;
public A()
{ this(1);
}
public A(int k)
{ this.x = k*10;}
public int m()
{ return x;
}
}
public class B extends A
{
public int x;
public B()
{ this(2);
}
public B(int k)
{
super(k + 1);
this.x = super.x + 1;
}
public int m()
{ return x;
}
}
public class Test
{
public static void main(String[] args)
{
A a = new A();
System.out.println(a.x);
System.out.println(a.m());
B b = new B();
System.out.println(b.x);
System.out.println(b.m());
a = new B();
System.out.println(a.x);
System.out.println(a.m());
b = (B)a;
System.out.println(b.x);
System.out.println(b.m());
}
}
Escribe un seguimiento para el método main en la clase Test, y escribe la
salida.
En el seguimiento hay que escribir los valores de las variables, y los valores
de los atributos de cada objeto.
/ continúa en la página 36 /
- 36 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
20. A continuación se presenta un diagrama de la jerarquía de las clases Sport,
deporte, Ball — juegos de pelota, Judo — Yudo, RelayRace — Carreras
de relevos, Basketball — Baloncesto, TableTennis — Ping Pong, y las
interfaces IHall — Deportes de salón y IGroup — Deporte grupal.
Sport
Referencias:
Herencia
Implementación
de interface
Deporte
Ball
Juegos de pelota
TableTennis
Ping pong
Judo
Yudo
Basketball
Baloncesto
RelayRace
Carreras de relevos
IHall
Deportes
de salón
IGroup
Deporte grupal
‫א‬. (1) A continuación hay cuatro definiciones, i- iv. Determina si cada una de ellas es verdadera o falsa.
Si fuera falsa justifica tu determinación.
i
Sport s1 = new Ball();
ii
Sport s2 = new Basketball();
iii
Judo b2 = new Sport();
iv
Basketball b3 = new Sport();
(2) A continuación hay dos proposiciones, i-ii. Determina si cada una de ellas es verdadera o falsa. Justifica tu determinación.
i Se puede definir en la clase Ball variables del tipo private que no están definidas en la clase Sport o en la clase Judo.
ii Si en la clase Sport hay una definición de una variable de nombre title, necesariamente las clases Ball y Judo la heredan, pero no pueden acceder a ella directamente.
‫ב‬. Escribe en Java una declaración para cada clase y para cada interface del diagrama.
‫ג‬.
Escribe en Java un método de signatura - public static int count(Sport[] sp), que devuelva el número de objetos en el vector sp que realizan / continúa en la página 37 /
las dos interfaces.
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 37 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
Programación orientada a objetos:
Si estudiaste en esta orientación y escribes en C#, responde a dos de las preguntas
21-24. (Cada pregunta – 25 puntos)
21. ‫א‬. A continuación una interface parcial de la clase Node, y en ella hay cuatro métodos.
Node(T x)
Node(T x , Node<T> next)
Node<T> GetNext()
string ToString()
El método construye un eslabón.
El valor del eslabón es x, y no tiene
eslabón sucesor.
El método construye un eslabón. El
valor del eslabón es x, y el eslabón
sucesor es next.
El valor de next puede ser null.
El método devuelve el eslabón
sucesor.
Si no hay eslabón sucesor, el método
devuelve null.
El método devuelve una cadena que
describe el eslabón.
(1) ¿Cuál es el mecanismo que posibilita dos métodos de nombre idéntico en la misma clase?
(2) ¿Es posible agregar a la interface de la clase Node un tercer método constructor?
En caso afirmativo escribe una declaración adecuada para el
método. En caso contrario, explica por qué.
(Presta atención: el apartado ‫ ב‬está en la página siguiente.)
/ continúa en la página 38 /
- 38 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. Se dan las clases Node1<T>, Node2<T> herederas de la clase Node<T>.
public class Node1<T> : Node<T>
{
public Node1(T x) : base(x)
{ }
}
public override string ToString()
{ return "$" + base.ToString() + "$"; }
public Node1(T x, Node<T> n):base(x,n) { }
public class Node2<T> : Node<T>
{
public Node2(T x) : base(x)
{ }
}
public override string ToString()
{ return "#" + base.ToString() + "#"; }
public Node2(T x, Node<T> n):base(x,n) { }
Se da el método Main en la clase Test.
En el método Main faltan partes de instrucciones en las líneas
indicadas (i)-(v).
Copia esas líneas en tu cuadernillo y complétalas, de modo que la
salida del método Main sea (de izquierda a derecha) 1$2$#3#$4$5
public class Test
{
public static void Main ()
{
Node<int> nd =
nd =
(ii)
nd =
(iii)
nd =
(iv)
nd =
(v)
while(nd != null)
{
Console.Write(nd);
}
}
}
(i)
;
;
;
;
;
nd = nd.GetNext();
/ continúa en la página 39 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 39 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
22. Esta pregunta consta de dos apartados ‫ א‬,‫ ב‬, independientes uno del otro.
Responde a ambos.
‫א‬. He aquí algunas definiciones:
interface IOne {...}
interface ITwo {...}
interface IThree : IOne {...}
class C1 : IOne {...}
class C2 : ITwo {...}
class C3 : IThree {...}
class C4 : C3 , ITwo {...}
A continuación te presentamos ocho segmentos de programa, i- viii. Determina si cada uno de ellos es correcto o incorrecto.
En caso de no ser correcto, justifica tu determinación, y determina si hay
errores de compilación [‫ ]הידור‬o errores de ejecución.
i
ITwo a = new ITwo();
ii
ITwo b = new C2();
iii
C3 c = new C4();
iv
C2 d = new C4();
v
C4 e = new C3();
vi
C4 f = (C4)(new C3());
vii
IOne g1 = new C1();
C4 g2 = new C4();
g1 = g2;
viii IOne h1 = new C4();
ITwo h2 = new C2();
h2 = h1;
(Presta atención: el apartado ‫ ב‬está en la página siguiente)
/ continúa en la página 40 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 40 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
Se dan las clases A y B, y se da el método Main en la clase Test.
public class A
{
}
public A(int k) { Console.Write(k + " "); }
public class B : A
{
public B(int k)
{ }
}
A a = new A(10);
Console.Write(k + " ");
public class Test
{
}
public static void Main() {
A a = new B(6);
}
La clase B no fue compilada.
i
ii
Explica el error.
Corrige el error que explicaste en el subapartado i de modo que
la salida del método Main sea (de izquierda a derecha) 10 6, sin
agregar instrucciones de impresión ni cambiar instrucciones de
impresión anteriores, y sin modificar la clase Test.
Copia en tu cuadernillo la clase / clases que has corregido.
iii Corrige el error que explicaste en el subapartado i de modo que la
salida del método Main sea 6 10 6, sin agregar instrucciones de
impresión ni cambiar instrucciones de impresión anteriores, y sin
modificar la clase Test.
Copia en tu cuadernillo la clase / clases que has corregido.
/ continúa en la página 41 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 41 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
23. Esta pregunta consta de dos apartados ‫ א‬,‫ ב‬, independientes uno del otro.
Responde a ambos.
‫א‬. He aquí un proyecto y en él las clases AAA, BBB y Run.
public class AAA
{
protected int x;
public AAA(int k) { x = k;
}
public override string ToString() { return "H"; }
}
public class BBB: AAA
{
public BBB(int k): base(k)
{
}
public override string ToString() {return "T";
}
public AAA ConvertToAAA() {return new AAA(x);}
}
public class Run
{
public static void Main()
{
AAA s1 = new AAA(10);
AAA s2 = new BBB(20);
BBB s3 = new BBB(30);
Console.Write(s1 + " ");
Console.Write(s2 + " ");
Console.Write(s3 + " ");
Console.Write((AAA)s3 + " ");
Console.Write(s3.ConvertToAAA());
}
}
Escribe un seguimiento para el método Main en la clase Run, y escribe la
salida.
En el seguimiento hay que escribir los valores de las variables, y los valores
de los atributos de cada objeto.
(Presta atención: el apartado ‫ ב‬está en la página siguiente)
/ continúa en la página 42 /
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
- 42 -
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
‫ב‬. (No vinculado al apartado ‫א‬.)
Se da un proyecto y en él las clases A y B, y Test.
public class A
{
public int x;
public A() : this(1)
{
}
public A(int k)
{ this.x = k*10; }
public virtual int M()
{ return x;
}
}
public class B : A
{
public int x;
public B() : this(2)
{
}
public B(int k) : base(k + 1) { this.x = base.x + 1; }
public override int M() { return x; }
}
public class Test
{
public static void Main()
{
A a = new A();
Console.WriteLine(a.x);
Console.WriteLine(a.M());
B b = new B();
Console.WriteLine(b.x);
Console.WriteLine(b.M());
a = new B();
Console.WriteLine(a.x);
Console.WriteLine(a.M());
b = (B) a;
Console.WriteLine(b.x);
Console.WriteLine(b.M());
}
}
Escribe un seguimiento para el método Main en la clase Test, y escribe la
salida.
En el seguimiento hay que escribir los valores de las variables, y los valores
de los atributos de cada objeto.
/ continúa en la página 43 /
- 43 -
‫ ספרדית‬,603 ,899205 '‫ מס‬,‫ קיץ תשע"ג‬,'‫מדעי המחשב ב‬
Ciencias de la computación '‫ב‬, verano 2013. No. 899205, 603
24. A continuación se presenta un diagrama de la jerarquía de las clases Sport,
deporte, Ball — juegos de pelota, Judo — Yudo, RelayRace — Carreras
de relevos, Basketball — Baloncesto, TableTennis — Ping Pong, y las
interfaces IHall — Deportes de salón y IGroup — Deporte grupal.
Sport
Referencias:
Herencia
Implementación
de interface
Deporte
Ball
Juegos de pelota
TableTennis
Ping pong
Judo
Yudo
Basketball
Baloncesto
RelayRace
Carreras de relevos
IHall
Deportes
de salón
IGroup
Deporte grupal
‫א‬. (1) A continuación te presentamos cuatro definiciones, i- iv. Determina
si cada una de ellas es verdadera o falsa.
Si fuera falsa justifica tu determinación.
i
Sport s1 = new Ball();
ii
Sport s2 = new Basketball();
iii
Judo b2 = new Sport();
iv
Basketball b3 = new Sport();
(2) A continuación te presentamos dos proposiciones, i-ii. Determina si
cada una de ellas es verdadera o falsa. Justifica tu determinación.
i Se puede definir en la clase Ball variables del tipo private que no están definidas en la clase Sport o en la clase Judo.
ii Si en la clase Sport hay una definición de una variable de
nombre title, entonces necesariamente las clases Ball y
Judo
la heredan, pero no pueden acceder a ella directamente.
‫ב‬.
‫ג‬.
Escribe en C# una declaración para cada clase y para cada interface del diagrama.
Escribe en C# un método de signatura - public static int Count(Sport[] sp), que devuelva el número de objetos en el vector sp que realizan las dos interfaces.
¡Buena Suerte!
Los derechos de autor están reservados al Estado de Israel.
Está prohibida su copia o difusión a menos que esté autorizada de
manera expresa por el Ministerio de Educación.
!‫בהצלחה‬
.‫זכות היוצרים שמורה למדינת ישראל‬
.‫אין להעתיק או לפרסם אלא ברשות משרדהחינוך‬
Descargar