Ayuda urgente en c.

Cerrado
-
Message postés
465
Date d'inscription
miércoles, 10 de enero de 2018
Estatus
Miembro
Última intervención
jueves, 19 de agosto de 2021
-
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;
}

1 respuesta

Message postés
465
Date d'inscription
miércoles, 10 de enero de 2018
Estatus
Miembro
Última intervención
jueves, 19 de agosto de 2021
114
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