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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre operadores y funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre operadores y funciones  (Leído 6,913 veces)
Luxus01

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Duda sobre operadores y funciones
« en: 9 Septiembre 2016, 17:33 pm »

Hola a todos, soy nuevo y estoy empezando ha programar en c++.

Estoy haciendo un programa con el que "dibujar" un recorrido en la consola, el programa lee ese recorrido y lo procese para transformarlo en instrucciones para un robot en la vida real (con arduino). Y me gustaría saber si hay algún operador, función o librería que sea capaz de detectar ese recorrido, o al menos de ayudarme a hacer una función que lo detecte.

Gracias por adelantado  :D


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre operadores y funciones
« Respuesta #1 en: 9 Septiembre 2016, 19:56 pm »

Dibujar un recorrido en la consola. Explica mejor qué tipo de datos va a recibir el programa. ¿Va a recibir datos del tipo "ADELANTE 5", va a recibir un "mapa" del recorrido tipo
Código:
 XXX
XX X
X  X
XXXX


En línea

Luxus01

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre operadores y funciones
« Respuesta #2 en: 10 Septiembre 2016, 15:13 pm »

Hola, perdón por haber tardado en responder :laugh:.
En el anterior mensaje no explique bien lo que quería hacer aqui, tienes el codigo con comentarios. Aun no esta terminado, me falta conectar el c++ y el arduino (algo que no se como hacer todavia) pero lo del recorrido ya esta hecho.

Código
  1. #include<stdio.h>  //Declara las librerias, variables y definiciones
  2. #include<windows.h>
  3. #include<conio.h>
  4. #include<stdlib.h>
  5. #include<list>
  6. #include<iostream>
  7. using namespace std;
  8.  
  9. #define ARRIBA 72
  10. #define IZQUIERDA 75
  11. #define DERECHA 77
  12. #define ABAJO 80
  13.  
  14. bool fina = false; //Esta variable pone fin al programa si es necesario
  15. int recorrido[20]; //En este array se almacena el recorrido en forma de numeros
  16.  
  17. void gotoxy(int x, int y) //Funcion para situar el cursor en el lugar deseado
  18. {
  19. HANDLE hCon;
  20. hCon = GetStdHandle (STD_OUTPUT_HANDLE);
  21. COORD dwPos;
  22. dwPos.X =x;
  23. dwPos.Y =y;
  24.  
  25. SetConsoleCursorPosition(hCon, dwPos);
  26. }
  27.  
  28. void OcultarCursor()//Oculta el cursor
  29.  
  30. {
  31.  
  32. HANDLE hCon;
  33. hCon = GetStdHandle (STD_OUTPUT_HANDLE);
  34. CONSOLE_CURSOR_INFO cci;
  35. cci.dwSize = 2;
  36. cci.bVisible = false;
  37.  
  38. SetConsoleCursorInfo (hCon,&cci);
  39.  
  40. }
  41.  
  42. class Inicio //Es el objeto que se mueve por el camino
  43. {
  44. private:
  45.    int x, y;
  46. public:
  47.    Inicio(int _x,int _y): x(_x), y(_y){}
  48.    void pintar();
  49.    void mover();
  50. };
  51.  
  52.  
  53.  
  54. void Inicio::mover()//Esta es la funcion mas importante, permite hacer el camino y lo traduce a numeros
  55. {   int i;
  56.    if(kbhit() && recorrido[20] == 0)//Detecta si se a presionado una tecla y si la ultima cifra del recorrido es cero
  57.        {
  58.        char tecla = getch();
  59.        if(tecla == ARRIBA )//Detecta que flecha se a pulsado(en este caso arriba)
  60.        {
  61.        y--;
  62.        for(i=0;i<21;i++)//En este for se recorre el arreglo y se guarda el numero correspondiente en el siguiente hueco distinto a cero
  63.        {
  64.            if(recorrido[i] == 0)
  65.            {
  66.                recorrido[i] = 72;
  67.                break;
  68.            }
  69.        }
  70.  
  71.        }
  72.        if(tecla == IZQUIERDA )
  73.        {
  74.            x--;
  75.            for(i=0;i<21;i++)
  76.            {
  77.                if(recorrido[i] == 0)
  78.                    {
  79.                    recorrido[i] = 75;
  80.                    break;
  81.                    }
  82.            }
  83.  
  84.  
  85.  
  86.  
  87.        }
  88.        if(tecla == DERECHA )
  89.        {
  90.            x++;
  91.            for(i=0;i<21;i++)
  92.            {
  93.                if(recorrido[i] == 0)
  94.                    {
  95.                    recorrido[i] = 77;
  96.                    break;
  97.                    }
  98.            }
  99.  
  100.        }
  101.        if(tecla == ABAJO )
  102.        {
  103.            y++;
  104.            for(i=0;i<21;i++)
  105.            {
  106.                if(recorrido[i] == 0)
  107.                    {
  108.                    recorrido[i] = 80;
  109.                    break;
  110.                    }
  111.            }
  112.  
  113.        }
  114.        gotoxy(x,y); printf("*");//Imprime un asterisco para que la trayectoria sea visible
  115.        gotoxy(0,0);//Situa el cursor en la esquina superior izquierdaa
  116.        for(i=0;i<21;i++)//Imprime la secuencia en el margen
  117.        {
  118.            cout<< recorrido[i]<<"\n";
  119.        }
  120.  
  121.    }
  122.    if(recorrido[20] != 0)//Comprueba si la ultima cifra del recorrido es distinta de cero, en tal caso, el programa le manda la secuencia al robot
  123.    {
  124.        fina = true;
  125.        gotoxy(0,0); printf("Se ha completado la trayectoria, puedes mandar los datos al robot");
  126.    }
  127. }
  128.  
  129. void Inicio::pintar()//Pone el primer objeto para que sea visible
  130. {
  131.    gotoxy(x,y); printf("%c",223);
  132. }
  133.  
  134. int main()
  135. {
  136.    OcultarCursor();
  137.    int recorrido[20];
  138.    int i;
  139.    for(i=0;i<21;i++)//Despues de mandar la secuencia al robot vuelve el recorrido a cero para poder volver a utilizarla
  140.    {
  141.        recorrido[i]=0;
  142.    }
  143.    Inicio In(60,60);
  144.    In.pintar();
  145.    while(!fina)//Inicia el bucle que permite la creacion del recorrido
  146.    {
  147.        In.mover();
  148.  
  149.    }
  150.  
  151. return 0;
  152. }
  153.  

En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre operadores y funciones
« Respuesta #3 en: 10 Septiembre 2016, 16:05 pm »

En primer lugar:
En un array de 20 elementos, el índice va desde 0 hasta 19. Por tanto, los for son incorrector. Seberían ser:
Código
  1. for(int i=0; i<20; i++)
También el if debería ser:
Código
  1. if(kbhit() && recorrido[19] == 0)

Luego, como detalle: Sería más conveniente que guardases la cantidad de recorrido en un entero, y te ahorras estos for:
Código
  1. for(i=0;i<21;i++)//En este for se recorre el arreglo y se guarda el numero correspondiente en el siguiente hueco distinto a cero
  2. {
  3.    if(recorrido[i] == 0)
  4.    {
  5.        recorrido[i] = 72;
  6.        break;
  7.    }
  8. }

Como último detalle, si programas C++, es preferible utilizar las librerías de C++:
stdlib.h pasa a llamarse cstdlib
stdio.h -> cstdio

(windows.h y conio.h se quedan así)


Y bueno. Me has dejado desconcertado. En la pregunta inicial, preguntas cómo "detectar el recorrido". Con ese programa, tienes el array de movimientos, que es lo que necesitas, ¿no?
En línea

Luxus01

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre operadores y funciones
« Respuesta #4 en: 10 Septiembre 2016, 16:38 pm »

Si, después de publicar el mensaje empece a darle vueltas mi di cuenta de que en vez de analizar el recorrido del objeto podía almacenar en una cadena cada pulsación de las teclas
como números y luego asignar esos números a un movimiento determinado.
Lo siento, no entiendo a que te refieres con almacenar los movimientos en un entero, tenerlos en un arreglo me permite tenerlos secuenciados.
Otra cosa, al poner cstdlib y cstdio me salta un error

Ahora tengo problemas con la comunicación serial por que no tengo ni idea de como funciona.
« Última modificación: 10 Septiembre 2016, 16:43 pm por Luxus01 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre operadores y funciones
« Respuesta #5 en: 10 Septiembre 2016, 23:00 pm »

Decía de guardar un entero con el último índice almacenado. Actualmente, calculas la cantidad de movimientos almacenados con un for. En vez de hacer eso, mejor guardar sin más un entero.


En cuanto a la conexión serie, Arduino da una clase C++ para que la uses si quieres.

Para usarla, pues tiene funciones simples tipo Write y Read, no tiene más.

Si quieres, aquí tengo un programa funcional para conectar Arduino con programa C++:
https://github.com/ivancea/Arduino-Interpreter/tree/master/C++%20App
En línea

Luxus01

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre operadores y funciones
« Respuesta #6 en: 11 Septiembre 2016, 12:24 pm »

Me podrías explicar como usar tu programa. Porque sinceramente no tengo ni idea de que hacer con él.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre operadores y funciones
« Respuesta #7 en: 11 Septiembre 2016, 13:37 pm »

Umh bueno. Hay la aprte de Arduino, que le metes al Arduino sin más:

https://github.com/ivancea/Arduino-Interpreter/blob/master/arduino_program.c

Y la parte de C++, que tienes que compilar. Si quieres, puedes usas un IDE, puedes hacer un proyecto, como más te guste.

El programa lo único que tiene es un intérprete de comandos, para poner cosas como:
Código:
pinmode 5 OUTPUT
digitalwrite 5 HIGH
Desde ls consola del programa, con el Arduino conectado.


Pero bueno, era más que nada para que vieras cómo implementar en tu proyecto la clase Serial (serial.h y serial.cpp).
Si quieres, aquí hay una fuente oficial en la cual usan la clase:
http://playground.arduino.cc/Interfacing/CPPWindows

Aunque bueno, no me gusta porque mezclan mucho C con C++ xD
En línea

Luxus01

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre operadores y funciones
« Respuesta #8 en: 11 Septiembre 2016, 14:35 pm »

Lo siento, debo de ser un plasta :-\ pero yo me refiero a como unir todos esos códigos,
el de arduino lo he copiado al Arduino  IDE y los archivos h los he puesto con las demás librerías pero el resto no se que hacer con ello.

Y donde se cambian las opciones para compilar con -std=c++11?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre operadores y funciones
« Respuesta #9 en: 11 Septiembre 2016, 15:46 pm »

Vale, lo de Arduino listo.
Ahora los otros. Si usas un IDE para compilar C++, puedes crear un proyecto, agregar esos 5 archivos, y compilar, sin más.

Si no lo logras, dime: ¿Qué IDE utilizas para compilar C++? (No hablo del de Arduino)


Si compilas desde línea de comandos, sería (Con GCC, no sé cual es tu compilador):

Código:
g++ -std=c++11 -c functions.cpp -o functions.o
g++ -std=c++11 -c serial.cpp -o serial.o
g++ -std=c++11 -c main.cpp -o main.o
g++ functions.o serial.o main.o -o main.exe
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre estructuras y funciones
Programación C/C++
asdavid 3 2,601 Último mensaje 29 Noviembre 2012, 00:01 am
por durasno
Duda sobre ficheros en funciones
Programación C/C++
muymuyperdido 4 2,666 Último mensaje 23 Diciembre 2012, 15:43 pm
por muymuyperdido
Duda sobre funciones inline.
Programación C/C++
OmarHack 7 4,050 Último mensaje 28 Marzo 2013, 17:04 pm
por OmarHack
duda sobre funciones
Programación C/C++
0xFer 3 2,468 Último mensaje 20 Abril 2015, 11:43 am
por Gh057
Duda sobre algunas funciones de C++
Programación C/C++
vojok 4 2,498 Último mensaje 2 Enero 2016, 17:54 pm
por vojok
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines