elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  error logico c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error logico c  (Leído 1,228 veces)
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
error logico c
« en: 13 Diciembre 2016, 00:15 am »

hola, necesito ayuda para entender el error de mi código, es un bus caminas versión ms-dos en la funcion comprobar() que se ejecuta en la funcion gameLoop() no me reconoce las coordenadas correctas y me da otro valor.

gracias de antemano.


PD. el codigo esta preparado en mi modo debug para cundo lo ejjecuten sea mas facil de entender

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <windows.h>
  4.  
  5. int numero;
  6.  
  7. void gotoxy(int x,int y);
  8. int menu();
  9. void llenarTablero(int tablero[][numero], int num);
  10. void dibujarTablero(int tablero[][numero], int num);
  11. int comprbacion(int tablero[][numero], int corx, int cory);
  12. void gameLoop(int tablero[][numero], int num);
  13. int gameOver(int tablero[][numero], int num);
  14. void borrar(int num);
  15. void comodin(int tablero[][numero], int num, int corx, int cory);
  16.  
  17. int main(){
  18.  
  19.    int op;
  20.  
  21.    do{
  22.        op = menu();
  23.  
  24.        switch(op){
  25.            case 1:
  26.            numero = 10;
  27.            break;
  28.            case 2:
  29.            numero = 15;
  30.            break;
  31.            case 3:
  32.            numero = 20;
  33.            break;
  34.        }
  35.  
  36.        if(op != 0){
  37.            int tablero[numero][numero];
  38.  
  39.            llenarTablero(tablero,numero);
  40.            dibujarTablero(tablero,numero);
  41.            gameLoop(tablero,numero);
  42.        }
  43.  
  44.    }while(op != 0);
  45.  
  46.    return 0;
  47. }
  48.  
  49. void gotoxy(int x,int y){
  50.      HANDLE hcon;
  51.      hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  52.      COORD dwPos;
  53.      dwPos.X = x;
  54.      dwPos.Y= y;
  55.      SetConsoleCursorPosition(hcon,dwPos);
  56. }
  57.  
  58. int menu(){
  59.    system("cls");
  60.    int op;
  61.  
  62.     printf("\t\t\tBusca minas versión ms-dos\n\n");
  63.  
  64.    do{
  65.        printf("1)facil\n");
  66.        printf("2)medio\n");
  67.        printf("3)dificil\n");
  68.        printf("0)salir\n");
  69.        printf("\nOpcion: ");
  70.        scanf("%i", &op);
  71.        if(op<0 || op>3)
  72.            printf("EL numero ingresado es incorecto\n");
  73.    }while(op<0 || op>3);
  74.  
  75.    return op;
  76. }
  77.  
  78. void llenarTablero(int tablero[][numero], int num){
  79.  
  80.    srand(time(NULL));
  81.    int i, j;
  82.  
  83.    for(i=0; i<num; i++){
  84.        for(j=0; j<num; j++){
  85.                tablero[i][j] = rand()%2;
  86.        }
  87.    }
  88.  
  89. }
  90.  
  91. void dibujarTablero(int tablero[][numero], int num){
  92.  
  93.    int i, j;
  94.  
  95.    system("cls");
  96.  
  97.    for(i=0; i<num; i++){
  98.        for(j=0; j<num; j++){
  99.            //printf("%c",35);
  100.            printf("%d",tablero[i][j]);//para hacer debug
  101.        }
  102.        printf("\n");
  103.    }
  104. }
  105.  
  106. int comprbacion(int tablero[][numero], int corx, int cory){
  107.    if(tablero[corx][cory] == 1){
  108.        gotoxy(25,2);//para hacer debug
  109.        printf("tablrero[%d][%d] = %d", corx, cory, tablero[corx][cory]);//para hacer debug
  110.        gotoxy(0,numero+3);//para hacer debug
  111.        tablero[corx][cory] = 3;
  112.        getch();//para hacer debug
  113.        return 1;
  114.    }
  115. }
  116.  
  117. void gameLoop(int tablero[][numero], int num){
  118.    int corx, cory, fin, vidas = 3;
  119.    int i, j;
  120.  
  121.    do{
  122.        borrar(num);
  123.        printf("escriba una cordenado");
  124.        printf("cordenada x: ");
  125.        scanf("%d", &corx);
  126.        printf("cordenada y: ");
  127.        scanf("%d", &cory);
  128.  
  129.        if(corx>=num || cory>=num){
  130.            borrar(num);
  131.            printf("las cordenadas son incorrectas");
  132.        }else if(comprbacion(tablero, corx, cory) == 1){
  133.            borrar(num);
  134.            printf("As asertado te quedan %d vidas", vidas);
  135.            gotoxy(corx,cory);
  136.            printf("X");
  137.            //sirve para buscar espacios libres vecionos y desbloquearlos
  138.            comodin(tablero, num, corx, cory);
  139.  
  140.        }else if(comprbacion(tablero, corx, cory) == 0){
  141.            borrar(num);
  142.            vidas--;
  143.            printf("Era una bomba te quedan %d vidas", vidas);
  144.            gotoxy(corx,cory);
  145.            printf("O");
  146.        }
  147.        //fin = gameOver(tablero, num);
  148.  
  149.        Sleep(2500);
  150.    }while(vidas !=0);
  151. }
  152.  
  153. void borrar(int num){
  154.    int i;
  155.    gotoxy(0,num+3);
  156.    for(i=0; i<5; i++){
  157.        printf("                                            \n");
  158.    }
  159.    gotoxy(0,num+3);
  160. }
  161.  
  162. void comodin(int tablero[][numero], int num, int corx, int cory){
  163.    int i,j;
  164.  
  165.    for(i=corx; i<num; i++){
  166.        for(j=cory; j<num; j++){
  167.            if(tablero[i][j] == 0)
  168.                j=num;
  169.            else if(tablero[i][j] == 1){
  170.                gotoxy(i,j);
  171.                printf("X");
  172.            }
  173.            getch();//para hacer debug
  174.        }
  175.  
  176.        for(j=cory; j>0; j--){
  177.            if(tablero[i][j] == 0)
  178.                j=0;
  179.            else if(tablero[i][j] == 1){
  180.                gotoxy(i,j);
  181.                printf("X");
  182.            }
  183.            getch();//para hacer debug
  184.        }
  185.  
  186.        if(tablero[i][j] == 0)
  187.                i=num;
  188.    }
  189.  
  190.    for(i=corx; i>0; i--){
  191.        for(j=cory; j>0; j--){
  192.            if(tablero[i][j] == 0)
  193.                j=0;
  194.            else if(tablero[i][j] == 1){
  195.                gotoxy(i,j);
  196.                printf("X");
  197.            }
  198.            getch();//para hacer debug
  199.        }
  200.  
  201.        for(j=cory; j<num; j++){
  202.            if(tablero[i][j] == 0)
  203.                j=num;
  204.            else if(tablero[i][j] == 1){
  205.                gotoxy(i,j);
  206.                printf("X");
  207.            }
  208.            getch();//para hacer debug
  209.        }
  210.  
  211.        if(tablero[i][j] == 0)
  212.                i=0;
  213.    }
  214.  
  215. }
  216.  
  217. int gameOver(int tablero[][numero], int num){
  218.    int i, j;
  219.    for(i=0; i<num; i++){
  220.        for(j=0; j<num; j++){
  221.            if(tablero[i][j] == 1)
  222.                return 1;
  223.            else
  224.                return 0;
  225.        }
  226.    }
  227. }
  228.  
  229.  


« Última modificación: 13 Diciembre 2016, 00:16 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: error logico c
« Respuesta #1 en: 13 Diciembre 2016, 00:22 am »

Citar
PD. el codigo esta preparado en mi modo debug para cundo lo ejjecuten sea mas facil de entender

probablemente nadie lo compile... requiere tiempo y trabajo... es recomendable que indiques exactamente donde está el error, que esperas, que resulta...

me imagino que "comprobar()" es "comprbacion(int tablero[][numero], int corx, int cory)" (te falta una o comprobacion) a demás no retorna valor si no entra al if, lo que puede generar resultados inesperados (no asumas que si no escribes el return, return será 0... nunca asúmas en C o C++ que algo vale 0, si no se lo has colocado tu mismo)



« Última modificación: 13 Diciembre 2016, 00:24 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: error logico c
« Respuesta #2 en: 13 Diciembre 2016, 00:38 am »

x ejemplo en este caso escrivi en la cordenada 2,0 que es un uno y despus me la da como 0



MOD: Imagen adaptada a lo permitido.
« Última modificación: 13 Diciembre 2016, 00:42 am por MCKSys Argentina » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: error logico c
« Respuesta #3 en: 13 Diciembre 2016, 00:45 am »

tu tablero está girado 90º

lo imprimiste mal

Código
  1. void dibujarTablero(int tablero[][numero], int num){
  2.  
  3.    int i, j;
  4.  
  5.    system("cls");
  6.  
  7.    for(i=0; i<num; i++){
  8.        for(j=0; j<num; j++){
  9.            //printf("%c",35);
  10.            printf("%d",tablero[i][j]);//para hacer debug
  11.        }
  12.        printf("\n");
  13.    }
  14. }



en ese codigo "j" es x (acuerdate que el compilador imprime a la derecha del anterior) cuando j termina, hace un salto de linea y va con el siguiente "i" (y) por consecuencia siempre que uses printf, el ciclo interno es X

siempre es util mentener la uniformidad

Código
  1. void dibujarTablero(int tablero[][numero], int num){
  2.  
  3.    int x, y;
  4.  
  5.    system("cls");
  6.  
  7.    for(y=0; y<num; y++){
  8.        for(x=0; x<num; x++){
  9.            //printf("%c",35);
  10.            printf("%d",tablero[x][y]);//para hacer debug
  11.        }
  12.        printf("\n");
  13.    }
  14. }

En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: error logico c
« Respuesta #4 en: 13 Diciembre 2016, 00:57 am »

gracias ya funciona bien  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nero y CD de musica,NO es logico
Software
Layyer 4 1,143 Último mensaje 12 Junio 2003, 16:14 pm
por kåhjî£
ayuda con este programa, tengo un error logico creo
Programación C/C++
TaLaP0 XoR BiT 2 1,397 Último mensaje 3 Diciembre 2012, 04:06 am
por TaLaP0 XoR BiT
error logico ayuda con este programa
Programación C/C++
MellaSystems 8 1,953 Último mensaje 23 Febrero 2015, 06:19 am
por MellaSystems
Error lógico cuando compilo ejercicio - CONSULTA
Programación C/C++
Cero++ 6 897 Último mensaje 11 Diciembre 2018, 20:51 pm
por Cero++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines