Guest User

Untitled

a guest
Mar 4th, 2018
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.62 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <cstdio> // Cabecera que contendrá el procedimiento sprintf
  4. #include <iostream> // Cabecera que tendrá la E/S mediante flujo
  5. #include <cmath> // Cabecera que contendrá las funcioens matemáticas
  6.  
  7. using namespace std;
  8.  
  9.  
  10. //========================================================================================
  11. // Definición de tipos
  12. //========================================================================================
  13.  
  14. /** Tipo de dato que almacenará cada elemento de la matriz. */
  15. typedef double matrix_item_t;
  16. /** Tipo de dato para índices de la matriz. */
  17. typedef unsigned short int matrix_inx_t;
  18. /** Tipo de dato para índices del vector . */
  19. typedef unsigned short int vector_inx_t;
  20.  
  21. /**
  22. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  23. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  24. \date 15 de febrero de 2017
  25.  
  26. \details Clase que representa una matriz de mxn elementos. */
  27.  
  28. class matrix_t {
  29.  
  30. //========================================================================================
  31. // Atributos privados.
  32. //========================================================================================
  33.  
  34. private:
  35.  
  36. matrix_item_t* M_; /**< Puntero que apunta al comienzo del vector conteniendo los elementos de la matriz. */
  37.  
  38. matrix_inx_t m_; /**< Número de filas. */
  39. matrix_inx_t n_; /**< Número de columnas.*/
  40.  
  41.  
  42.  
  43. //========================================================================================
  44. // Métodos públicos.
  45. //========================================================================================
  46.  
  47. public:
  48.  
  49. /**
  50. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  51. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  52. \date 15 de febrero de 2017
  53.  
  54. \details Constructor. Reserva memoria para una matriz de mxn elementos.
  55.  
  56. * @param m número de filas del tipo matrix_inx_t.
  57. * @param n número de columnas del tipo matrix_inx_t.
  58. * @see matrix_inx_t.
  59.  
  60. */
  61.  
  62. matrix_t(matrix_inx_t m,matrix_inx_t n);
  63.  
  64. /**
  65. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  66. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  67. \date 15 de febrero de 2017
  68.  
  69. \details Constructor por defecto. Construye una matriz de dimensión 0x0.
  70.  
  71. */
  72.  
  73. matrix_t(void);
  74.  
  75. /**
  76. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  77. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  78. \date 15 de febrero de 2017
  79.  
  80. \details Destructor. Libera la memoria de la matriz.
  81. */
  82.  
  83. ~matrix_t(void);
  84.  
  85.  
  86. /**
  87. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  88. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  89. \date 15 de febrero de 2017
  90.  
  91. \details Devuelve el elemento de la posición (i,j) de la matriz.
  92.  
  93. * @param i fila del elemento.
  94. * @param j columna del elemento
  95. * @see matrix_inx_t.
  96. * @return el valor en la posición (i,j).
  97. * @see vector_inx_t.
  98. */
  99.  
  100. matrix_item_t get_matrix_item(matrix_inx_t i,matrix_inx_t j) const;
  101.  
  102.  
  103. /**
  104. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  105. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  106. \date 15 de febrero de 2017
  107.  
  108. \details Asigna un valor al elemento (i,j) de la matriz.
  109.  
  110. * @param it valor a asignar.
  111. * @param i fila del elemento.
  112. * @param j columna del elemento
  113. * @see matrix_inx_t.
  114.  
  115. */
  116.  
  117. void set_matrix_item(matrix_inx_t i,matrix_inx_t j,matrix_item_t it);
  118.  
  119. /**
  120. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  121. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  122. \date 15 de febrero de 2017
  123.  
  124. \details Devuelve el número de filas.
  125.  
  126. * @return el número de filas m_.
  127. * @see matrix_inx_t.
  128.  
  129. */
  130.  
  131. matrix_inx_t get_m(void) const;
  132.  
  133.  
  134. /**
  135. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  136. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  137. \date 15 de febrero de 2017
  138.  
  139. \details Devuelve el número de columnas.
  140.  
  141. * @return el número de columnas n_.
  142. * @see matrix_inx_t.
  143.  
  144. */
  145.  
  146. matrix_inx_t get_n(void) const;
  147.  
  148.  
  149. /**
  150. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  151. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  152. \date 15 de febrero de 2017
  153.  
  154. \details Lee una matriz desde el flujo de entrada. El formato es el siguiente:
  155. m_ n_
  156. elemento(1,1) elemento (1,2) ... elemento(1,n_)
  157. elemento(2,1) elemento (2,2) ... elemento(2,n_)
  158. ...
  159. elemento(m_,1) ... elemento(m_,n_)
  160. */
  161.  
  162. istream& read(istream& is);
  163.  
  164.  
  165. /**
  166. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  167. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  168. \date 15 de febrero de 2017
  169.  
  170. \details Escribe una matriz en el flujo de salida. El formato es el siguiente:
  171. m_ n_
  172. elemento(1,1) elemento (1,2) ... elemento(1,n_)
  173. elemento(2,1) elemento (2,2) ... elemento(2,n_)
  174. ...
  175. elemento(m_,1) ... elemento(m_,n_)
  176. */
  177.  
  178. ostream& write(ostream& os) const;
  179.  
  180.  
  181. /**
  182. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  183. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  184. \date 15 de febrero de 2017
  185.  
  186. \details Escribe una matriz en la salida estandard. El formato es el siguiente:
  187.  
  188. elemento(1,1) elemento (1,2) ... elemento(1,n_)
  189. elemento(2,1) elemento (2,2) ... elemento(2,n_)
  190. ...
  191. elemento(m_,1) ... elemento(m_,n_)
  192. */
  193.  
  194. void write(void) const;
  195.  
  196.  
  197.  
  198. //========================================================================================
  199. // Métodos privados.
  200. //========================================================================================
  201.  
  202. private:
  203.  
  204. /**
  205. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  206. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  207. \date 15 de febrero de 2017
  208.  
  209. \details Devuelve la posición k dentro del vector M_ del elemento (i,j) de la matriz.
  210.  
  211. * @param i fila del elemento.
  212. * @param j columna del elemento.
  213. * @see matrix_inx_t.
  214. * @return el índice k.
  215. * @see vector_inx_t.
  216. */
  217.  
  218. vector_inx_t pos(matrix_inx_t i,matrix_inx_t j);
  219. vector_inx_t pos(matrix_inx_t i,matrix_inx_t j) const;
  220.  
  221. /**
  222. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  223. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  224. \date 15 de febrero de 2017
  225.  
  226. \details Reserva memoria para una matriz de mxn elementos.
  227.  
  228. * @param m número de filas del tipo matrix_inx_t.
  229. * @param n número de columnas del tipo matrix_inx_t.
  230. * @see matrix_inx_t.
  231. */
  232.  
  233. void crearMatriz(void);
  234.  
  235.  
  236. /**
  237. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  238. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  239. \date 15 de febrero de 2017
  240.  
  241. \details Libera la memoria de la matriz.
  242. */
  243.  
  244. void destruirMatriz(void);
  245.  
  246. /**
  247. \author Jorge Riera Ledesma (jorge.riera.ledesma@ull.edu.es)
  248. \author Marcos A. Colebrook Santamaría (mcolesan@ull.edu.es)
  249. \date 15 de febrero de 2017
  250.  
  251. \details Redimensiona la matriz. Destruye la anterior, borrando su contenido, y construye una nueva matriz con la dimensión especificada.
  252.  
  253. * @param m nuevo número de filas.
  254. * @param n nuevo número de columnas.
  255. * @see matrix_inx_t.
  256. */
  257.  
  258. void redimensiona(matrix_inx_t m,matrix_inx_t n);
  259. };
Add Comment
Please, Sign In to add comment