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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa de gráficos de tortuga
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa de gráficos de tortuga  (Leído 3,692 veces)
abra2004

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Programa de gráficos de tortuga
« en: 30 Octubre 2012, 06:00 am »

Hola, gracias por admitirme en el foro, tengo el siguente problema:
Estoy haciendo un ejercicio del libro de Deitel "Como programar en C/C++"
El ejercicio trata de hacer gráficos de tortuga, el problema lo tengo al hacer una función para introducir los comandos que se van a realizar, los comandos van en forma de número y el problema que tengo es que al introducir el comando '5' debo poner 5 una coma y el numero de movimientos, es decir que este comando sirve para mover la tortuga x movimientos por ejemplo si pongo "5,9" la tortuga se moverá 9 casillas, mi problema es que no entiendo como declarar el arreglo o como hacer que simplemente ignore la coma, ¿alguien sabe como podría solucionarlo? Gracias.

Código
  1. void guarda_comandos(int comands[COMANDOS]){
  2.    int i, x;
  3.  
  4.    for (x = 0; i != 9 && x < COMANDOS; x++) {
  5.        printf("Introduzca el próximo comando: ");
  6.        scanf("%d", &i);
  7.        comands[x] = i;
  8.    }
  9.    for (x = 0; x < COMANDOS && comands[x] != 0; x++) {
  10.        printf("%d", comands[x]);
  11.    }
  12. }


En línea

abra2004

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Programa de gráficos de tortuga
« Respuesta #1 en: 31 Octubre 2012, 04:33 am »

Bueno gracias por la ayuda  :¬¬ , de cualquier manera encontré el código como viene en el libro de soluciones aunque realmente no lo comprendo y estoy un poco frustrado porque mi compilador me da errores al ejecutarlo, utilizo "xcode".

Código
  1. #include <stdio.h>
  2. #define TRUE 1
  3. #define FALSE 0
  4. #define MAX 100 /* the maximum number of commands */
  5.  
  6. /* function prototypes */
  7. void getCommands( int commands[][ 2 ] );
  8. int turnRight( int d );
  9. int turnLeft( int d );
  10. void movePen( int down, int a[][ 50 ], int dir, int dist );
  11. void printArray( int a[][ 50 ] );
  12.  
  13. int main(int argc, const char * argv[])
  14. {
  15.    //Declaraciones
  16.    int floor[ 50 ][ 50 ] = { 0 };
  17.    int penDown = FALSE;
  18.    int command;
  19.    int direction = 0;
  20.    int commandArray[MAX][ 2 ] = {0};
  21.    int distance;
  22.    int count = 0;
  23.    //Fin Declaraciones
  24.  
  25.    getCommands( commandArray );
  26.    command = commandArray[ count ][ 0 ];
  27.  
  28.    while(command!=9){
  29.  
  30.        switch (command) {
  31.    case 2:
  32.        penDown = TRUE;
  33.        break; /* exit switch */
  34.    case 3:
  35.        direction = turnRight( direction );
  36.        break; /* exit switch */
  37.    case 4:
  38.        direction = turnLeft( direction );
  39.        break; /* exit switch */
  40.    case 5:
  41.        distance = commandArray[count][1];
  42.        movePen( penDown, floor, direction, distance);
  43.        break; /* exit switch */
  44.    case 6:
  45.        printf( "\nThe drawing is:\n\n" ); printArray( floor );
  46.        break; /* exit switch */
  47.        } /* end switch */
  48.    command = commandArray[ ++count ][ 0 ];
  49. } /* end while */
  50.    return 0;
  51. }/**************-FIN-DE-MAIN-***************/
  52. void getCommands( int commands[][2]) {
  53.    int i; /* counter */
  54.    int tempCommand; /* temporary command holder */
  55.  
  56.  
  57.    printf( "Enter command ( 9 to end input ): ");
  58.    scanf( "%d", &tempCommand );
  59.  
  60.    /* recieve commands until -9 or 100 commands perform action */
  61.    for(i=0;tempCommand!=9&&i<MAX;i++){ commands[ i ][ 0 ] = tempCommand;
  62.        /* ignore comma after 5 is entered */
  63.        if ( tempCommand == 5 ) {
  64.            scanf( ",%d", &commands[ i ][ 1 ] );
  65.        } /* end if */
  66.        printf( "Enter command ( 9 to end input ): " );
  67.        scanf( "%d", &tempCommand );
  68.    }
  69.    commands[ i ][ 0 ] = 9;
  70. }/*   FIN DE GET COMMANDS  */
  71. int turnRight( int d )
  72. {
  73.    return ++d > 3 ? 0 : d;
  74. }
  75. int turnLeft( int d ) {
  76.    return --d < 0 ? 3 : d;
  77. }
  78. void movePen( int down, int a[][ 50 ], int dir, int dist ) {
  79.    int i;
  80.    int j;
  81.    static int xPos = 0;
  82.    static int yPos = 0;
  83.  
  84.    /* determine which way to move pen */
  85.    switch(dir){
  86.        case 0:
  87.             for (j=1;j<=dist&&yPos+j<50;j++){
  88.                 if (down) {
  89.                a[xPos][yPos+j]=1;
  90.                 } /* end if */
  91.             }
  92.            yPos += j - 1;
  93.            break; /* exit switch */
  94.  
  95.        case 1: /* move down */
  96.    /* move dist spaces or until edge of floor */
  97.            for (i=1;i<=dist&&xPos+i<50;i++){
  98.                if (down) {
  99.                    a[xPos+i][yPos] =1;
  100.                }
  101.            }
  102.            xPos += i - 1;
  103.            break;
  104.  
  105.        case 2: /* move to the left */
  106.            for (j=1;j<=dist&&yPos-j>=0;j++){
  107.                if (down){
  108.                    a[xPos][yPos-j]=1;
  109.                } /* end if */
  110.            }
  111.            yPos -= j - 1;
  112.            break; /* exit switch */
  113.  
  114.        case 3: /* move up */
  115.            /* move dist spaces or until edge of floor */
  116.            for (i=1;i<=dist&&xPos-i>=0;i++){
  117.                if (down){
  118.                    a[xPos-i][yPos]=1;
  119.                } /* end if */
  120.            }
  121.            xPos -= i - 1;
  122.            break; /* exit switch */
  123.    }
  124. }
  125. void printArray( int a[][ 50 ] ) {
  126.    int i; /* counter */
  127.    int j; /* counter */
  128.    /* loop through array */
  129.    for ( i = 0; i < 50; i++ ) {
  130.        /* loop through array */
  131.        for ( j = 0; j < 50; j++ ) {
  132.            putchar( a[ i ][ j ] ? '*' : ' ' );
  133.        } /* end for */
  134.        putchar( '\n' );
  135.    } /* end for */
  136. }

El código está simplemente copiado y como dije anteriormente me gustaría saber como es que esto..
Código
  1. if ( tempCommand == 5 ) {
  2. scanf( ",%d", &commands[ i ][ 1 ] );
  3. } /* end if */
ignora la coma pues lee la variable tempCommand pero ésta fue previamente escaneada y ahí luego luego viene mi problema al meter el 5 y la coma, si alguien me pudiera ayudar se lo agradecería para avanzar en mi aprendizaje.


En línea

flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Programa de gráficos de tortuga
« Respuesta #2 en: 31 Octubre 2012, 05:10 am »

se tan poco de c pero cuando vi tu code original me di cuenta que un for no dejaba que funcione el otro....te iba a poner un ejemplo...pero bue esta bueno que lo leas y trates de entenderlo...me pongo a leer esta solucion y te digo
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Programa de gráficos de tortuga
« Respuesta #3 en: 31 Octubre 2012, 14:43 pm »

lo que pasa es que no se entiende si lo sacas de contexto
Código:
for(i=0;tempCommand!=9&&i<MAX;i++){ commands[ i ][ 0 ] = tempCommand;
        /* ignore comma after 5 is entered */
        if ( tempCommand == 5 ) {
            scanf( ",%d", &commands[ i ][ 1 ] );
        } /* end if */
        printf( "Enter command ( 9 to end input ): " );
        scanf( "%d", &tempCommand );
    }

se lee asi, mas o menos,  (haga un bucle iniciando en i=o ; con limite en la variable tempCommand distinta de 9 y con i menor a MAX ; si no entra en el limite sume uno a i ) mientras no cumpla esos limites hara lo siguiente la variable tempCommand se guarda en commands[ i ][ 0 ] (fijate que cada bucle hara que i suba en una.
el bucle no termina alli dice si  tempCommand es igual a 5 ingrese manualmente un decimal entero para que ocupe el lugar de la variable commands[ i ][ 0 ] o sea si es 5 meta el dato a mano que el bucle no lo hace, en cada bucle va a aparecer en pantalla si mete 9 sale del bucle,
El tema de la coma la soluciona porque la variable commands[ i ][ 1 ] es una matriz bidimensional
« Última modificación: 31 Octubre 2012, 14:47 pm por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Programa de gráficos de tortuga
« Respuesta #4 en: 31 Octubre 2012, 14:59 pm »

has probado a introducir el movimiento asi?

Código
  1. scanf("%d %c %d", &a, &aux, &b);

en este caso, en aux tendras la ','. luego podrias comprobarlo por si el usuario ha cometido un error, algo asi:

Código
  1. if (aux != ',') printf("ERROR: Introduce un formato valido -> a,b\n");

un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
MI PC es más lenta que una tortuga!
Dudas Generales
SpuTniK. 5 4,718 Último mensaje 8 Junio 2010, 18:44 pm
por luinuz
Quitarle Memoria de Graficos a los graficos de core i5
Hardware
Churrin515 7 7,447 Último mensaje 15 Septiembre 2010, 15:20 pm
por APOKLIPTICO
Simulacion la tortuga y la liebre[C]
Programación C/C++
HRSLASH 1 8,326 Último mensaje 23 Marzo 2011, 00:48 am
por <<<-Basura->>>
Graficos de Tortuga (C++)
Programación C/C++
HRSLASH 2 5,481 Último mensaje 5 Marzo 2012, 15:31 pm
por HRSLASH
[C] Ayuda con Grafico de Tortuga
Programación C/C++
rafa_rdj 1 2,353 Último mensaje 27 Septiembre 2015, 19:42 pm
por 0xFer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines