Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: fenix_93 en Enero 11, 2015, 12:09:57 am

Título: Como leer datos apartir de un arreglo???
Publicado por: fenix_93 en Enero 11, 2015, 12:09:57 am
Hola comunidad.
Tengo una duda. Me encuentro estudiando C  y pues estoy leyendo el libro COMO PROGRAMAR EN C/C++ de DEITEL&DEITEL.
y estoy desarrollando el problema de la tortuga mecanica, esto consiste en dar una serie de ordenes atravez de comandos, pero no entiendo la parte que me dice: lea los comandos de un arreglo que los contenga.
He estado buscando por google y no encuentro como leer comandos de un arreglo.
Ya logre´ desarrollar el problema, pero con if, else. No le encuentro caso de que un arreglo me contenga los comandos. si alguien me explica como desarrollar o partir de eso lo agradeceria. a lo olvidaba:
los comandos son: girar a la izquierda --> 3
girar a la derecha --> 4
avanzar x pasos --> 5, x
y algunos mas. NO QUIERO QUE ME DEN EL CODIGO RESUELTO solo quiero que me expliquen como leer los datos apartir de un arreglo.
GRACIAS
Título: Re:Como leer datos apartir de un arreglo???
Publicado por: C_printfer en Enero 11, 2015, 02:07:50 am
Buenas!!

Pues si he entendido bien, lo que tienes que hacer es crear un array de varios elementos, cada uno de esos elementos puede ser un comando. Es decir, igual que declaras un array de enteros como
Código: [Seleccionar]
int array[]={1,3,2,7};pues puedes almacenar los comandos en lugar de almacenar valores enteros.

Personalmente nunca me he visto en la necesidad de declarar un array de cadenas (al menos que yo recuerde), pero imagino que podrías hacerlo así:
Código: [Seleccionar]
char array[/* numero de comandos que tengas */][/* numero de caracteres del comando mas largo */]={"comando1","comando2","comando3"} //tantos comandos como sean necesarios
De ese modo, podrías obtener cada uno de los comandos accediendo a cada una de las posiciones del array. Por ejemplo, para acceder al segundo comando haríamos:
Código: [Seleccionar]
printf("%s", array[1][]); //deberia imprimir comando2 (recordar que el primer elemento del array es el 0)
Si no te queda claro o cualquier cosilla me cuentas!!
S2!

PD: si pruebas y no te funciona no dudes en decírmelo, por favor.

Igual esto te aclara algo más: http://www.forosdelweb.com/f96/variable-tipo-string-c-575666/

Y de cara a algún problema que te pueda surgir: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Cadenas_de_caracteres
Título: Re:Como leer datos apartir de un arreglo???
Publicado por: fenix_93 en Enero 11, 2015, 03:19:05 am
mmmmm. si. Creo que todavia no entiendo bien.
Quiza´  no lo redacte bien. El problema dice que es una tortuga mecanica en un cuarto y con una pluma, la pluma puede estar arriba o abajo.
atravez de los comandos se le ordena que baje o suba la pluma. Si la pluma esta´ abajo la tortuga dibujaria mientras camina. Si se le ordena girar a la derecha, pues la tortuga dibuja una linea hacia la izquierda. Todo esto en un arreglo de 50 por 50. Por los cuadros que camina deja un 1 si la pluma esta abajo. Entonces aun no entiendo leer los comandos apartir de un arreglo para que cumpla cada una de las ordenes.
Los comandos son:
FUNCION               COMANDO
Pluma arriba -----> 1
Pluma abajo -----> 2
Giro a la derecha -->  3
Giro a la izquierda -->  4
Imprimir imagen -->  6
Salir --------------->       9
como ya dije antes, las funciones ya las hice con if, else. pero quiero hacerlo como dice el libro, leyendolo apartir de un arreglo.
Título: Re:Como leer datos apartir de un arreglo???
Publicado por: ravenheart en Enero 11, 2015, 04:08:01 am
Te está dando los valores de cada comando. Tendrías que guardarlos como constantes:
Código: [Seleccionar]
const int PLUMA_ARRIBA = 1;
const int PLUMA_ABAJO = 2;
...

Luego, si sabes manejar arreglos, es muy sencillo. La idea es que tienes un arreglo (de origen incierto) de enteros, con los comandos que tiene que ejecutar.
Código: [Seleccionar]
const int TAM_ARREGLO = 200;
int[TAM_ARREGLO] comandos;

Solo tendrías que recorrerlo en un bucle:
Código: [Seleccionar]
for (int i = 0; i < TAM_ARREGLO; i++)
{
    int comando = comandos[i];
    if (comando == PLUMA_ARRIBA)
        LevantarPluma();
    else if (comando == PLUMA_ABAJO)
        BajarPluma();
    ...
}
Título: Re:Como leer datos apartir de un arreglo???
Publicado por: fenix_93 en Enero 11, 2015, 06:26:11 am
Gracias por prestarle atencion a mi duda.
esque crei´ que habia que almacenar los comandos en un arreglo asi´:
Código: [Seleccionar]
int comandos[7] = {1, 2, 3, 4, 5, 6, 9}; y de alguna forma saber que el usuario ingreso´ alguno de esos y ejecutar la orden. Pero yo lo hice asi´
Código: [Seleccionar]
   float comando = 0.0;
               int pluma = 0;
              Printf("Ingrese comando : ");
              scanf("%f", &comando);
              if(comando == 1)
                   pluma = 0;
               if(comando == 2)
                       pluma = 1; 
   
y de esa forma, pero no le veo sentido buscar si el comando ingresado esta en el arreglo y luego ejecutar el if, else si se supone que la comparacion la hace de una vez con el if, else. Tiene que haber alguna forma de saber y ejecutar de manera inmediata el comando que ingreso´ y que esta´ en el arreglo.
Título: Re:Como leer datos apartir de un arreglo???
Publicado por: ravenheart en Enero 11, 2015, 01:24:15 pm
Gracias por prestarle atencion a mi duda.
esque crei´ que habia que almacenar los comandos en un arreglo asi´:
Código: [Seleccionar]
int comandos[7] = {1, 2, 3, 4, 5, 6, 9};
No. La idea es que se van a ejecutar varios comandos, uno detrás de otro, y el arreglo es para almacenar la lista en el orden en que se van a ejecutar.
Esto puede servir, por ejemplo, para cargar un programa de disco y ejecutarlo (el concepto de la tortuga que dibuja viene precisamente de un lenguaje de programación, LOGO).

El arreglo no tiene mucha utilidad si solo vas a ejecutar un único comando escogido por el usuario. Tener los comandos existentes en el arreglo no es muy útil, salvo que los tengas asociados de alguna manera a un puntero a función, pero no sé si has llegado a eso.

Citar
Código: [Seleccionar]
   float comando = 0.0;
Al margen de todo lo demás, te recomiendo no usar float ni double gratuitamente. Si solo vas a tratar números enteros, usa int. Los tipos de coma flotante ocupan más espacio, son más lentos, y en ocasiones pueden hacer cosas inesperadas al comparar, porque su precisión es limitada.

Título: Re:Como leer datos apartir de un arreglo???
Publicado por: fenix_93 en Enero 12, 2015, 05:35:11 pm
ravenheart de verdad muchas gracias, me terminaste de aclarar mi duda y e aprendido algo nuevo. Y si,  aun no he llegado a punteros, todavia me faltan 3 hojas, jeje :P.
Y de nuevo muchas gracias.