-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Hola, tengo dudas de porque esta fallando el programa de prueba.
//a.out: 12.c:19: main: Assertion `sonAmigas(m1,3,m2,4)==1' failed.
// Aborted (core dumped)
#define COLS 4
int sonAmigas( int (m1[])[COLS], unsigned int fils1, int (m2[])[COLS], unsigned int fils2 );
int contiene( int v1[], int v2[], unsigned int dim);
int esAmiga( int (m1[])[COLS], unsigned int fils1, int (m2[])[COLS], unsigned int fils2);
int filaEnMatriz( int fil[], int (m[])[COLS], unsigned int fils);
int
main(void)
{
int m1[][COLS] = {{0,1,2,3}, {4,4,5,6}, {7,8,8,9}};
int m2[][COLS] = {{0,1,2,3}, {-3,7,8,9}, {-1,3,4,7}, {4,5,6,8}};
int m3[][COLS] = {{2,3,3,7}};
assert(sonAmigas(m1,3,m2,4)==1);
assert(sonAmigas(m1,1,m2,4)==1);
assert(sonAmigas(m1,2,m2,4)==1);
assert(sonAmigas(m1,2,m2,2)==0);
assert(sonAmigas(m2,4,m1,3)==2);
assert(sonAmigas(m1,3,m3,1)==0);
assert(sonAmigas(m3,1,m1,3)==0);
int res = sonAmigas(m1,3,m1,3);
assert(res==1 || res==2);
printf("OK !\n");
return 0;
}
int sonAmigas( int (m1[])[COLS], unsigned int fils1, int (m2[])[COLS], unsigned int fils2)
{
if(esAmiga(m1,fils1,m2,fils2))
{
return 1;
}
if(esAmiga(m2,fils2,m1,fils1))
{
return 2;
}
return 0;
}
int esAmiga( int (m1[])[COLS], unsigned int fils1, int (m2[])[COLS], unsigned int fils2)
{
for(int i = 0; i < fils1; i++) // recorro las filas de m1
{
if(!filaEnMatriz(m1[i], m2,fils2)) // si alguna de las filas de m1 no esta en m2 entonces no es fila amiga
{
return false;
}
}
return true;
}
int filaEnMatriz(int fil[], int (m[])[COLS], unsigned int fils)
{
for(int i = 0; i < fils; i++)
{
if(contiene(fil,m[i],fils))
{
return true;
}
}
return false;
}
int contiene( int v1[], int v2[], unsigned int dim)
{
int i,j; // indices de lectura para recorrer los dos vectores
for( i = 0; i < dim; i++)
{
int found = false; // asumo que no encontre el elemento todavia
for( j = 0; j < dim && !found; j++) // mientras no haya llegado al final del segundo arreglo y no encontre j, sigo incrementando
{
if(v1[i] == v2[j]) // si son iguales marco que encontre el elemento
{
found = true;
}
if(!found) // si no encontre el elemento en el segundo arreglo aborta el programa ya que las filas no estan incluidas
{
return 0;
}
}
}
return 1;
}Metadata
Metadata
Assignees
Labels
No labels