Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sofia555555 en 28 Febrero 2019, 05:32 am



Título: ayuda con este tema
Publicado por: sofia555555 en 28 Febrero 2019, 05:32 am
Buenas noches a todos , tengo una duda chicos estoy haciendo un programa sobre un  ascensor y entonces
por ejemplo esta en planta Baja (PB)

son 12 pisos y quiero que nada mas tenga 4 paradas que serian PB-4-8-12

y yo elijo el numero 4

entonces quiero mostrar en pantalla lo siguiente

Piso = PB  es como inicia el programa pero quiero cuando arranque el ascensor  muestre en pantalla la siguiente secuencia

Piso= PB
Piso= 1
Piso= 2
Piso= 3
Piso= 4

Y ahi se detenga

entonces yo coloco lo siguiente

Código
  1.  
  2. if(piso<0){
  3. Piso=Piso+1;
  4. Sleep(3000); // pongo 3 segundos por cada piso que sube es lo que tarda
  5. }
  6.  


 Mis dudas son como haria que se detenga en 4  y como haria que la variable Piso pueda cambiar de PB a numero  , hay alguna variable que pueda utlizar caracteres y enteros?


Título: Re: ayuda con este tema
Publicado por: srWhiteSkull en 28 Febrero 2019, 05:50 am
hay alguna variable que pueda utlizar caracteres y enteros?

Nooo,

Pero podrías usar el cero.

PD a lo mejor PB es una constante si es porque aparece en algún código que estás copiando.


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 28 Febrero 2019, 06:32 am
Nooo,

Pero podrías usar el cero.

PD a lo mejor PB es una constante si es porque aparece en algún código que estás copiando.


 si pero en los ascensores aparece PB despues los numero de pisos asi que no lo se , no esta bien poner el 0 quisiera Que diga PB despues 1 , 2 y asi


Título: Re: ayuda con este tema
Publicado por: srWhiteSkull en 28 Febrero 2019, 06:59 am
Pero que diga dónde? Me imagino que eso saldrá solo en la pantalla del ascensor. De todas formas con esa información no puedo ayudarte y ahora mismo me voy a dormir.

Buenas noches.


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 28 Febrero 2019, 07:07 am
Pero que diga dónde? Me imagino que eso saldrá solo en la pantalla del ascensor. De todas formas con esa información no puedo ayudarte y ahora mismo me voy a dormir.

Buenas noches.

Si claro lo que quiero es mostrar en pantalla como si fuera la pantalla led de los ascensores


Título: Re: ayuda con este tema
Publicado por: K-YreX en 28 Febrero 2019, 12:21 pm
Buenas noches a todos , tengo una duda chicos estoy haciendo un programa sobre un  ascensor y entonces
por ejemplo esta en planta Baja (PB)

son 12 pisos y quiero que nada mas tenga 4 paradas que serian PB-4-8-12

y yo elijo el numero 4

entonces quiero mostrar en pantalla lo siguiente

Piso = PB  es como inicia el programa pero quiero cuando arranque el ascensor  muestre en pantalla la siguiente secuencia

Piso= PB
Piso= 1
Piso= 2
Piso= 3
Piso= 4

Y ahi se detenga

entonces yo coloco lo siguiente

Código
  1.  
  2. if(piso<0){
  3. Piso=Piso+1;
  4. Sleep(3000); // pongo 3 segundos por cada piso que sube es lo que tarda
  5. }
  6.  


 Mis dudas son como haria que se detenga en 4  y como haria que la variable Piso pueda cambiar de PB a numero  , hay alguna variable que pueda utlizar caracteres y enteros?

Si quieres que se detenga en el 4 pues con un condicional, sencillo.
Para el tema de mezclar letras (PB) con números (1, 2, 3...) tienes varias opciones:
  • Usar <string> o <char> y entonces representar los números como caracteres en vez de como números. Si luego quieres incrementar algún valor tendrás que usar una función que los transforme de <char> a <int> y después a <char> nuevamente.
  • Usar <int> y que PB sea el 0. Luego cuando se vaya a mostrar la planta, hacer un condicional para que si la planta es el 0, se muestre "PB" y sino que se muestre el número de la planta.
  • Igual también te sirve usar una enumeración <enum>.


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 1 Marzo 2019, 02:54 am
Si quieres que se detenga en el 4 pues con un condicional, sencillo.
Para el tema de mezclar letras (PB) con números (1, 2, 3...) tienes varias opciones:
  • Usar <string> o <char> y entonces representar los números como caracteres en vez de como números. Si luego quieres incrementar algún valor tendrás que usar una función que los transforme de <char> a <int> y después a <char> nuevamente.
  • Usar <int> y que PB sea el 0. Luego cuando se vaya a mostrar la planta, hacer un condicional para que si la planta es el 0, se muestre "PB" y sino que se muestre el número de la planta.
  • Igual también te sirve usar una enumeración <enum>.
Si logre resolver lo del piso que se detuviera , dejare por ultimo el tema de Pb y los numeros de los piso ,  ahora imaginemos que el ascensor llego al piso 4 abrio las puertas como hacer que duren 2 seg abiertas y despues las cierre como hacer ese condicional?


Título: Re: ayuda con este tema
Publicado por: K-YreX en 1 Marzo 2019, 03:27 am
Te muestro un pequeño fragmento para darte una idea y que tú puedas adaptarlo a tus necesidades.
(Supongo que estás compilando desde Windows no?)
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    int piso_actual = 0;
  8.    int piso_final = 4;
  9.    while(piso_actual < piso_final){ // tambien funciona con piso_actual != piso_final
  10.        if(piso_actual == 0)
  11.            cout << "Piso: PB" << endl;
  12.        else
  13.            cout << "Piso: " << piso_actual << endl;
  14.        piso_actual++; // incremento en 1 de la variable piso_actual
  15.        Sleep(2000); // retardo de 2 segundos entre piso y piso
  16.    }
  17. }

Como estás empezando te comento un par de cosas:
  • El <if else> no tiene llaves {} por lo que sólo incluye una instrucción cada uno.
Código
  1. // Opcion 1 usando llaves
  2. if(var == 0){
  3.    cout << var << endl;
  4. }
  5. cout << var+1 << endl;
  6.  
  7. // Opcion 2 sin usar llaves, equivalente a la opcion 1
  8. if(var == 0)
  9.    cout << var << endl;
  10. cout << var+1 << endl;

  • Si el programa lo vas a compilar en Linux tienes que cambiar <windows.h> por <unistd.h> y la función <Sleep(milisegundos)> por <usleep(microsegundos)>.
  • Hay más formas de mostrar el número de planta, pero esta es una de ellas. Si quieres ver cómo se haría de alguna otra forma, coméntamelo.

Espero que esto te sirva y si tienes alguna duda más, siempre puedes preguntar. Suerte :-X


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 1 Marzo 2019, 03:40 am
Te muestro un pequeño fragmento para darte una idea y que tú puedas adaptarlo a tus necesidades.
(Supongo que estás compilando desde Windows no?)
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    int piso_actual = 0;
  8.    int piso_final = 4;
  9.    while(piso_actual < piso_final){ // tambien funciona con piso_actual != piso_final
  10.        if(piso_actual == 0)
  11.            cout << "Piso: PB" << endl;
  12.        else
  13.            cout << "Piso: " << piso_actual << endl;
  14.        piso_actual++; // incremento en 1 de la variable piso_actual
  15.        Sleep(2000); // retardo de 2 segundos entre piso y piso
  16.    }
  17. }

Como estás empezando te comento un par de cosas:
  • El <if else> no tiene llaves {} por lo que sólo incluye una instrucción cada uno.
Código
  1. // Opcion 1 usando llaves
  2. if(var == 0){
  3.    cout << var << endl;
  4. }
  5. cout << var+1 << endl;
  6.  
  7. // Opcion 2 sin usar llaves, equivalente a la opcion 1
  8. if(var == 0)
  9.    cout << var << endl;
  10. cout << var+1 << endl;

  • Si el programa lo vas a compilar en Linux tienes que cambiar <windows.h> por <unistd.h> y la función <Sleep(milisegundos)> por <usleep(microsegundos)>.
  • Hay más formas de mostrar el número de planta, pero esta es una de ellas. Si quieres ver cómo se haría de alguna otra forma, coméntamelo.

Espero que esto te sirva y si tienes alguna duda más, siempre puedes preguntar. Suerte :-X

 Si gracias uso windows , quiero dejar a lo ultimo lo de si esta en PB sera el 0 porque si no me complico  :-( , quisiera saber como hacer el condicional para con la funcion sleep para que cuando abra las puertas duren 2 segundos abiertas y  luego las cierre despues de los dos segundos


Título: Re: ayuda con este tema
Publicado por: K-YreX en 1 Marzo 2019, 03:51 am
Para hacer eso lo mejor es controlar el estado de las puertas con una variable booleana <bool> cuyos posibles valores son true(1) y false(0). Como ya has visto como se usa la función <Sleep()> y cómo funcionan los condicionales, te dejo la respuesta en pseudocódigo para que tú te encargues de pasarlo a C++. :-X
Código:
bool puerta_abierta = true
si puerta_abierta
    esperar(2 segundos)
    puerta_abierta = false


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 1 Marzo 2019, 04:00 am
Para hacer eso lo mejor es controlar el estado de las puertas con una variable booleana <bool> cuyos posibles valores son true(1) y false(0). Como ya has visto como se usa la función <Sleep()> y cómo funcionan los condicionales, te dejo la respuesta en pseudocódigo para que tú te encargues de pasarlo a C++. :-X
Código:
bool puerta_abierta = true
si puerta_abierta
    esperar(2 segundos)
    puerta_abierta = false

Jajaja que maldad  :-( no entiendo como pseudocodigo?


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 1 Marzo 2019, 04:03 am
lo intentare


Título: Re: ayuda con este tema
Publicado por: K-YreX en 1 Marzo 2019, 04:08 am
Jajaja que maldad  :-( no entiendo como pseudocodigo?
El pseudocódigo se emplea para representar algoritmos (fragmentos de código) de forma fácil de entender para las personas, con un lenguaje más natural y que luego ya puedes transformarlo en código para el lenguaje que tú quieras.
Como puedes ver, ese fragmento que te he dejado si lo copias tal cual en el programa no va a funcionar. Eso es porque ahora tienes que adaptar esa idea a la sintaxis del lenguaje de programación que sea, C++ en este caso.
Más que nada porque si te lo hago en C++ pues ya te estoy dando la solución hecha para copiar y pegar... :-X


Título: Re: ayuda con este tema
Publicado por: sofia555555 en 1 Marzo 2019, 04:12 am
El pseudocódigo se emplea para representar algoritmos (fragmentos de código) de forma fácil de entender para las personas, con un lenguaje más natural y que luego ya puedes transformarlo en código para el lenguaje que tú quieras.
Como puedes ver, ese fragmento que te he dejado si lo copias tal cual en el programa no va a funcionar. Eso es porque ahora tienes que adaptar esa idea a la sintaxis del lenguaje de programación que sea, C++ en este caso.
Más que nada porque si te lo hago en C++ pues ya te estoy dando la solución hecha para copiar y pegar... :-X

Lo hice asi

Código
  1. if (Puertas == "ABIERTAS"){
  2. Sleep(2000);
  3. Puertas = PuertasC;
  4. }
  5.  

pero ahora si por ejemplo van al piso 4 , el programa va subiendo piso a piso cada 1 seg entonces cuando va en el 3 se queda en el piso 3 los dos segundos de las puertas y llega al 4 y ahora no abre las puertas como lo hacia antes de meter ese if


PuertasC es una dato tipo string PuertasC = "CERRADAS";


Título: Re: ayuda con este tema
Publicado por: K-YreX en 1 Marzo 2019, 04:32 am
Si no veo el resto del código no sé muy bien dónde tienes el problema.
Aparte te recomiendo que la variable sea de tipo <bool>, no <string>. Te dejo aquí un ejemplo para que lo ejecutes y veas como quedaría. Luego siempre puedes añadir o quitar cosas para dejarlo como quieras. :-X
Código
  1. int main(){
  2.    int piso_actual = 0;
  3.    int piso_destino = 4;
  4.    bool puertas_abiertas = false;
  5.    // mientras las puertas esten cerradas y estemos por debajo del destino, subimos
  6.    while(!puertas_abiertas && piso_actual < piso_destino){
  7.        cout << "Piso: " << piso_actual << " Subiendo..." << endl;
  8.        Sleep(2000); // 2 segundos para subir cada piso
  9.        piso_actual++;
  10.    }
  11.    if(piso_actual == piso_destino){
  12.        cout << "Ha llegado al piso " << piso_actual << endl;
  13.        cout << "Abriendo puertas..." << endl;
  14.        Sleep(1000); // tiempo que tardan en abrirse las puertas
  15.        puertas_abiertas = true;
  16.        cout << "Puertas abiertas" << endl;
  17.        Sleep(2000); // esperamos 2 segundos para volver a cerrar las puertas
  18.        cout << "Cerrando puertas..." << endl;
  19.        Sleep(1000); // tiempo que tardan en cerrarse
  20.        puertas_abiertas = false;
  21.        cout << "Puertas cerradas" << endl;
  22.    }
  23. }