Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Antonio Villanueva Segura
- * g++ -std=c++11 -o exa exa.cpp
- */
- #include <iostream>
- #include <string>
- #include <random> //numeros aleatorios
- #include <ctime> //hora para generar numeros aleatorios
- using namespace std;
- //Matriz examen , luego se puede implementar a nivel de punteros e inicializar de forma aleatoria ...
- /*
- * Resultado de la matriz exament
- 15 48 45 108 216 324
- 21 33 69 123 246 369
- 89 55 87 231 462 693
- 125 136 201 924 1386 2310
- 250 272 402 1386 4620 6006
- 375 408 603 2310 6006 5679
- */
- int test[][6]={
- {15,48,45,-1,-1,-5},
- {21,33,69,-1,-1,-5},
- {89,55,87,-1,-1,-5},
- {-2,-2,-2,-3,-1,-5},
- {-2,-2,-2,-2,-3,-5},
- {-4,-4,-4,-4,-4,-6},
- };
- //----------------------------------------------------------------------
- /*Las funciones utilizan int *m , son punteros , es decir direcciones en la memoria
- * lo mas logico al principio seria m[filas][columnas] , pero como piden poder tratar
- * diferentes dimensiones y trabajar punteros este es el principio.
- * Para la funcion la matriz de dos dimensiones es una matriz de 1 dimension , por eso
- * tenemos que crear equivalencias
- * Por ejemplo m[fila=0][col=2] sera m[fila*6+col] que sera m[0*6+2] =m[2] la columna 2 de la linea 0
- * en nuestra matriz anterior test[][6] seria el valor m[2]=45 o m[0][2] en dos dimensiones
- * otro ejemplo
- * m[fila=2][col=1] =m[2][1] seria m[fila*6+1] es decir m[2*6+1]=m[13] en la matriz lineal de 1 dimension
- * es decir m[13]=m[2][1] que contiene 55 en la matriz de test ....
- *
- */
- void mostrarMatriz(int *m ,int y,int x){
- //Funcion para visualizar la matriz
- for (int fila=0;fila<y;fila++){
- for (int col=0;col<x;col++){
- cout <<m[fila*y+col]<<"\t";
- }
- cout <<endl;
- }
- cout <<"-------------------------------------------"<<endl;
- }
- //----------------------------------------------------------------------
- int sumaFila(int *m ,int y,int fila ,int max=6,int inicio=0){
- //Suma una fila de la matriz m,direccionada por un puntero * entre inicio y max
- int suma=0;
- for (int xx=inicio;xx<max;xx++){//Recorre columnas
- suma+=m[fila*y+xx];
- }
- return suma;
- }
- //----------------------------------------------------------------------
- int sumaColumna(int *m ,int y,int col ,int max=6,int inicio=0){
- //Suma una col de la matriz m,direccionada por un puntero * entre inicio y max
- int suma=0;
- for (int yy=inicio;yy<max;yy++){//Recorre lineas
- suma+=m[yy*y+col];
- }
- return suma;
- }
- //----------------------------------------------------------------------
- int sumaDiagonal(int *m ,int size=6){
- //Suma una diagonal
- int suma=0;
- for (int d=0;d<size;d++){
- if (m[d*size+d]>=0){//Casilla con valor valido no negativo
- suma +=m[d*size+d];
- }
- }
- return suma;
- }
- //----------------------------------------------------------------------
- int generAleatorio(int min=1,int max=90){
- //Genera un numero aleatorio entre min y max,se utiliza en inicializaTabla
- return min+rand()%(max+1);
- }
- //----------------------------------------------------------------------
- void inicializaTabla(int *m,int size=6){
- //Inicializa una matriz m cuadrada de tamano size
- for (int linea=0;linea<size;linea++){
- for (int col=0;col<size;col++){
- if (linea<3 and col<3 ){//Cuadrado de 3x3 a inicializar aletoriamente
- m[linea*size+col]=generAleatorio();//Inicializo aleatorios con el valor por defecto de la funcion
- }
- }
- }
- }
- //----------------------------------------------------------------------
- //----------------------------------------------------------------------
- //----------------------------------------------------------------------
- int main (){
- srand(time(NULL));//Inicio los numeros aleatorios
- int tam=sizeof (test)/sizeof(test[0]);//Recupera la dimension de la matriz que es ,6 en este caso
- //inicializaTabla((int*)test);//Decido Re-inicializar la matriz test ,pero solo el cuadrado 3x3 con numeros aleatorios
- //Mostrar la matriz antes de ser resuelta ...
- mostrarMatriz((int*)test,tam,tam);
- //Resuelve el array ,los numeros negativos seleccionan la operacion
- for (int fila=0;fila<tam;fila++){
- for (int col=0;col<tam;col++){
- if (test[fila][col]==-1){//R1 Linea
- test[fila][col] = sumaFila((int*)test,tam,fila,col);
- }
- if (test[fila][col]==-2){//R1 Columna
- test[fila][col] = sumaColumna((int*)test,tam,col,fila);
- }
- if (test[fila][col]==-3){//R1+R2
- test[fila][col] = sumaFila((int*)test,tam,fila,col)+sumaColumna((int*)test,6,col,fila);
- }
- if (test[fila][col]==-4){//Las dos ultimas de R1 et R2 columna
- test[fila][col] = sumaColumna((int*)test,tam,col,fila,fila-2);
- }
- if (test[fila][col]==-5){//Las dos ultimas de R1 et R2 fila
- test[fila][col] = sumaFila((int*)test,tam,fila,col,col-2);
- }
- if (test[fila][col]==-6){//Suma diagonal
- test[fila][col] =sumaDiagonal((int*)test);
- }
- }
- }
- //Mostrar la matriz
- mostrarMatriz((int*)test,tam,tam);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement