Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - hackersanfe

#1
Lo sigo intentando y nada :( solo dime, asi esta bien para que te almacene los valores de la primera fila en un vector verdad?
   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...
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;
}

#2
Cita de: CalgaryCorpus en  5 Diciembre 2018, 02:05 AM
Me gusto la solucion propuesta.

Mientras la miraba se me ocurrio otra, pero es definitivamente mas complicada, asi que la presento solo para incluir una idea adicional.

Si uno mantiene adicionalmente algun valor para cada columna / fila (por ejemplo la suma de los elementos), se puede descartar rapidamente si una fila es candidata a ser igual a otra.

 1   2   3  4
 4   5   6  8
 7   8   9  0
[12  15  18  12]  <-- sumas



Solo es necesario comparar la 1a y 4ta columna.
Lo que significa para el codigo propuesto es hacer 1 comparacion que controle si hay que hacer el ciclo for de la linea 11 o no.

La modificacion es, en la linea 10, cambiar la asignacion y hacer:
            iguales = (sumas[i] == sumas[m]);

El arreglo sumas se crea en generaMat.


Claro, es una implementacion un poco mas complicada en mi opinion, pero tambien seria valida.
Ahora estoy intentando hacer que me funcione el modelo que paso el compañero para que haga lo mismo con las filas, de momento no lo estoy consiguiendo, esto es lo que he hecho:
int compararFilas(int mat[N][M])
{
   int iguales=0,i,j,m,n;
   int filaAComparar[N];
   for(i=0; i<N-1&&!iguales; i++)
   {
       for(j=0; j<M; j++)
           filaAComparar[j]=mat[j][i];

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


   }
   return iguales;
}
#3
Muchisimas gracias, la verdad es que aunque exista otra manera mas eficiente de hacerla, esa me parece clarisima. Gracias de verdad. ;-)
#4
Cita de: YreX-DwX en  4 Diciembre 2018, 19:14 PM
Especifica qué parte es la que no sabes implementar... si es desde meter los valores en la matriz o comparar dos filas o columnas...
Y si tienes algo de código hecho ponlo también en el mensaje para que lo veamos. :-X
Ya está compañero.
Especificamente lo que no se implementar es la comparacion de la primera columna con la segunda, la primera con la tercera, la primera con la cuarta... hasta que se hayan comparado todas con todas. La funcion que aparece ahi de columnas iguales no me funciona por cierto, es lo que intente yo pero nada.
#5
Buenas tardes, estoy intentando realizar esta función en C, sin embargo no se me ocurre la manera correcta de llegar a ella. Concretamente mi ejercicio es:

"Escribe un programa, que en primer lugar, genere una matriz de NxM elementos enteros con números aleatorios comprendidos entre 1 y 20 (N y M constantes enteras globales).
El programa además de generar la matriz, deberá escribir sus valores y escribir un mensaje indicando si hay o no dos columnas iguales en la matriz, en caso de no haberlas, solo en ese caso, deberá escribir un mensaje indicando si hay o no dos filas iguales en la matriz. Si no hubiera ni dos filas iguales, ni dos columnas iguales escribirá un mensaje indicándolo.
También escribirá el valor máximo y la fila y columna en la que se encuentra la primera aparición del valor máximo (haciendo un recorrido por filas)."

Se trata de una función de NxM.
Si me podeis dar una idea de como seria el hacerla me ayudariais un monton. Porque en mi cabeza parece facil (y seguro que lo es) pero no llego a ello... un saludo y gracias por cualquier ayuda recibida.
#include<stdlib.h>
#include<time.h>
#include <stdio.h>
#define N 3
#define M 6

void escribirMat (int mat[N][M]);
void generaMat (int mat[N][M]);
void matrizMaxPos (int mat[N][M], int *max, int *fil, int *col);
int columnasIguales(int mat[N][M]);


int main()
{
   int mat[N][M];
   int *max=0,*fila=0,*columna=0;
   generaMat(mat);
   escribirMat(mat);
   matrizMaxPos(mat,&max,&fila,&columna);
   printf("\nMaximo: %d y aparece por primera vez en la fila %d y columna %d.\n",max,fila,columna);
   if(columnasIguales(mat)==1){
       printf("\nHay al menos dos columnas iguales.\n");
   }
   else printf("\nNinguna columna igual.\n");
   return 0;
}


void generaMat(int mat[N][M])
{
   int f,c;
   srand(time(NULL));
   for(f=0; f<N; f++)
       for(c=0; c<M; c++)
           mat[f][c]=rand()%20+1;
}

void matrizMaxPos (int mat[N][M], int *max, int *fil, int *col){
   int i,j,enc=0;
   for(i=0;i<N;i++){
       for(j=0;j<M;j++){
           if(*max<mat[i][j])
               *max=mat[i][j];
       }
   }
   for(i=0;i<N;i++){
       for(j=0;j<M;j++){
           if(*max==mat[i][j]&&!enc){
               *fil=i+1;
               *col=j+1;
               enc=1;
           }
       }
   }
}

int columnasIguales(int mat[N][M]){
   int i=0,j=0,iguales=0;
   if((mat[i][j]==mat[i][j+1]&&i<N-1&&j<M-1)&&(mat[i+1][j]==mat[i+1][j+1]&&i<N-1&&j<M-1)&&(mat[i+2][j]==mat[i+2][j+1]&&i<N-1&&j<M-1))
       iguales=1;
   else{
       i++;
       j++;
   }
   return iguales;
}

void escribirMat (int mat[N][M]){
   int i,j;
   for(i=0;i<N;i++){
       for(j=0;j<M;j++){
           printf("%d ", mat[i][j]);
       }
       printf("\n");
   }
}
#6
Cita de: engel lex en 23 Diciembre 2017, 19:44 PM
muestra lo que hiciste y te podemos explicar los errores

en general, quitar el namespace, cambiar iostream por stdio.h, y cambiar los cout por printf
Al final he cambiado el asunto del tema porque me estaba generando muchos problemas y al tener dudas de si mi programa estaba bien,encontre ese, pero muchas gracias por tu ayuda  :)
#7
Programación C/C++ / Tema para borrar
23 Diciembre 2017, 19:32 PM
...