Escolar Documentos
Profissional Documentos
Cultura Documentos
generarClaves() {
EnteroGrande p, q;
do {
// Genera un entero de gran tamaño probablemente primo.
p = generarCandidato();
} while (!testPrimalidad(p);
do {
q = generarCandidato();
} while (!testPrimalidad(q);
EnteroGrande k1 = multiplicar(p, q);
EnteroGrande p_1 = restar(p, 1);
EnteroGrande q_1 = restar(q, 1);
EnteroGrande k2 = multiplicar(p_1, q_1);
almacenar(getIdentificador(), k1, k2);
}
Se pide:
c) Suponga que se desea realizar una integración ascendente pero con una mod-
ificación: los módulos testPrimalidad() y generarCandidato() por este orden,
se consideran críticos e interesa probarlos cuanto antes. ¿Cúal sería el orden
de integración de módulos? (puede ser que haya más de un orden posible). 2
puntos
Solución
1
Figura 1: Grafo de flujo
2
La complejidad ciclomática se puede calcular de tres formas:
Número de regiones = 3
V(G) = Número de nodos predicado + 1 = 2 + 1 = 3
Enlaces - Nodos + 2 = 10 - 9 + 2 = 3
a) 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
b) 1 - 2 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
c) 1 - 2 - 3 - 4 - 3 - 4 - 5 - 6 - 7 - 8 - 9
3
Figura 2: Esquema de módulos. En el enunciado se nos olvidó poner la relación
entre restar y módulo que lo utiliza, así como la relación de codificar con el resto
de los módulos.
En un grafo dirigido cuyos nodos están ordenados, el orden se indica con una
asignación de un número entero a cada nodo. Se dice que el grafo tiene un orden
ancestral si se cumple que para todo nodo Y descendiente del nodo Z, el entero
asignado a Y es menor que el asignado a Z. Dado el siguiente fragmento de código:
while (!nodosSinExplorar.vacio()) {
Nodo nodo = nodosSinExplorar.pop();
nodosExplorados.add(nodo);
Nodo[] descendientes = nodo.getDescendientes();
for (int i = 0; i < padres.length; i++) {
if (descendientes[i].orden() < nodo.orden()) {
return false;
}
if (!nodosExplorados.contiene(descendientes[i])) {
nodosSinExplorar.add(descendientes[i]);
}
}
}
return true;
4
}
Se pide:
c) Suponga que en este caso, definimos las entradas del caso de prueba como la
representación gráfica de un grafo, véase como ejemplo la figura 3. Caminos
críticos y casos de prueba.
5
Suponga este fragmento de código en pseudocódigo:
for i:=1 to n:
if tolower(s[i] != tolower(t[i]):
return false;
fi
ffor
return true
end
Se pide:
d) ¿Qué más pruebas serían necesarias en esta función? Con las pruebas prop-
uestas, ¿se puede garantizar la corrección al 100 %?. Razone la respuesta. 1.5
puntos
Solución
6
Figura 4: Grafo de flujo
7
c) 1 - 3 - 4 - 5 - 6 - 9: (“h”, “i”, false)