27 de noviembre de 2017

Ejercicios selectos (matrices).

  1. Considere el Ejemplo 6.7. ¿Qué pasa si hay más inicializadores que elementos físicos? Pruebe dicha situación en los dos esquemas de inicialización planteados en el blog.
  2. Escriba un programa que pruebe la función suma del Ejemplo 6.8.
  3. Modifique la función leeMatriz del Ejemplo 6.7 para que almacene valores de tipo float en la matriz matriz. Una vez que haya probado su función, agréguela a la biblioteca de funciones del Ejemplo 6.8.
  4. Modifique la función imprimeMatriz del Ejemplo 6.7 para que imprima los valores de tipo float de la matriz matriz. Una vez que haya probado su función, agréguela a la biblioteca de funciones del Ejemplo 6.8.
  5. Escriba un programa que defina y pruebe una función con el siguiente prototipo: void resta(float a[ ][N], float b[ ][N], float c[ ][N], int m, int n). La función deberá calcular en la matriz c la resta de la matriz a menos la matriz b de manera análoga a como lo hace la función suma del Ejemplo 6.8.
  6. Agregue la función resta del ejercicio anterior, a la biblioteca de funciones del Ejemplo 6.8.
  7. Escriba un programa que defina y pruebe una función con el siguiente prototipo: void imprimeTranspuesta(float a[ ][N], int m, int n). La función deberá imprimir en la salida estándar la matriz transpuesta de a. La matriz transpuesta se genera convirtiendo los renglones en columnas y viceversa.
  8. Escriba un programa que defina y pruebe una función con el siguiente prototipo: void transpuesta(float a[ ][N], float aT[ ][N],int m, int n). La función deberá generar en la matriz aT la matriz transpuesta de a. La matriz transpuesta se genera convirtiendo los renglones en columnas y viceversa.
  9. Agregue la función transpuesta del ejercicio anterior a la biblioteca de funciones del Ejemplo 6.8.
  10. Escriba un programa que defina y pruebe una función con el siguiente prototipo: int esSimetrica(float a[ ][N], int n). La función deberá determinar si la matriz a es o no simétrica. Una matriz simétrica es aquella que es igual con su matriz transpuesta.
  11. Agregue la función esSimetrica del ejercicio anterior, a la biblioteca de funciones del Ejemplo 6.8.
  12. Escriba un programa que defina y pruebe una función con el siguiente prototipo: void producto(float a[ ][N], float b[ ][N], float c[ ][N], int m, int n, int l). La función debe calcular el producto de las matrices  a y b almacenando el resultado en c. Para poder realizar este ejercicio, investigue cómo se define y obtiene el producto de matrices.
  13. Agregue la función producto del ejercicio anterior a la biblioteca de funciones del Ejemplo 6.8.
  14. Escriba una función que determine la suma de los elementos de la diagonal principal de una matriz.
  15. Escriba una función que determine la suma de los elementos de la diagonal secundaria de una matriz.
  16. Un cuadrado mágico es una matriz de n x n donde n es impar, en donde se colocan números enteros en cada una de sus entradas y que además cumple con las siguientes características:
    • La suma de los números de cualquier línea (horizontal, vertical o diagonal) será siempre la misma. A esta suma se le denomina constante mágica.
    • Todos los números almacenados en un cuadrado mágico deben ser distintos.
    Con base en lo anterior, escriba una función con el siguiente prototipo:

    int cuadradoMagico(int c[ ][N], int n);

    Dado un cuadrado c de dimensiones lógicas n, la función determina si representa (regresa 1) o no (regresa 0) un cuadrado mágico. Ejemplo:

    4     9     2
    3     5     7
    8     1     6
    es un cuadrado mágico.
  17.  Haga un programa que implemente el juego del gato (tic tac toe). En este programa el usuario jugará en contra de la computadora. Utilice una matriz de tipo char e inicialícela con espacios en blanco. Utilice "O" para la computadora y "X" para el usuario. Haga su algoritmo tan elaborado como considere, no permita que el usuario gane fácilmente; sin embargo, una posibilidad es que cuando sea el turno de la computadora, simplemente recorra la matriz buscando una posición que no esté ocupada.
  18. Considere una implementación básica del Juego de la Vida con base en una matriz de 0's y 1's. El Juego de la Vida fue diseñado por el matemático británico John Horton Conway en 1970.
 Arreglos de n dimensiones.
  1. Las figuras del arreglo tridimensional discutidas en el blog (Arreglos de dimensiones) muestran en gris algunos de los elementos del arreglo de tres dimensiones. Denote todos los elementos visibles (para ambas) de dicho arreglo siguiendo la nomenclatura del lenguaje C.
  2. De manera análoga a lo descrito en la entrada Arreglos de dos dimensiones, dibuje y describa la representación física en la memoria del arreglo tridimensional del ejercicio anterior. Sugerencia: la representación en memoria se realiza también de manera lineal: los renglones de la primera matriz, después los de la segunda matriz, etcétera, la representación de malla puede ayudarle a visualizar mejor la representación.
  3. Basándose en el Ejemplo 6.9, escriba un programa que generalice la idea planteada para definir, inicializar, e imprimir en la salida estándar un hipercubo.
  4. Basándose en el Ejemplo 6.9, escriba un programa que generalice la idea planteada para definir, inicializar, e imprimir en la salida estándar un arreglo de cinco dimensiones cada una con un tamaño distinto, por ejemplo: dos para la primera dimensión, tres para la segunda, cuatro para la tercera y así sucesivamente.