0% encontró este documento útil (0 votos)
150 vistas4 páginas

Taller 1

El documento presenta la especificación de 6 problemas o tareas diferentes relacionadas con algoritmos y estructuras de datos. Para cada tarea, se describe la entrada, salida, precondiciones y postcondiciones de manera formal usando notación matemática. Los problemas involucran encontrar raíces cuadradas, determinar si un número es primo, encontrar el siguiente número primo, encontrar el mayor múltiplo de 3 en un arreglo, buscar un estudiante en un arreglo ordenado y encontrar la cadena más corta que contenga como subcadenas a todas las cadenas de entrada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
150 vistas4 páginas

Taller 1

El documento presenta la especificación de 6 problemas o tareas diferentes relacionadas con algoritmos y estructuras de datos. Para cada tarea, se describe la entrada, salida, precondiciones y postcondiciones de manera formal usando notación matemática. Los problemas involucran encontrar raíces cuadradas, determinar si un número es primo, encontrar el siguiente número primo, encontrar el mayor múltiplo de 3 en un arreglo, buscar un estudiante en un arreglo ordenado y encontrar la cadena más corta que contenga como subcadenas a todas las cadenas de entrada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Daniel Santamaría Álvarez – 201720222

Dalgo - Tarea 1
1. Dado un número natural, encontrar su raiz cuadrada entera, la cual se define
como el mayor número natural que es menor que la raíz cuadrada real del
número

Entrada: Número natural


var n: nat

Salida: Número natural que representa una raíz cuadrada entera


var r: nat

Precondición: No hay ninguna condición previa que se aplique sobre la


entrada. Se utilizará una constante C para asegurar la persistencia del dato
en el programa.
𝑄: 𝑛 = 𝐶

Postcondición: El objetivo en términos de la entrada y salida se


representaría de la siguiente forma tal que

𝑟 ≤ √𝐶 ≤ 𝑟 + 1
La función 𝑥 2 es creciente en los números reales, la postcondición también
se puede expresar de la siguiente forma en que no requiere el uso de raíces
cuadradas:
{R: 𝑟 2 ≤ C ≤ (𝑟 + 1)2 }

2. Dado un número natural, determinar si es un número primo

Entrada: Número natural


var n: nat

Salida: variable booleana que muestra si el número de entrada es primo o no


var b: bool
Daniel Santamaría Álvarez – 201720222

Precondición: Para cualquier número natural se puede determinar si es


primo, no se pide ninguna condición particular sobre la entrada. Se utilizará
una constante C para asegurar la persistencia del dato en el programa.
𝑄: 𝑛 = 𝐶

Postcondición: El valor de b tiene que coincidir al final con el valor de verdad


de un predicado que solo sea cierto si n es primo. Según la definición de
número primo, el predicado debe indicar que el residuo entre n y cualquiera
de estos números debe ser mayor que cero. La postcondición hace entonces
equivalente el valor de b al valor del predicado:
{R: b = (∀ k | 2 ≤ k ≤ C ∶ C mod k > 0)}

3. Dado un número primo. Encontrar el siguiente número primo:

Entrada: Número natural


var n: nat

Salida: Número natural que representa al siguiente número primo


var p: nat

Precondición: Se pide como condición de inicio que el número de entrada n


sea primo. Como este predicado lo vamos a necesitar también en la
postcondición, lo vamos a definir con el nombre PR para cualquier número
natural x:
PR(x) = (∀ k | 2 ≤ k < x ∶ x mod k > 0)
{Q: PR(n)}

Postcondición: Utilizando el mismo predicado, pedimos al final que p sea


mayor que n, que p sea primo y que ningún número entre n y p sean primos
{R: n < p ∧ PR(p) ∧ (∀𝑘 |𝑛 < 𝑘 < 𝑝 ∶ ¬𝑃𝑅(𝑘)}
Daniel Santamaría Álvarez – 201720222

4. Dado un arreglo de números enteros, encontrar el múltiplo de 3 más grande


del arreglo. Si el arreglo no tiene múltiplos de 3, la respuesta debe ser -1

Entrada: Lista de números. Se representarán en un arreglo de tamaño N.


var E[N]: Array of Z

Salida: múltiplo de 3 más grande de la lista.


var s: Z

Precondición: No hay ninguna condición previa que se pida sobre la entrada.


Pero si la lista se encuentra ordenada, se podría empezar de atrás hacia
adelante. Si no se encuentra ordenada no tiene caso ordenarla ya que solo
se realizaría una única consulta sobre esta y eso tiene un complejidad de
O(n)

Postcondición: Se expresa el objetivo que es el mayor numero múltiplo de 3


de la lista

5. Dado un conjunto de estudiantes ordenados por código y el código de un


estudiante, encontrar el estudiante con el código dado o reportar que el
estudiante no existe
Debido a que el enunciado nos indica que trabajaremos con un objeto de tipo
estudiante, este se representará con la variable e de tipo estudiante. Para
saber su código se usará [Link] y su nombre será [Link]

Entrada:
- Lista de estudiantes. Asumiremos que cada estudiante tiene un código
único y saber que es un conjunto. Se representaran en un arreglo
ordenado de tamaño N.
var E[0,N] : array of Estudiante

- Código del estudiante


Var c: string
Daniel Santamaría Álvarez – 201720222

Salida: Estudiante con el código buscado. Este puede ser un valor nulo.
var e: Estudiante

Precondición: Dado que se escogió un arreglo para representar los


estudiantes, se debe validar como precondición que el arreglo no tenga
repetidos. Además se va a pedir que esté ordenado por código. Las dos
condiciones se pueden describir con un solo predicado:
{𝑄: (∀𝑘 |0 ≤ 𝑘 ≤ 𝑁 − 1 ∶ 𝐸[𝑘]. 𝑐𝑜𝑑𝑖𝑔𝑜 < 𝐸[𝑘 + 1]. 𝑐𝑜𝑑𝑖𝑔𝑜)}

Postcondición: Como hay dos posibilidades, que el estudiante esté o que no


esté, se utiliza una disyunción y se expresa cual es el valor de la variable de
salida en cada uno de los dos casos:

{𝑅: (𝑒 =⊥ ∧ (∀k |0 ≤ 𝑘 ≤ 𝑁 ∶ 𝐸[𝑘]. 𝑐𝑜𝑑𝑖𝑔𝑜 ≠ 𝑐)) ∨ (𝑒 ∈ 𝐸 ∧ 𝑒. 𝑐𝑜𝑑𝑖𝑔𝑜 = 𝑐)}

6. Dado un conjunto de n cadenas, encontrar la cadena más corta tal que cada
una de las cadenas de entrada sea una subcadena de la cadena de salida

También podría gustarte