You are on page 1of 3

Tarea 5

 Puede no utilizar los nombres sugeridos para los argumentos de las funciones, pero debe de
utilizar los nombres de las funciones especificados.
 Las funciones a implementar no evaluarán los datos de entrada (por ejemplo, si es especifica
que un dato será entero no haga pruebas dentro de su función para validar esta información).
Asuma que los argumentos de entrada son correctamente ingresados en el momento de su
ejecución.
 Escriba las funciones que se piden en cada ejercicio. Utilice “;” al final de las instrucciones para
evitar la observación de los cálculos en la Ventana de Comandos, aunque esto no influya en la
calificación.
 Los problemas etiquetados con (**) son más difíciles de resolver, por lo que no se preocupe si le
toma más tiempo que los otros.
 Utilice el archivo de evaluación test4.p para su revisión mientras va avanzando, así como para
la calificación final.

1. (2p) Escriba una función llamada vecindario que tome como entrada un vector fila v y
cree otro vector fila de salida que contenga los valores absolutos de las diferencias
entre elementos vecinos de v. Por ejemplo, si v = [1 2 4 7], entonces la salida de
función será [1 2 3]. Note que el vector de salida tendrá un elemento menos que el
vector de entrada. Verifique que la entrada v sea un vector y que tenga por lo menos
dos elementos y retorne un arreglo vacío en caso contrario. No se le permite utilizar la
función diff.

2. (2p) Considera la definición function w = reemplazame (v, a, b, c). El primer


argumento v será un vector, mientras que a , b y c serán escalares. La función
reemplaza cada elemento de v que sea igual a con b y c. Por ejemplo, la instrucción:

>> x = reemplazame ([1 2 3], 2, 4, 5);

Devolverá x = [1 4 5 3]. Si c es omitido, reemplazará la ocurrencia de a con dos copias


de b. Si b también es omitido, reemplazara a con dos ceros.

3. (2p) Escriba una función semisuma que tome como entrada por lo menos una matriz
de dos dimensiones A y calcule la suma de los elementos que se encuentren en la
diagonal y a la derecha de esta. La diagonal está definida como el conjunto de
números cuyos índices fila y columna son los mismos.

Por ejemplo, si la entrada es [1 1 2 3; 4 5 6; 7 8 9], la función retornará 26.

4. (2p) Escriba una función llamada elementos que tome como entrada un arreglo
llamado X que sea una matriz o un vector. La función identificará aquellos elementos
de X que sean mayores que la suma de sus dos índices. Por ejemplo, si el elemento
X(2,3) es 6, entonces el elemento deberá ser identificado porque 6 es mayor que 2 + 3.
La salida de la función tendrá almacenados los índices de estos elementos encontrados
en una matriz de salida de Nx2. La primera columna contendrá los índices fila,
mientras que la segunda columna contendrá los índices columna correspondientes.
Por ejemplo, la instrucción index = elementos([1 2; 5 2; 6 0]) retornará una matriz
index igual a [1 2; 2 1; 3 1]. Si no hay elementos que cumplan con la condición, la
función retornará un arreglo vacío.

5. (2p) Escriba una función llamada uno_por_n que retorne el menor entero positivo n
para el cual la suma 1 +1/2 + 1/3 + … + 1/n sea mayor o igual a x donde x será el
argumento de entrada. Limite el número máximo de n términos en la suma a 10,000 y
retorne -1 si excede este valor. (Nota: si su programa o el evaluador toma demasiado
tiempo, puede haber creado un lazo infinito y necesita presionar Ctrl-C en el teclado).

6. (2p) Escriba una función llamada pi_aproximado que utilice la siguiente aproximación
de :


(−3)𝑘
𝜋 = √12 ∑
2𝑘 + 1
𝑘=0

En lugar de irse hasta el infinito, la función se detendrá en el valor de k que se


aproxime al valor de  (por ejemplo, el valor de pi generado por MATLAB) por una
diferencia igual a un valor delta, que será el único argumento de entrada. La primera
salida de la función será el valor aproximado de , mientras que la segunda salida será
k. (Nota: si su programa o el evaluador toma demasiado tiempo, puede haber creado
un lazo infinito y necesita presionar Ctrl-C en el teclado).

7. (2p) Escriba una función llamada separado_por_dos que tome una matriz A de
enteros positivos como entrada y retorne dos vectores fila. El primer vector de salida
contendrá todos los elementos pares de A y nada más, mientras que el segundo
contendrá todos los elementos impares de A y nada más. No puede utilizar lazos-for o
lazos-while.

8. (2p) Escriba una función llamada divvy que tome una matriz A de enteros positivos y
un solo valor entero positivo k como dos argumentos de entrada y retorne una matriz
B que tenga las mismas dimensiones de A. Los elementos de B son todos divisibles por
k. Si un elemento de A es divisible por k, el elemento correspondiente en B debe tener
el mismo valor. Si un elemento de A no es divisible por k, el elemento correspondiente
en B debe ser el producto del elemento en A y k. No se le permite utilizar lazos-for o
lazos-while. Por ejemplo, la instrucción X = divvy([1 2; 3 4],2) retornará un X
igual a [2 2; 6 4].

9. (2p)**Escriba una función llamada onda_cuadrada que calcule la siguiente sumatoria:

𝑛
sen( (2k − 1) t)

(2𝑘 − 1)
𝑘=1

para 1001 valores de t uniformemente espaciados entre 0 y 4. El argumento de


entrada es un entero escalar positivo n, y el argumento de salida es un vector fila de
1001 de estas sumas –una suma por cada valor de t. Puede probar su función
ejecutándola con el valor n igual a 200 o mayor y graficar el resultado; verá porque la
función se llama “onda_cuadrada”.
10. (2p)**Escriba una función miprimo que tome n, un entero positivo, como entrada y
retorne true si n es primo o retorne false en caso de no serlo. No utilice las funciones
de MATLAB isprime o primer o factor. Pista: puede utilizar las funciones rem o fix.

You might also like