Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JavierScars en 2 Enero 2016, 21:15 pm



Título: no puedo imprimir un array bidimensional completo [RESUELTO]
Publicado por: JavierScars en 2 Enero 2016, 21:15 pm
(http://)Ayuda trató de hacer un programa que me permita "dibujar " con "x" sobre ceros en una terminal, pero se supone que el plano debe ser de 50x50 el programa funciona perfectamente con un tamaño de 10 y hasta de 15 pero números más altos para el plano no me los acepta.

Estoy usando 2 #define para el tamaño y dos for para imprimirlo.

Sistema operativo lubuntu y terminal LXTerminal no se si eso tenga algo que ver.

Disculpen si ni colocó el código es que estoy desde el teléfono.

ACTUALIZACIÓN:
Probé el código en windows y funciona perfectamente...  :-\ no comprendo que pasa pero al menos ya se que no es mi código  ;-)

ACTUALIZACIÓN... de nuevo:
El problema se soluciono solo  :P... reinicie la pc y listo   :xD ;-)


Título: Re: no puedo imprimir un array bidimensional completo
Publicado por: MAFUS en 2 Enero 2016, 21:35 pm
Cuando puedas sube el código. :)


Título: Re: no puedo imprimir un array bidimensional completo
Publicado por: JavierScars en 2 Enero 2016, 21:51 pm
No estoy seguro de que el problema este en el codigo
Código:
#include <stdio.h>
#define alto 50
#define ancho 50
void escribir(int, int, int);
void imprimir();

int estLapiz = 0; //El estado del lapiz 0 para levantado 1 para escribir;
int dirlapiz = 0; // Direccion del lapiz para evitar confuciones como las manecillas del reloj
//0 para arriba, 3 para la derecha, 6 para abajo, 9 para la izquierda.

int posLapiz [2] = {0}; /* la posicion del lapiz posLapiz[0] para la coordenada X y posLapiz[1] para la coordenada y */
int plano[alto][ancho] = {0};
int main(void)
{
int op = 0;
int pasos;
while (op != 9)
{
printf("introduzca una opcion");
printf("\n1) Levantar lapiz\n2) Escribir \n3) Girar a la derecha \n4) Girar a la izquierda \n5) Escribir \n6) Imprimir \n9) SALIR\n");
scanf("%d", &op);
system("clear");

switch (op)
{
case 1 :
estLapiz = 0;
break;

case 2 :
estLapiz = 1;
break;

case 3 :
if (dirlapiz == 9)
dirlapiz = 0;
else
dirlapiz += 3;
break;

case 4 :
if (dirlapiz == 0)
dirlapiz = 9;
else
dirlapiz -= 3;
break;

case 5 :
printf("introduzca la cantidad de pasos que desea dar: ");
scanf("%d", &pasos);
escribir(estLapiz, dirlapiz, pasos);
break;

case 6 :
imprimir();
break;

case 7 :
printf("estado %d, direccion %d, pos x %d, pos y %d \n", estLapiz, dirlapiz, posLapiz[0], posLapiz[1] );

case 9 : printf("Gracias por usar el programa! \n");
break;

default : printf("Introdujo una opcion erronea por favor seleccione una correcta\n");
break;
}
}
return 0;
}

void escribir (int estLapiz, int dirlapiz, int pasos)
{
int i;

if (dirlapiz < 0)
dirlapiz *= (-1);

switch(dirlapiz)
{
case 0 :
while(pasos > 0)
{
if (posLapiz[1] > 0)
{
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
posLapiz[1]-=1;
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
}
pasos -= 1;
}
break;

case 3 :
while(pasos > 0)
{
if (posLapiz[0] < (ancho - 1))
{
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
posLapiz[0] += 1;
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
}
pasos -= 1;
}
break;

case 6 :
while(pasos > 0)
{
if (posLapiz[1] < (alto-1))
{
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
posLapiz[1]+=1;
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
}
pasos -= 1;
}
break;

case 9 :
while(pasos > 0)
{
if (posLapiz[0] > 0)
{
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
posLapiz[0] -= 1;
plano[posLapiz[0]][posLapiz[1]] = estLapiz;
}
pasos -= 1;
}
break;
}  
}

void imprimir ()
{
int i, j;

for (i=0; i < ancho; i++)
{
for (j=0; j < alto; j++ )
{
if(plano[j][i] == 0)
printf(" ");
else
{
if (posLapiz[0] == j && posLapiz[1] == i )
printf("I ");
else
printf("x ");
}

}
printf("\n");
}
}