Ayuda urgente en c.

-
Hola,

tengo un problema al imprimir la matriz me sale dos números iguales, no debe ser así solo se que tal ves sea las variables "p" y "a" causan el problema. El programa trata de un rompecabezas de matriz de 4*4 los elementos de la matriz va desde el 1 al 15, y el ultimo elemento debe ser 0 y con ese cero desordenar la matriz y luego que el jugador ordene la matriz.
Normalmente el numero que se repite es el 4.
|1||2||3||4|
|5||6||7||8|
|9||10||11||12|
|4||14||15||0|
pero asi debe quedar.
|1||2||3||4|
|5||6||7||8|
|9||10||11||12|
|13||14||15||0|
El codigo es este.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int mat[4][4];
int h,c,b,p,a;
void main ()
{
int x,z,e;
srand(time(NULL));
for (x= 1; x<=4; x++)
{
for (z= 1; z<=4; z++)
{
e=e+1;
mat[x][z]=e;
if (e==16)
{
mat[x][z]=0;
}
}
}
/*----------------------------------*/

for (b=0; b<3; b++)
{
for (x=1; x<=4; x++)
{
for (z=1; z<=4; z++)
{
if (mat[x][z]==0)
{
p=x;
a=z;
}
}
}

/*----------------------------------*/
if (p==4 && a==4)
{
c=rand()%2+1;
if (c==1)
{
int intercambio1();
}
else
{
intercambio2();
}
}
if (p>1 && p<4 && a<4 && a>1)
{
c=rand()%4+1;
switch(c)
{
case 4:
intercambio4();
break;
case 3:
intercambio3();
break;
case 2:
intercambio2();
break;
case 1:
intercambio1();
break;
default:
printf("ERROR if1\n");
break;
}
}
if (p==4 && a>1 && a<4)
{
c=rand()%3+1;
switch(c)
{
case 3:
intercambio3();
break;
case 2:
intercambio2();
break;
case 1:
intercambio1();
break;
default:
printf("ERROR if2\n");
break;
}
}
if (p==1 && a>1 && a<4)
{
c=rand()%3+1;
switch(c)
{
case 3:
intercambio3();
break;
case 2:
intercambio4();
break;
case 1:
intercambio1();
break;
default:
printf("ERROR if3\n");
break;
}
}
if (p>1 && p<4 && a==1)
{
c=rand()%3+1;
switch(c)
{
case 3:
intercambio2();
break;
case 2:
intercambio3();
break;
case 1:
intercambio4();
break;
default:
printf("ERRORf4\n");
break;
}
}
if (p>1 && p<4 && a==4)
{
c=rand()%3+1;
switch(c)
{
case 3:
intercambio4();
break;
case 2:
intercambio2();
break;
case 1:
intercambio1();
break;
default:
printf("ERRORf5\n");
break;
}
}
if (p==1 && a==1)
{
c=rand()%2+1;
switch(c)
{
case 2:
intercambio3();
break;
case 1:
intercambio4();
break;
default:
printf("ERRORf6\n");
break;
}
}
if (p==1 && a==4)
{
c=rand()%2+1;
switch(c)
{
case 2:
intercambio1();
break;
case 1:
intercambio4();
break;
default:
printf("ERRORf7\n");
break;
}
}
if (p==4 && a==1)
{
c=rand()%2+1;
switch(c)
{
case 2:
intercambio3();
break;
case 1:
intercambio2();
break;
default:
printf("ERRORf8\n");
break;
}
}
}
/*----------------------------------*/
for (x=1;x<=4;x++)
{
for (z=1;z<=4;z++)
{
printf ("|%i|",mat[x][z]);
}
printf("\n");
}

}
/*----------------------------------*/
void intercambio1()
{
int aux;
aux=mat[p][a-1];
mat[p][a-1]=mat[p][a];
mat[p][a]=aux;
}
void intercambio2()
{
int aux;
aux=mat[p-1][a];
mat[p-1][a]=mat[p][a];
mat[p][a]=aux;
}
void intercambio3()
{
int aux;
aux=mat[p][a+1];
mat[p][a+1]=mat[p][a];
mat[p][a]=aux;
}
void intercambio4()
{
int aux;
aux=mat[p+1][a];
mat[p+1][a]=mat[p][a];
mat[p][a]=aux;
}
Ver más 

1 respuesta

Publicaciones
205
Fecha de inscripción
miércoles, 10 de enero de 2018
Estatus
Miembro
Última intervención
sábado, 19 de octubre de 2019
13
0
Gracias
ahmm si pasamos por alto que no estas declarando las funciones void

no me gusta que estés leyendo o asignar un valor una matriz 4x4 mal

para leer/asignar un valor una matriz de N filas o/y columnas ,

se lee de 0 a N-1

y no de 1 a N

así que primero modifica los FOR que en el que lees la matriz

y basicamente podria ser la solucion a tu problema

Saludos
Comenta la respuesta de misterdekus