elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Función que diga si dos columnas/filas de una matriz son iguales.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Función que diga si dos columnas/filas de una matriz son iguales.  (Leído 6,596 veces)
hackersanfe

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Función que diga si dos columnas/filas de una matriz son iguales.
« Respuesta #10 en: 8 Diciembre 2018, 11:32 am »

Lo sigo intentando y nada :( solo dime, asi esta bien para que te almacene los valores de la primera fila en un vector verdad?
Código:
   for(i=0;i<N&&!iguales;i++)
        for(j=0;j<M;j++)
            filaAComparar[j]=mat[i][j];
Es que no se que puede ser lo que escriba mal porque en mi cabeza pienso que esta bien
Edito: parece que ahora ya lo voy consiguiendo, os informo
Edito2: conseguido! muchisimas gracias por la ayuda, nada mejor que hacerse el programa a papel y boli... jeje
Edito3: Pues no, me funciona en algunos casos y otros no, no se que puedo tener mal...
Código:
int compararFilas(int mat[N][M],int v[M])
{
    int iguales=0,i,j,m,n;
    for(i=0; i<N&&!iguales; i++)
    {
        for(j=0; j<M; j++)
        {
            v[j]=mat[i][j];
        }

        for(m=0; m<M&&!iguales; m++)
        {
            iguales=1;
            for(n=i+1; n<N&&iguales; n++)
            {
                if(mat[n][m]!=v[m])
                    iguales=0;
            }
        }
    }
    return iguales;
}


« Última modificación: 8 Diciembre 2018, 13:57 pm por hackersanfe » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Función que diga si dos columnas/filas de una matriz son iguales.
« Respuesta #11 en: 8 Diciembre 2018, 15:04 pm »

Hay que darle la vuelta a la segunda parte:
Código
  1. int compararFilas(matriz[FILAS][COLUMNAS]){
  2.    int filaAComparar[COLUMNAS];
  3.    int iguales = 0;
  4.    for(int i = 0; i < FILAS - 1 && !iguales; i++){
  5.        for(int j = 0; j < COLUMNAS; j++)
  6.            filaAComparar[j] = matriz[i][j];
  7.  
  8.        for(int m = i+1; m < FILAS && !iguales; m++){
  9.            iguales = 1;
  10.            for(int n = 0; n < COLUMNAS && iguales; n++)
  11.                if(filaAComparar[n] != matriz[m][n])
  12.                    iguales = 0;
  13.        }
  14.    }
  15.    return iguales;
  16. }

Si no me he equivocado esa función debería funcionar. Primero, la <i> tiene que ir hasta hasta la penúltima fila ya que no tiene sentido comparar la última con la siguiente (porque no hay siguiente).
Además el array auxiliar no hace falta pasarlo como parámetro, puede ser una variable local que "desaparezca" en cuanto acabe la función.
En la parte final el bucle exterior empieza en <i+1> y el interior en 0. Esto se traduce como: "para cada fila posterior a la fila <i> recorremos toda la fila". Si le das la vuelta fíjate que en el <if> usas <v[m]> y <m> en tu caso no va de 0 a COLUMNAS-1. En tu caso <m> se queda con un valor fijo y lo que se mueve es la <n>. Siempre varía más veces el valor del bucle interior que el exterior. Suerte. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Función que diga si dos columnas/filas de una matriz son iguales.
« Respuesta #12 en: 8 Diciembre 2018, 17:40 pm »

Supongo que con este te irá bien.
Va comprobando desde la primera hasta la penúltima columna si las siguientes son iguales a ellas. En cuánto detecta que dos elementos no son iguales va no pierde más tiempo y va a buscar la siguiente columna. Si detecta que dos columnas son iguales se detiene e informa de ello.
Hay que usar stdbool, pero se puede cambiar el bool por int y true y false por 1 y 0 respectivamente.

Código
  1. bool columnas_iguales(int matriz[][COLUMNAS]) {
  2.    bool retval = false;
  3.  
  4.    for(int i=0; !retval && i<COLUMNAS-1; ++i) {
  5.        for(int j=i+1; !retval && j<COLUMNAS; ++j) {
  6.            int m;
  7.            for(m=0; m<FILAS; ++m) {
  8.                if(matriz[m][i]!=matriz[m][j])
  9.                    break;
  10.            }
  11.            if(m==FILAS)
  12.                retval = true;
  13.        }
  14.    }
  15.  
  16.    return retval;
  17. }
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Función que diga si dos columnas/filas de una matriz son iguales.
« Respuesta #13 en: 8 Diciembre 2018, 22:06 pm »

Supongo que con este te irá bien.
Va comprobando desde la primera hasta la penúltima columna si las siguientes son iguales a ellas. En cuánto detecta que dos elementos no son iguales va no pierde más tiempo y va a buscar la siguiente columna. Si detecta que dos columnas son iguales se detiene e informa de ello.
Hay que usar stdbool, pero se puede cambiar el bool por int y true y false por 1 y 0 respectivamente.

Código
  1. bool columnas_iguales(int matriz[][COLUMNAS]) {
  2.    bool retval = false;
  3.  
  4.    for(int i=0; !retval && i<COLUMNAS-1; ++i) {
  5.        for(int j=i+1; !retval && j<COLUMNAS; ++j) {
  6.            int m;
  7.            for(m=0; m<FILAS; ++m) {
  8.                if(matriz[m][i]!=matriz[m][j])
  9.                    break;
  10.            }
  11.            if(m==FILAS)
  12.                retval = true;
  13.        }
  14.    }
  15.  
  16.    return retval;
  17. }

Por lo que yo tengo entendido no es muy recomendable usar instrucciones como <break> (excepto en un <switch>), <goto>, etc. Entonces se puede conseguir lo mismo usando la propia variable <retval>. Supones que son iguales y cuando dos valores no coincidan, dejan de ser iguales. Quedaría así:
Código
  1. bool columnas_iguales(int matriz[][COLUMNAS]) {
  2.    bool retval = false;
  3.    for(int i=0; !retval && i<COLUMNAS-1; ++i) {
  4.        for(int j=i+1; !retval && j<COLUMNAS; ++j) {
  5.            retval = true;
  6.            for(int m=0; retval && m<FILAS; ++m)
  7.                if(matriz[m][i]!=matriz[m][j])
  8.                    retval = false;
  9.    }
  10.    return retval;
  11. }
A esto me refería cuando al principio le comenté a Hackersanfe que intentará hacerlo sin el array auxiliar.

PD: No sabía que para usar el tipo de dato <bool> en C se podía hacer con <stdbool>. Yo creaba una enumeración para poder usarlo. Algo así:
Código
  1. typedef enum {false, true} bool;
« Última modificación: 8 Diciembre 2018, 22:08 pm por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer matriz por filas y almacenarla por columnas
Programación C/C++
mariyop 1 6,062 Último mensaje 28 Noviembre 2011, 17:50 pm
por rir3760
Obtener size() de columnas y filas de una matriz
Programación C/C++
Stone20 1 2,862 Último mensaje 15 Abril 2012, 13:15 pm
por Stone20
Suma de filas y columnas de una matriz en C
Programación C/C++
estudiante_1 1 20,381 Último mensaje 30 Diciembre 2015, 22:19 pm
por MAFUS
Suma de filas y columnas de una matriz
.NET (C#, VB.NET, ASP)
Ahinoam 2 8,700 Último mensaje 15 Diciembre 2016, 23:59 pm
por Ahinoam
Quitar filas y columnas de una matriz en c
Programación C/C++
victiman 0 4,061 Último mensaje 6 Junio 2017, 22:40 pm
por victiman
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines