Resolucion de sistemas lineales
 All Classes Files Functions Variables Typedefs Macros Pages
Vector.hpp
Go to the documentation of this file.
1 // Clase para el trabajar con vectores de punto flotante //
3 // //
4 // //
5 // Análisis y Diseño y Programación: //
6 // //
7 // Nombre: Antonio Carrillo Ledesma //
8 // E-mail: acl@www.mmc.geofisica.unam.mx //
9 // Página: http://www.mmc.geofisica.unam.mx/acl //
10 // //
11 // //
12 // Este programa es software libre. Puede redistribuirlo y/o modificarlo //
13 // bajo los términos de la Licencia Pública General de GNU según es //
14 // publicada por la Free Software Foundation, bien de la versión 2 de //
15 // dicha Licencia o bien (según su elección) de cualquier versión //
16 // posterior. //
17 // //
18 // Este programa se distribuye con la esperanza de que sea útil, pero SIN //
19 // NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin //
20 // garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la //
21 // Licencia Pública General de GNU para más detalles. //
22 // //
23 // Debería haber recibido una copia de la Licencia Pública General junto //
24 // con este programa. Si no ha sido así, escriba a la Free Software //
25 // Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. //
26 // //
27 // //
29 
30 
31 #ifndef __Vector__
32 #define __Vector__
33 
34 #include "Definiciones.hpp"
35 #include "Vector_Base.hpp"
36 
37 
38 
39 
40 
42 
47 class Vector: public Vector_Base
48 {
49 protected:
50 
51 
54 
56 
58  void solicitaMemoria(const int col, const ldouble val);
59 
60 
62 
63  void liberaMemoria(int tp)
64  {
65  delete []V;
66  V = NULL;
67  if (tp)
68  {
69  delete []Nmb;
70  Nmb = NULL;
71  }
72  }
73 
74 public:
75 
77  Vector(void) : Vector_Base()
78  {
79  solicitaMemoria(1,0);
80  asignaNombre("Sin Nombre");
81  }
82 
84 
87  {
88  solicitaMemoria(vec.columnas(),0);
89  asignaNombre(vec.nombre());
90  for (int i = 0; i < Col; i++) V[i] = vec.retorna(i);
91  }
92 
94 
96  Vector(const int col) : Vector_Base()
97  {
98  solicitaMemoria(col,0.0);
99  asignaNombre(" ");
100  }
101 
103 
106  Vector(const int col, const ldouble val) : Vector_Base()
107  {
108  solicitaMemoria(col, val);
109  asignaNombre(" ");
110  }
111 
113 
117  Vector(const int col, const ldouble val, const char *nmb) : Vector_Base()
118  {
119  solicitaMemoria(col, val);
120  asignaNombre(nmb);
121  }
122 
124 
127  Vector(const int col, const char *nmb) : Vector_Base()
128  {
129  solicitaMemoria(col,0.0);
130  asignaNombre(nmb);
131  }
132 
135  {
136  liberaMemoria(1);
137  }
138 
140 
141  void redimensiona(int ncol)
142  {
143  liberaMemoria(0);
144  solicitaMemoria(ncol,0.0);
145  }
146 
147 
149 
150  void inicializa(const ldouble val);
151 
152 
154 
156  inline ldouble operator [] (size_t col)
157  {
158  return retorna(col);
159  }
160 
162 
164  inline ldouble operator () (size_t col)
165  {
166  return retorna(col);
167  }
168 
169 
170 #ifdef DEPURAR
171 
174  inline void asigna(const int col, const ldouble val)
175  {
176  if (col < 0 || col >= Col)
177  {
179  printf("Error indice desbordado (%d)\n",col);
180  exit(1);
181  }
182  V[col] = val;
183  }
184 
185 
187 
189  inline ldouble retorna(const int col)
190  {
191  if (col < 0 || col >= Col)
192  {
194  printf("Error indice desbordado (%d)\n", col);
195  exit(1);
196  }
197  return V[col];
198  }
199 
200 #else
201 
204  inline void asigna(const int col, const ldouble val)
205  {
206  V[col] = val;
207  }
208 
209 
211 
213  inline ldouble retorna(const int col)
214  {
215  return V[col];
216  }
217 #endif
218 
220 
223  void visualiza(const int tp, int nl = 0, int num = 0);
224 
226 
227  void copia(Vector *a);
228 
230 
232  void convierte(ldouble *a, int tam);
233 
235 
237  void suma(Vector *a, Vector *b);
238 
240 
241  void suma(Vector *a);
242 
244 
246  void resta(Vector *a, Vector *b);
247 
249 
250  void resta(Vector *a);
251 
253 
254  void multiplica(ldouble esc);
255 
257 
258  ldouble normaInf(void);
259 
261 
262  ldouble productoPunto(void);
263 
265 
268 
270 
271  int esVectorCero(void);
272 
274 
276  int esCadaEntradaMasPequeno(double eps);
277 
279 
280  inline ldouble tamano(void)
281  {
282  ldouble t = (((long) sizeof(V) * Col) / 1024.0);
283  return t;
284  }
285 
287  inline void visualizaInformacion(void)
288  {
289  printf("\nVector \"%s\" de dimensión: %d \n",Nmb,Col);
290  }
291 
292 };
293 
298 #endif
void suma(Vector *a, Vector *b)
Suma los vectores a y b.
Definition: Vector.cpp:135
ldouble operator[](size_t col)
Retorna el valor de la columna col.
Definition: Vector.hpp:156
char * nombre(void)
Retorna el nombre del vector.
Definition: Vector_Base.hpp:98
Clase para el trabajar con vectores de punto flotante.
Definition: Vector.hpp:47
void visualiza(const int tp, int nl=0, int num=0)
Visualiza el vector.
Definition: Vector.cpp:67
void convierte(ldouble *a, int tam)
Convierte el contenido del arreglo a de tamaño tam a vector.
Definition: Vector.cpp:124
void asigna(const int col, const ldouble val)
Asigna el valor val a la columna col.
Definition: Vector.hpp:174
Vector(const int col, const char *nmb)
Constructor de la clase.
Definition: Vector.hpp:127
double ldouble
Define ldouble como double.
Definition: Definiciones.hpp:50
void asignaNombre(const char *nmb)
Asigna nombre al vector.
Definition: Vector_Base.hpp:80
void resta(Vector *a, Vector *b)
Resta los vectores a menos b.
Definition: Vector.cpp:171
ldouble * V
Puntero al contenido del Vector.
Definition: Vector.hpp:53
void liberaMemoria(int tp)
Libera la memoria solicitada dinamicamente.
Definition: Vector.hpp:63
void redimensiona(int ncol)
Redimensiona el tamaño del vector.
Definition: Vector.hpp:141
void copia(Vector *a)
Copia el contenido del vector al vector a.
Definition: Vector.cpp:105
Vector(const int col, const ldouble val)
Constructor de la clase.
Definition: Vector.hpp:106
void solicitaMemoria(const int col, const ldouble val)
Solicita la memoria necesaria para contener los valores del vector.
Definition: Vector.cpp:42
Vector(const int col, const ldouble val, const char *nmb)
Constructor de la clase.
Definition: Vector.hpp:117
Vector(Vector &vec)
Constructor de la clase.
Definition: Vector.hpp:86
~Vector()
Destructor de la clase.
Definition: Vector.hpp:134
void inicializa(const ldouble val)
Inicializa el vector al valor val indicado.
Definition: Vector.cpp:56
ldouble normaInf(void)
Calcula la norma infinito.
Definition: Vector.cpp:217
Vector(void)
Constructor de la clase.
Definition: Vector.hpp:77
int Col
Número de columnas del vector.
Definition: Vector_Base.hpp:54
ldouble tamano(void)
Tamaño del vector (aproximado) en Kb.
Definition: Vector.hpp:280
char * Nmb
Nombre del vector.
Definition: Vector_Base.hpp:57
ldouble productoPunto(void)
Calcula el producto punto.
Definition: Vector.cpp:237
int esCadaEntradaMasPequeno(double eps)
Es el vector en todas sus componentes más pequeño que eps.
Definition: Vector.cpp:274
Vector(const int col)
Constructor de la clase.
Definition: Vector.hpp:96
void visualizaInformacion(void)
Visualiza información general del vector.
Definition: Vector.hpp:287
ldouble retorna(const int col)
Retorna el valor de la columna col.
Definition: Vector.hpp:189
ldouble operator()(size_t col)
Retorna el valor de la columna col.
Definition: Vector.hpp:164
Clase base para el trabajar con vectores.
Definition: Vector_Base.hpp:49
void multiplica(ldouble esc)
Multiplica el vector por el escalar esc.
Definition: Vector.cpp:208
int esVectorCero(void)
Es el vector cero.
Definition: Vector.cpp:260
int columnas(void)
Retorna el número de columnas del vector.
Definition: Vector_Base.hpp:105