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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
programacion c++
« en: 15 Mayo 2018, 01:19 am »

ayuda con este programa por favor.
Escriba un programa que, a través de una función, mueva un carácter a lo largo y
ancho de la pantalla, de la siguiente manera: Si el usuario presiona la tecla I el carácter
debe moverse una posición hacia arriba, si presiona la tecla K una posición hacia abajo,
si presiona J una posición hacia la izquierda y si presiona L debe mover el carácter una
posición a la derecha.
I = arriba K = abajo
J = izquierda L = derecha


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: programacion c++
« Respuesta #1 en: 15 Mayo 2018, 18:48 pm »

Básicamente una letra en una posición horizontal supone una cadena de texto donde todas sus posiciones previas son espacios. Luego moverla a izquierda o derecha, es formar una nueva cadena con un espacio más o menos que antes.

La cuestión vertical, es más de lo mismo... por cada línea previa a la pedida, se escribe el salto de línea... luego subir o bajar es aumentar o reducir en 1 la cantidad de saltos de líneas...

En pseudocódigo:

Código:
funcion PosicionarLetraEnPantalla(char letra, byte X, byte Y)
    string s = espacios(X-1) + letra
    entero k

    borrar pantalla
    bucle para k desde 0 hasta Y-1
        imprimir salto de línea
    fin bucle
  
    imprimir s
fin funcion

NOTA: ten cuidado con los -1 y los tipos de datos, ...puede dar excepción... pero procura siempre usar un tipo de datos que se ajuste a lo razonable que se precisa.

Inicialmente X e Y valen 0, como se quiere mover, implica que hay que recordar la posicion previa... ergo ya tenemos una función que  borra la pantalla y dibuja la letra donde queremos, ahora nos falta una función que 'mueva' la letra una posición cada vez...

Como letra he elegido 's', la serpiente que se mueve... :laugh: :laugh: :laugh:
Código:
char letra = 'S'
byte X = 0
byte Y = 0

funcion Mover(char p)  // p de posición
    seleccionar caso de p
        caso 'l', 'L'  
            Si (X<79)  // suponiendo que 80 es el número máximo de caracteres en línea
                X +=1
                PosicionarLetraEnPantalla(letra, X, Y)
            sino
                mostrar aviso "llegado al extremo derecho"
            fin si
        caso 'J', 'j'
            Si (X>0)  // no se puede mover más a la izquierda, salvo que se permita, ascender una línea e ir al final de la misma.
                x -=1
                PosicionarLetraEnPantalla(letra, X, Y)
            sino
                mostrar aviso "llegado al extremo izquierdo"
            fin si
        caso 'i, 'I'
            idem que 'J' pero para Y (no para X)
        caso 'k', 'K'
           ídem que 'L' pero para Y (no para X), considerando también el número máximo de líneas en la pantalla..
        Otros casos
            beep, o un mensaje de no reconocer la letra, o de mostrar las opciones correctas, o...
    fin casos      
fin funcion



p.d.: Cambiando los comentarios que por copia y pega, no correspondían en su nueva ubicación... aprovecho para...

Aunque las optimizaciones, siempre se deben hacer una vez que ya funciona correctamente... y deberían correr a cargo del interesado... te explico que:
Una opción más competente es crear un texto cuyo contenido sea una línea completa de espacios (del ancho de pantalla)...

Al inicio del programa el primer carácter en ese texto es la letra a imprimir y luego cada vez se trata de remplazar la letra por un espacio en su ubicación actual y luego remplazar un espacio por la letra en la nueva ubicación de la letra ± 1 posición de la previa...
...así la cadena de texto a imprimir se crea una sola vez y se modifica solo cuando cambia el valor de 'x', (que en ese caso se remplazan solo dos caracteres en la cadena " S" por "S ", ó viceversa), y por tanto no se tendrá que reconstruir la cadena al completo cada vez que se 'mueva' la letra...


« Última modificación: 15 Mayo 2018, 19:43 pm por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
algunas dudas en programacion BATCH(nuevo en esto de programacion)
Scripting
stock_C 8 9,003 Último mensaje 19 Junio 2009, 18:08 pm
por frank30
programacion web vs programacion de escritorio
Programación General
lupitapro 2 7,565 Último mensaje 29 Mayo 2010, 05:51 am
por Dreamaker
Programacion Estructurada Vs Programacion Orientada a Objetos
Programación General
79137913 3 8,138 Último mensaje 1 Junio 2011, 18:02 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines