sábado, 29 de mayo de 2010

Problema de algoritmia, en Python

Hola. En este post vamos a ver la resolución de un problema de Algoritmia típico, resuelto en Python. El enunciado me lo ha enviado un navegante, entusiasta de Python, como yo. Es el siguiente:


A partir de una cadena introducida por el usuario, se trata de pintar una caja de texto con la propia cadena, utilizando espacios en blanco. La complejidad reside en cómo pintar las cadenas reversas, esto es, escritas al revés.

Hay varias formas de resolver el problema. Con listas parece obvio, aunque yo lo he resuelto de la manera más fácil para mí, claro.

Este es el código:

# -*- coding: cp1252 -*-
# Ángel Luis García García
# Algoritmia

while True:
# Introducimos palabra.
cadena = raw_input('Introduce palabra: ')
# Si no escribimos nada, salimos.
if len(cadena) == 0: break
# Longitud de la cadena.
long_cadena = len(cadena)
# Espacio en blanco.
blanco = " " * (long_cadena - 2)
# Pintamos la cadena de arriba.
print cadena
# Pintamos las columnas.
puntero = long_cadena - 1
for i in range(1,long_cadena):
puntero -= 1
if i == long_cadena - 1:
# Pintamos la cadena de abajo.
a = list(cadena)
a.reverse()
cadena_down = ""
for i in a: cadena_down = cadena_down + i
print cadena_down
else:
# Columnas
print cadena[i] + blanco + cadena[puntero]

Y ejemplos de la solución:


Si crees tener una solución alternativa puedes enviarla, si lo deseas, a este blog, y la publicaré, para de esta manera aprender todos y ver que hay varias formas de dar solución a un mismo problema.

Saludos.

4 comentarios:

  1. while True:
    # Introducimos palabra.
    cadena = raw_input('Introduce palabra: ')
    # Si no escribimos nada, salimos.
    if len(cadena) == 0: break
    # Longitud de la cadena.
    long_cadena = len(cadena)
    # Espacio en blanco.
    blanco = " " * (long_cadena - 2)
    # Pintamos la cadena de arriba.
    print cadena

    # AQUÍ VIENE LA ALTERNATIVA

    # Pintamos columnas
    for i in range(1,long_cadena - 1):
    print cadena[i] + blanco + cadena[-i-1]
    # Pintamos la cadena de abajo.
    print cadena[::-1]

    ResponderEliminar
  2. #include

    using namespace std;

    class Persona
    {
    private:
    char nombre[20];
    char apellido[20];
    long int cedula;
    char sexo;
    int edad;
    public:
    void AsignarDatos(char*,char*,long int,char, int);
    void Mostrar();
    };
    void Persona::AsignarDatos(char*nom,char*ape,long int ced,char sex,int ed)
    {
    strcpy(nombre,nom);
    strcpy(apellido,ape);
    cedula = ced;
    sexo = sex;
    edad = ed;
    }
    void Persona :: Mostrar()
    {
    cout<<"el nombre es:"<>nom;

    cout<<"ingrese apellido:";
    cin>>ape;

    cout<<"ingrese cedula";
    cin>>ced;

    cout<<"ingrese sexo:";
    cin>>sex;

    cout<<"ingrese edad:";
    cin>>ed;

    otro.AsignarDatos(nom,ape,ced,sex,ed);

    cout<<endl<<"mostrando datos"<<endl;

    ligia.Mostrar();

    cout<<endl;

    pedro.Mostrar();

    cout<<endl;

    otro.Mostrar();

    return 0;
    }

    ResponderEliminar
    Respuestas
    1. el problema q me da es q muestra error en los punteros y no se copila

      Eliminar