Tengo el siguiente ejercicio en el que me piden comparar un valor con los numeros de una matriz dada una precisión que no se puede superar, los numeros que cumplan esa condición se imprimirán en una nueva matriz y si no la cumplen, se imprimirá un 0.
Yo lo he intentado hacer, este es la función que me dan en el archivo cabecera: previamente, declaré una variable global con la precisión
const double epsilon=1e-3;
void filtra(matrix_t& M, matrix_item_t it, double precision);
Bien, en el hpp la desarrollo, y he puesto esto:
void matrix_t::filtra(const matrix_t& M, matrix_item_t it, double epsilon) {
redimensiona(m_,n_); //destruí la matriz A y la redimensioné asignándole un número de filas y columnas
matrix_t E; //esta matriz la declará para que guarde los números de la matriz A que cumplan con la precisión,y los que no cumplan, que guarde un 0 en su posición en mi nueva matriz,al usar funciones booleanas
for (i=0; i<(E.get_m()); i++) {
for (j=0; j<(E.get_n());j++)
if ((E.get_matrix_item(i,j))-matrix_item_t it < epsilon){
E.set_matrix_item(i,j);
}
M
es un array dinámico que contiene las filas y las columnas de la matriz A
, la matriz original matrix_item_t
it es el elemento que tengo que buscar en la matriz A
.
Luego en el main
, puse esto:
matrix_t A;
matrix_t &B=matrix_t A;
matrix_t &E=matrix_t B;
cout << endl;
A.read(cin);
cout << "--- MATRIZ ORIGINAL ---" << endl;
B.write();
cout << "--- PRECISIÓN 0.001 ---" << endl;
A.filtra(B,5.254,1E-3);
cout << "--- PRECISIÓN 0.001 ---" << endl;
A.filtra(B,5.254,1E-3);
B.write();
B.write();
cout << "--- PRECISIÓN 0.01 ---" << endl;
B.write();
cout << "--- PRECISIÓN 0.1 ---" << endl;
A.filtra(B,5.254,1E-1);
B.write();
cout << "--- PRECISIÓN 1.0 ---" << endl;
A.filtra(B,5.254,1.0);
B.write();
Esta última parte me la daban en el ejercicio como código que tenía que poner en el main, la de A.filtra...
la que puse yo es la de matrix_t &B=matrix_t A;
matrix_t &E=matrix_t B;
hasta que empieza A.filtra
, y obviamente todo lo del cpp y hpp lo hice yo, el problema es que cuando compilo me salen muchos errores, y a mí me cuesta mucho entender los errores que señala el compilador:
main_m_3.cpp: In function ‘int main()’:
main_m_3.cpp:25:18: error: redeclaration of ‘matrix_t A’
matrix_t A;
^
main_m_3.cpp:5:11: note: ‘matrix_t A’ previously declared here
matrix_t A;
^
main_m_3.cpp:26:18: error: conflicting declaration ‘matrix_t B’
matrix_t B;
^
main_m_3.cpp:12:18: note: previous declaration as ‘const matrix_t& B’
const matrix_t& B=A;
^
main_m_3.cpp:27:21: error: conversion from ‘const matrix_t*’ to non-scalar type ‘matrix_t’ requested
matrix_t E=&B;
^
main_m_3.cpp:35:3: error: ‘class matrix_t’ has no member named ‘filtra’
A.filtra(B,5.254,1E-4);
^
main_m_3.cpp:39:3: error: ‘class matrix_t’ has no member named ‘filtra’
A.filtra(B,5.254,1E-3);
^
main_m_3.cpp:43:3: error: ‘class matrix_t’ has no member named ‘filtra’
A.filtra(B,5.254,1E-2);
^
main_m_3.cpp:47:3: error: ‘class matrix_t’ has no member named ‘filtra’
A.filtra(B,5.254,1E-1);
^
main_m_3.cpp:51:3: error: ‘class matrix_t’ has no member named ‘filtra’
A.filtra(B,5.254,1.0);
^
no ‘void matrix_t::filtra(const matrix_t&, matrix_item_t, double)’ member function declared in class ‘matrix_t’
void matrix_t::filtra(const matrix_t& M, matrix_item_t it, double epsilon)
La verdad que no sé dónde falla el código, se agradece muchísimo ayuda
Muchas gracias.