Hola este no es un tutorial, solo es un programa en C++ que estoy haciendo para una clase donde tenemos que crear un tipo de dato abstracto Matriz, sobrecargar algunos operadores y métodos, usar algo de manejo de memoria dinámica y templates.
Dejo el código por si a alguien le sirve 🙂 …
Menu del programa
Mostrar las matrices
Implementacion
#include #include "Matriz.h" //#include //descomentar esta linea en windows using namespace std; int main(){ int opc = 0; Matriz a(1),b(1),c,d; a.llenaMatriz(); b.llenaMatriz(1); do { cout<<"[0] Sumar matrices"<<<"[1] Multiplicar matrices"<<<"[2] Mostrar matrices"<<<"[3] Transpuesta (los resultados de suma/multiplicacion)"<<<"[4] Las diagonales (los resultados de suma/multiplicacion)"<<<"[5] Numero menor de la matriz (los resultados de suma/multiplicacion)"<<<"[6] Salir del programa"<<<<"Elije una opcion: "; cin>>opc; switch(opc) { case 0: c=a+b; cout<<<<"Matriz A"<<<<"Matriz B"<<<<<<"El numero menor de la Matriz: "<<<<<"Es: "<<<<<<"Gracias por usar el programa"; break; default: cout<<"Opcion invalida, elije un numero del menu"; } }while(opc != 6); //getch(); //descomentar esta linea en windows return 0; }
Diseño
#include#include #include #include using namespace std; const int ren = 5; const int col = 5; template class Matriz { public: //constructores Matriz(); Matriz(T); Matriz(Matriz &); ~Matriz(); //metodos void operator = (const Matriz &); T getDato(int, int); void setDato(int, int, T); void transpuesta (Matriz &); void muestradiagonales(); void llenaMatriz(); void llenaMatriz(int); T menor(); private: //puntero a punteros T **datos; //T datos[ren][col]; }; template Matriz ::~Matriz() { //liberar localidades de memoria for (int i=0; i Matriz ::Matriz() { //datos = new T[ren*col]; datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/ for (int i=0; i Matriz ::Matriz(T valorinicial) { //datos = new T[ren*col]; datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/ for (int i=0; i void Matriz ::llenaMatriz() { int n = 0; srand(time(NULL)); for(int i = 0; i setDato(i,j,n); } } } template void Matriz ::llenaMatriz(int sal) { int n = 0; srand(time(NULL)); for(int i = 0; i 100) {setDato(i,j,100);}else{ setDato(i,j,n+sal);} } } } template Matriz ::Matriz( Matriz &M) { //datos = new T[ren*col]; datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/ for (int i=0; i T Matriz ::getDato(int c, int r) { //c = columna //r = renglon return datos[c][r]; //return datos[col*c+r]; } template T Matriz ::menor() { int menor = this->getDato(0,0); for(int i = 0; i getDato(i,j) < menor) menor = this->getDato(i,j); } } return menor; } template void Matriz ::muestradiagonales() { int renglon = ren-1; cout< getDato(i,i)<<"]"; } cout< getDato(renglon,i)<<"]"; renglon = renglon - 1; } cout< void Matriz ::setDato(int c, int r, T dato) { datos[c][r] = dato; //datos[col*r+c] = dato; //datos[col*c+r] = dato; } template void Matriz ::transpuesta (Matriz & M) { float tmp = 0; if(ren != col) { cout<<"Solo se aceptan matrices cuadradas"; } else { for(int i = 0; i setDato(i,j,M.getDato(j,i)); this->setDato(j,i,tmp); } } } } template void Matriz ::operator = (const Matriz &igualar) { int i = 0, j = 0; for(i = 0; i setDato(i,j,igualar.datos[i*j]); //this->setDato(i,j,igualar.datos[i*j]); this->setDato(i,j,igualar.datos[i][j]); this->setDato(i,j,igualar.datos[i][j]); } } } template Matriz operator + (Matriz &uno, Matriz &dos) { Matriz temp; for(int i = 0; i Matriz operator * (Matriz &uno, Matriz &dos) { int i = 0, j = 0, k = 0; Matriz objTemp; for(i = 0; i std::ostream& operator<< (std::ostream &salida, Matriz &objeto) { for(int i = 0; i Descargar los archivos
salu2
PD: El banner del post no tiene nada que ver xD, lo que pasa que en ese momento estaba jugando Super Meat Boy :p
Muchas gracias, ahora toca comprenderlo al 100 en mis ratos libres me interesa mucho aprender c++, de nuevo muchas gracias.