Está en la página 1de 22

CONCURSO-OPOSICIÓN 2016 XUNTA DE GALICIA

CUERPO PROFESORES DE ENSINO SECUNDARIO


ESPECIALIDAD DE INFORMÁTICA
PRIMERA PRUEBA PARTE A

INSTRUCCIONES

• La duración total de esta parte es de 3 horas.

• Se entregará un cuaderno de ejercicios con cinco ejercicios de cuatro apartados


cada uno y un cuaderno de respuestas con espacio para cada uno de los cinco
ejercicios.

• El opositor escogerá y realizará dos ejercicios de entre los cinco propuestos,


que debe indicar en los recuadros correspondientes que hay en el cuaderno
de respuestas.

• El opositor hará constar su número de DNI en el recuadro correspondiente


del cuaderno de respuestas

• Únicamente se evaluará las respuestas escritas en el cuaderno de respuestas


correspondientes los ejercicios escogidos por el opositor

• Las hojas grapadas de los cuadernos no se pueden separar.

• Las hojas que se entregan sueltas son para el uso que considere oportuno cada
opositor aunque también se entregarán todas con el ejercicio.

• Las respuestas deben realizarse a bolígrafo negro o azul

• No se admiten preguntas. Cualquier aclaración o interpretación del enunciado que


el aspirante considere oportuno para su valoración, deberá indicarlo en el cuaderno
de respuestas

• No se puede utilizar ningún material auxiliar, quedan terminantemente prohibidos


los móviles, relojes inteligentes, manos libres el cualquier otro dispositivo
electrónico

• Para la resolución de las cuestiones referentes a redes IP, se considerarán las


especificaciones recogidas en la RFC 1878 que autoriza idenficadores de subredes
con todos sus bits a 0 o a 1; es decir, están permitidas las subredes con el
identificador de subred todo a 0 o todo a 1.
Cuando se indican capas o niveles, se estará haciendo referencia a capas o
niveles del Modelo de TCP/IP.

Página 1 de 22
Ejercicio1
Apartado 1.1.
Implementa las siguientes clases Java sin hacer uso de casting y dentro de un paquete llamado
opos2016:

• clase Coordenadas: con dos atributos de tipo entero accesibles únicamente desde dentro
de la propia clase.

• clase Flexible: con dos atributos (llamados primero y segundo) que puedan ser de
cualquier tipo, y accesibles desde dentro de la propia clase o de una clase derivada.

Fuera del paquete opos2016, crea la clase Gestion que albergará el método main. Este método
debe crear dos objetos de la clase Flexible:

◦ El primero, asignándole en el momento de crearlo sus atributos, siendo el


correspondiente a primero un entero y el correspondiente a segundo un objeto de la
clase Coordenadas.
◦ El segundo, asignándole en el momento de crearlo dos atributos de la clase String.

• Indica los nombres de los ficheros creados al compilar este programa y en que directorios
se deben encontrar.

Página 2 de 22
Apartado 1.2.
Dado el siguiente código PHP, sin errores sintácticos, identifica y corrige los posibles
problemas que puedan presentarse al utilizarlo.

<?php
$html=””;
if (isset($_GET[‘Submit’])) {
// Retrieve data
$id = $_GET[‘id’];
$getid = “SELECT first_name,last_name FROM users WHERE user_id =
‘$id’”;
$result = mysql_query($getid) or die(‘<pre>’ .
mysql_error().’</pre>’);
$num = mysql_numrows($result);

$i=0;
while ($i < $num) {
$first = mysql_result($result,$i,”first_name”);
$last = mysql_result($result,$i,”last_name”);
$html .= ‘<pre>’;
$html.=’ID: ‘.$id.’<br>First Name: ‘.$first.’<br>Surname: ‘.
$last;
$html.=’</pre>’;
$i++;
}
}
?>

Página 3 de 22
Apartado 1.3.
Dada la siguiente tabla de empleados:

TEMPLE (ID, NOMEN, NUMDE, SALAR, COMIS, NUMHI)

• ID: IDENTIFICADOR, CLAVE


• NOMEN: NOMBRE EMPLEADO
• NUMDE: Nº DE DEPARTAMENTO
• SALAR: SALARIO
• COMIS: COMISIÓN
• NUMHI: Nº DE HIJOS

Nota: uso de null para indicar que no existe valor.

Escribir las sentencias SQL correspondientes:

1. Obtener por orden alfabético los nombres de los empleados cuyo salario supera en tres
veces y media o más al mínimo salario de los empleados del departamento 122

2. Hallar el salario medio por departamento para aquellos departamentos cuyo salario
máximo es inferior al salario medio de todos los empleados

3. Obtener por orden alfabético los nombres de los empleados del departamento 112, así
como su sueldo total, es decir, incluyendo la comisión en aquellos que la tengan, indicando
en una columna si el salario es “Con Comisión” o “Sin Comisión"

Página 4 de 22
Apartado 1.4.
En la siguiente topología de red se definen diferentes VLAN con un router en configuración
“Router-on-a-stick”. Teniendo en cuenta la configuración aportada, indique el camino que siguen
los siguientes paquetes señalando los elementos de red y sus interfaces de entrada y salida
necesarias.

1) PC2 envía un paquete a Sv1


2) PC2 envía un paquete a PC5
3) PC3 envía un paquete a PC6

Terminal PC1: 172.17.10.21/24 Servidor Sv1: 172.17.10.49/24


Terminal PC2: 172.17.20.31/24
Terminal PC3: 172.17.30.41/24
Terminal PC4: 172.17.10.22/24
Terminal PC5: 172.17.20.32/24
Terminal PC6: 172.17.20.33/24

Switch S1: Switch S3:


Puerto E1: enlace troncal Puerto E1: vlan10
Puerto E2: enlace troncal Puerto E2: vlan20
Puerto E10: enlace troncal Puerto E3: vlan20
Puerto E10: enlace troncal
Switch S2: Router R1:
Puerto E1: vlan10 Subinterface E0.10: 172.17.10.1/24
Puerto E2: vlan20 Subinterface E0.20: 172.17.20.1/24
Puerto E3: vlan30 Subinterface E0.30: 172.17.30.1/24
Puerto E10: enlace troncal

Ejemplo
Si PC5 envía un paquete a PC6
El camino sería: PC5, S3:E2, S3:E3, PC6

Página 5 de 22
Página 6 de 22
Ejercicio2
Apartado 2.1

La clase Usuario permite guardar en un fichero los datos de un usuario y leerlos. Se pide:

• Desarrollar la clase Cuentas con los atributos email y fechaCreación, de modo que
fechaCreación no se almacene en el fichero.

• Añadir el/los métodos necesarios para que se produzca la siguiente salida:

Cuenta usuario: carlos@gmail.com

Fecha creación: no disponible

import java.io.*;
import java.util.*;

public class Usuario {

public static void main(String[] args) {


try {
ObjectOutputStream fo;
ObjectInputStream fi;

Cuentas usuario=new Cuentas("carlos@gmail.com", new Date());


try {
fo = new ObjectOutputStream(new FileOutputStream(new File ("cuentas.dat")));
fo.writeObject(usuario);
fo.close();
} catch (IOException ex) {
System.out.println("Error I/O"+ex.getMessage());
}
//lectura
fi=new ObjectInputStream(new FileInputStream(new File("cuentas.dat")));
try {
Cuentas lectura=(Cuentas)fi.readObject();
System.out.println(lectura);
} catch (ClassNotFoundException ex) {
System.out.println("Clase no existente"+ex.getMessage());
}
} catch (IOException ex) {
System.out.println("Error I/O"+ex.getMessage());
}

Página 7 de 22
Apartado 2.2.
Implementar en C o Java un algoritmo que genere números primos hasta la cantidad máxima
especificada por el usuario. Utilícese el algoritmo denominado Criba de Erastóstenes.

Descripción del algoritmo:

Dada una matriz de enteros empezando por el número 2, se tachan los múltiplos de 2. Se busca el
siguiente entero sin tachar y se tachan todos los múltiplos. Repetir hasta superar la raiz cuadrada
del valor máximo

Página 8 de 22
Apartado 2.3.
Dada una tabla con información sobre “expedientes”, se pide crear un Trigger (sintaxis MySQL o
SQLServer) que controle las modificaciones del “estado del expediente” según las siguientes
reglas:

• Debe anotar en el campo “stateChangedDate” la fecha/hora en la que se produjo el último


cambio de estado.
• A modo de histórico, debe insertar un registro en tabla “expStatusHistory” con información
sobre los cambios de estado de cada expediente.

Tabla: Expedientes
Tabla: expStatusHistory

CREATE TABLE `expedientes` (


code VARCHAR(15) NOT NULL COMMENT 'Código del expediente',
state VARCHAR(20) COMMENT 'Estado del expediente',
stateChangedDate DATETIME COMMENT 'Fecha/Hora en la que se produció el
último cambio de estado',

PRIMARY KEY `PK_Exp` (code)


);

CREATE TABLE `expStatusHistory` (


`id` INT AUTO_INCREMENT,
`code` VARCHAR(15) NOT NULL COMMENT 'Código del expediente',
`state` VARCHAR(20) NOT NULL COMMENT 'Estado del expediente',
`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Fecha/Hora en
la que el expediente pasó a ese estado',
PRIMARY KEY `PK_ExpHistory` (`id`)
);

Página 9 de 22
Apartado 2.4.
En la siguiente topología de red todos los routers utilizan OSPFv2 como protocolo de enrutamiento
dinámico. Dada la configuración de los interfaces de los routers indicada en la tabla, cuál sería el
número ID de cada uno de los routers teniendo en cuenta que no ha sido configurada
manualmente.

Router R1 Router R4
Interface Loopback0: 192.168.10.1/32 Interface E0: 10.1.10.3/24
Interface E0: 10.1.10.1/24
Interface E1: 10.1.30.1/24
Interface S0: 10.1.40.2/30
Router R2 Router R5
Interface Loopback0: 192.168.10.3/32 Interface E0: 10.1.10.4/24
Interface E0: 10.1.20.2/24 Interface S0: 209.165.201.1/27
Interface S0: 10.1.40.1/30

Router R3 Router R6
Interface Loopback0: 192.168.10.6/32 Interface S0: 209.165.201.2/27
Interface E0: 10.1.10.2/24
Interface E1: 10.1.20.1/24

Página 10 de 22
Ejercicio 3
Apartado 3.1
Implementa el método visualizar() de la clase GestionaProductos haciendo uso de la interface
Iterator, de forma que visualice matrícula, marca y modelo de todas las FichaVehículo ordenadas
por matrícula.

public class Main {


public static void main(String args[]) {
FichaVehiculo fich1 = new FichaVehiculo("Peugeot", "308");
FichaVehiculo fich2 = new FichaVehiculo("Mercedes", "Clase A Compacto");
GestionaProductos lista = new GestionaProductos();
lista.añadir("8562-GAF", fich1);
lista.añadir("7865-GBC", fich2);
lista.visualizar();
}
}

public class FichaVehiculo {


private final String marca,modelo;
public FichaVehiculo(String marca, String modelo) {
this.marca = marca;
this.modelo = modelo;
}
public String getMarca() {
return marca;
}
public String getModelo() {
return modelo;
}
}

import java.util.*;
import java.util.Map.*;
public class GestionaProductos {
TreeMap<String, FichaVehiculo> lista;

public GestionaProductos() {
lista = new TreeMap<String, FichaVehiculo>();
}

public void añadir(String matricula, FichaVehiculo p) {


lista.put(matricula, p);
}

//Completar con método visualizar


}

Página 11 de 22
Apartado 3.2.
El Patrón Singleton, es un patrón de diseño que consiste en garantizar que solo se pueda
instanciar un único elemento de la misma clase, reutilizando el mismo objeto a lo largo del
programa.

Se pide implementar este patrón añadiendo los métodos necesarios en la clase


DatabaseConnection, de modo que únicamente se pueda instanciar un único objeto y que
obligue a reutilizarlo en los distintos accesos a la base de datos. Recuerda sobreescribir clone()
para garantizar la unicidad del objeto.

public class DatabaseConnection {


private static final String SERVER="192.168.122.5";
private static final int PORT=3306;
private static final String USER="figura";
private static final String PASSWORD="abc123.";
private static final String DB="Figuras";

private static DatabaseConnection driver=null;


private Connection conn=null;

private void connect() {


try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://"+SERVER+":"+PORT+"/"+DB+"?
user="+USER+"&password="+PASSWORD;
conn = DriverManager.getConnection(connectionUrl);
} catch (SQLException e) {
System.out.println("SQL Exception: "+ e.toString());
System.exit(0);
} catch (ClassNotFoundException cE) {
System.out.println("Excepción: "+ cE.toString());
System.exit(0);
}
}

/**
* Liberamos os recursos da conexión a BBDD tendo en conta que podemos ter varios fíos
* @throws Exception
*/
public synchronized static void close() throws Exception {
if (DatabaseConnection.driver!=null) {
DatabaseConnection.driver.conn.close();
DatabaseConnection.driver=null;
}
}
}

Página 12 de 22
Apartado 3.3.
Sobre una base de datos dada se ejecutan secuencialmente las siguientes sentencias SQL:
 CREATE TABLE TablaA(
a int,
b int,
primary key(a));
 CREATE TABLE TablaB(
d int,
e int,
primary key(d),
foreign key(e) references TablaA(a)
on delete cascade on update set null);

a) insert into TablaA(a,b) values (1,10), (2,20), (3,30), (4, 40), (5,50), (6,60);
b) insert into TablaB(d,e) select b,1 from TablaA where b<40;
c) insert into TablaB(d,e) values (40,2);
d) insert into TablaB(d,e) values (50,3);
e) insert intoTablaB(d,e) values (60,4);
f) update TablaA set a=7 where a=1;
g) delete from TablaA where a=2;
h) update TablaB set e=8 where e=3;
i) delete from TablaB where e=4;
j) insert into TablaB(d,e) values (70,2);

 Si lo es alguna, indica cuáles de las sentencias anteriores no se ejecutarían por ser


erróneas.
 Dibuja una tabla que refleje el estado final de TablaB después de ejecutar todas las
sentencias válidas anteriores.

Página 13 de 22
Apartado 3.4.
Dado el siguiente diagrama de red con dos segmentos Ethernet con MTU (Maximum Transmission
Unit) modificada y con una situación inicial en la que ningún equipo se ha comunicado con otro
previamente.

La capa IP del ordenador A recibe el siguiente paquete de su capa de transporte:


[20 bytes cabecera TCP | 1980 bytes de datos TCP]
Para ser enviado al equipo C

Para cada datagrama IP que recibe C, indique en decimal los valores de la cabecera IP
siguientes:
TL (Total Length), DF (Do not fragment), MF (more fragments), FO (Fragment OFFSET) y SA
(Source IP address).

Apéndice: Datagrama IP

Página 14 de 22
Ejercicio4
Apartado 4.1.
Indicar la salida de ejecución del siguiente código:

public class ExcepcionesTest {


static void procA (){
try {
System.out.println("dentro ProcA");
throw new RuntimeException("demoA");

} finally {
System.out.println("ProcA finally");
}
}

static void procB (){


try {
System.out.println("dentro ProcB");
throw new RuntimeException("demoB");

} finally {
System.out.println("ProcB finally");
}
}

static void procC (){


try {
System.out.println("dentro ProcC");
} finally {
System.out.println("ProcC finally");
}
}

public static void main(String args[]) {


try {
try {
procA();
} catch (Exception e) {
System.out.println("Excepción capturada");
}
procB();
procC();
} catch(RuntimeException e) {
}
}
}

Página 15 de 22
Apartado 4.2.
Dadas las siguientes clases, implementar los métodos clone(), equals() y toString() de cada clase,
usando los mecanismos que nos proporciona la herencia.
Ten en cuenta que:
• Consideramos que dos objetos de estas clases son iguales si los valores de todos
sus atributos son iguales.
• Al visualizar los objetos se deben mostrar los valores de todos sus atributos

public class Fecha { public class Empleado {


private int dia; String nombre;
private int mes; double salario;
private int año; Fecha fechaAlta;
public Empleado(String nome, double salario,
public Fecha(int dia, int mes, int año) { Fecha fechaAlta) {
super(); super();
this.dia = dia; this.nombre = nome;
this.mes = mes; this.salario = salario;
this.año = año; } this.fechaAlta = fechaAlta;}
public int getDia() { public String getNombre() {
return dia; } return nombre; }
public void setDia(int dia) { public void setNombre(String nombre) {
this.dia = dia; } this.nombre = nombre; }
public int getMes() { public double getSalario() {
return mes; } return salario; }
public void setMes(int mes) { public void setSalario(double salario) {
this.mes = mes; } this.salario = salario; }
public int getAño() { public Fecha getFechaAlta() {
return año; } return fechaAlta; }
public void setAño(int año) { public void setFechaAlta(Fecha fechaAlta) {
this.año = año; } this.fechaAlta = fechaAlta; }
@Override @Override
protected Object clone() { protected Object clone() {
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
} }
@Override @Override
public String toString() { public String toString() {
} }
} }
public class Gestor extends Empleado {
private double bonus;
public Gestor(String nome, double salario, Fecha fechaAlta, double bonus) {
super(nome, salario, fechaAlta);
this.bonus = bonus; }
public double getBonus() {return bonus; }
public void setBonus(double bonus) { this.bonus = bonus; }
@Override
protected Object clone() {
}
@Override
public boolean equals(Object obj) {
}
@Override
public String toString() {
}
}

Página 16 de 22
Apartado 4.3.
Dado el siguiente esquema relacional, selecciona la respuesta correcta para cada una de las
siguientes preguntas.
 Proveedores (idproveedor, nombreprov, domicilio, ciudad)
 Piezas (idpieza, nombrepiez, color)
 Proyectos (idproyecto, nomproy, duracion, ciudad)
 Suministradores (idproveedor, idpieza, idproyecto, cantidad)
Las claves de cada tabla son las que se resaltan en negrita. La tabla “Suministradores” relaciona a
los proveedores que suministran ciertas cantidades de piezas a los proyectos.

4.3.1. ¿Cuál de las siguientes sentencias en SQL contestan a la pregunta: Obtener los idproveedores de los
proveedores que suministran la pieza 1 a algún proyecto en una cantidad mayor que la cantidad promedio
suministrada de la pieza 2 a ese proyecto?

a) select distinct idproveedor from suministradores suministradoresx


where idpieza=1
group by idproveedor
having cantidad>(select avg(from suministradores suministradoresy
where idpieza=2
and suministradoresy.idproyecto=suministradoresx.idproyecto);

b) select distinct idproveedor from suministradores suministradoresx


where idpieza=1
and cantidad > (select avg(cantidad)
from suministradores suministradoresy
where idpieza=2
and suministradoresy.idproyecto=suministradoresx.idproyecto);

c) select distinct idproveedor from suministradores


where idpieza=1
and cantidad>avg(cantidad)
and idpieza in (select idpieza from suministradores where idpieza=2)
and suministradoresy.idproyecto=suministradoresx.idproyecto;

d) Las consultas no producen el resultado deseado o son erróneas.

4.3.2. ¿Qué resultado obtiene la siguiente consulta?

select distinct idpieza from suministradores


group by idproveedor having avg (cantidad) > 100;

a) Obtener los idpieza de las piezas suministradas tales que la cantidad promedio sea mayor que
100.
b) Obtener los idpieza de las piezas suministradas a algún proyecto tales que la cantidad promedio
suministrada de esa pieza a ese proyecto sea mayor que 100.
c) Obtener los idpieza de las piezas cuyo promedio de suministro sea mayor que 100.
d) La consulta no produce ninguno de los resultados anteriores o es errónea.

4.3.3. ¿Qué resultado obtiene la siguiente consulta?

select x.idpieza, y.idpieza from suministradores x, suministradores y


where x.idproveedor=y.idproveedor and x.idpieza > y.idpieza;

a) Obtener todas las parejas de idpieza tales que algún proveedor suministre las dos piezas
indicadas.
b) Obtener todas las parejas de idpieza distintas suministradas.
c) Obtener todas las parejas de idpieza suministradas, tales que la primera idpieza sea mayor que la
segunda.
d) La consulta no produce ninguno de los resultados anteriores o es errónea.

Página 17 de 22
Apartado 4.4.

Dada la dirección de red 172.31.103.0/24 para la siguiente topología de red,

Dividir la dirección de red 172.31.103.0/24 en la cantidad adecuada de subredes, siguiendo un


esquema VLSM (Variable Length Subnet Mask) y teniendo en cuenta que la red tiene los
siguientes requisitos:
• La LAN del switch ASW-1 requerirá 27 direcciones IP de host.
• La LAN del switch ASW-2 requerirá 25 direcciones IP de host.
• La LAN del switch ASW-3 requerirá 14 direcciones IP de host.
• La LAN del switch ASW-4 requerirá 8 direcciones IP de host.

• Usar la primera subred para la LAN más extensa.


• Usar la segunda subred para la segunda LAN más extensa.
• Usar la tercera subred para la tercera LAN más extensa.
• Usar la cuarta subred para la cuarta LAN más extensa.
• Usar la quinta subred para admitir la conexión entre los routers
• Las direcciones IP a partir de la dirección 172.31.103.128 deben quedar libres para futuras
necesidades.

Complete la tabla de subredes con las descripciones de las subredes, el valor decimal de todas
las subredes disponibles, la cantidad de hosts necesarios, la dirección de subred, la primera
dirección de host utilizable y la dirección de broadcast.

Página 18 de 22
Ejercicio 5
Apartado 5.1.
Completa el siguiente programa de modo que ordene el ArrayList personas (presente en el
método main) por el campo nota en orden descendente, haciendo uso del interface Comparator.

package ordenar;
public class Persona {

private String dni;


private double nota;

public Persona(String dni, double nota) {


this.dni = dni;
this.nota = nota;

public String getDni() {


return dni;
}

public double getNota() {


return nota;
}

}
package ordenar;

import java.util.ArrayList;
import java.util.Collections;

public class Ordenar {

public static void main(String[] args) {

ArrayList<Persona> personas = new ArrayList();


personas.add(new Persona("33584854A", 5));
personas.add(new Persona("33588854C", 5));
personas.add(new Persona("33222854D", 6));
//parte a desarrollar por el opositor

}
}

Página 19 de 22
Apartado 5.2

El siguiente programa implementa de manera incorrecta una forma de solucionar el problema


productor/consumidor. Consta de cuatro clases:

Q: la cola que se intenta sincronizar


Productor: objeto hilo que genera los datos para la cola
Consumidor: objeto hilo que consume los datos de la cola
PC: clase que crea los objetos Q, Productor y Consumidor

Aunque los métodos get() y put() de Q son métodos sincronizados, nada impide que el productor
vaya más rápido que el consumidor, ni que el consumidor recoja el mismo valor de la cola dos
veces, por ejemplo el productor genera 1, el consumidor comienza y consume el mismo 1 varias
veces seguidas.

La forma correcta de escribir este programa es utilizar los métodos wait() y notify() para la
comunicación en ambos sentidos.

wait() indica al hilo que realiza la llamada que ha de abandonar el monitor y quedar suspendido
hasta que algún otro hilo entre en el mismo monitor y llame a notify()
notify() activa el primer hilo que llamó a wait() en el mismo objeto

final void wait() throws InterruptedException


final void notify();

Salida deseada:

Produce: 1
Consume: 1
Produce: 2
Consume: 2
….

public class Q { public class Productor public class Consumidor


int n; implements Runnable { implements Runnable{
synchronized int get() { Q q; Q q;
System.out.println("Tiene " + n); Consumidor(Q q) {
return n; } Productor (Q q) { this.q = q;
this.q = q; new Thread(this,
synchronized void put(int n) { new Thread(this, "Consumidor").start(); }
this.n = n; "Productor").start(); } @Override
System.out.println("Poner " + @Override public void run() {
n); } public void run() { while (true) {
} int i = 0; q.get();}
while (true) {q.put(i++);} }
} }
}
public class PC {
public static void main(String[] args) {
Q q = new Q();
new Productor(q);
new Consumidor(q);
System.out.println("Ctrl+c para Parar");
}
}

Página 20 de 22
Apartado 5.3

Dado el siguiente esquema relacional:

 Proveedores (idproveedor, nombreprov, domicilio, ciudad)


 Piezas (idpieza, nombrepiez, color)
 Proyectos (idproyecto, nomproy, duracion, ciudad)
 Suministradores (idproveedor, idpieza, idproyecto, cantidad)

Las claves de cada tabla son las que se resaltan en negrita. La tabla “Suministradores” relaciona a
los proveedores que suministran ciertas cantidades de piezas a los proyectos.

Responder a las consultas siguientes:

a) Obtener los idproyecto de los distintos proyectos a los cuales suministra piezas por lo
menos un proveedor que no esté en la misma ciudad.
b) Obtener los idpieza de las piezas de color rojo suministradas a algún proyecto tales que la
cantidad media sumnistrada al mismo sea mayor que 100.
c) Obtener los idproyecto de los proyectos donde se utilice al menos una de las piezas
suministradas por el proveedor “1”.

Página 21 de 22
Apartado 5.4

Suponiendo que el equipo C es un DHCP server, el B es un DHCP Relay y el A es un cliente que


solicita una dirección IP, indique la secuencia de paquetes de modo cronológico para obtener
dicha dirección.

Página 22 de 22

También podría gustarte