Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-03-2009
neerii neerii is offline
Registrado
 
Registrado: mar 2009
Posts: 1
Poder: 0
neerii Va por buen camino
Cómo averiguar si una frase es un palíndromo

hola.. yo soy nueva en esto asi que no entiendo mucho.. tengo que hacer un programa que verifique si una frase es un palindromo, pero en delphi 7. se que tengo que cortar los espacios, todas las letras pasarlas a mayusculas y las acentuadas a no.. pero no se como hacerlo.. espero que me puedan ayudar..
Responder Con Cita
  #2  
Antiguo 28-03-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola neerii,
Bienvenido a clubdelphi.

Como eres nuevo, te pido que te tomes unos minutos para leer la guia de estilo.

Respecto a tu duda sería útil que nos comentases que estuviste probando. Si nos comentas de forma más precisa sobre tus avances y/o dudas te podremos ser de mayor ayuda.

Intuyo que se trata de un ejercicio que te dieron en la facultad, instituto o cualquier otro establecimiento educativo. Y si te dieron esa tarea es para que tu te ejercites. No sería muy bueno de nuestra parte darte las cosas a modo de "regalo".

Yo en vez de ofrecerte una posible solución prefiero indicar opciones, guías, y/o comentarios para que tu mismo puedas unir conceptos y proponer un algoritmo. ¿Te parece justo?

Si estás de acuerdo, sería muy oportuno que nos comentes más respecto al tema.

Además, tienes a disposición un buscador en los foros en donde puedes buscar sobre el tema, tal vez sobre manejo de strings, trim, revesestring, y términos similares sean de ayuda.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 29-03-2009
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
Opino igual que el post anterior. Nunca es bueno dar las tareas hechas , y si es el caso, podrias decir que no tienes ni idea de como hacerlo.

El problema en si es bastante sensillo, es solo cosa de aislar las palabras usando los espacios como separador. La comprobacion es mas sencilla aun, recorres cada palabra en ambas direcciones y asi compruebas si es o no palindromo, la verdad se me ocurren muchas formas de como hacerlo.

Si tienes algo, postealo, se revisa y se te ayuda.
Responder Con Cita
  #4  
Antiguo 29-03-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Para quitar o eliminar los espacios creo que se usa TRIM('hola amigos '), pero revisa la ayuda de Delphi.

Al igual que para dejar todo en mayúscula prueba con UPPERCASE('holaamigos'), pero consulta la ayuda de Delphi.

Puedes tratar la palabra como un arreglo de caracteres y manejarlo con un loop, como por ejemplo:

Para Texto:= 'RECONOCER';

Texto[0] = R
Texto[1] = E
...
...
Texto[8] = E
Texto[9] = R

Entonces vas comparando desde los extremos hacia el centro, si hay diferencias, entonces no es palindrome.

Texto[0] = Texto[9]
Texto[1] = Texto[8]

Usando Condiciones, Loop y la funchión Length estas al otro lado. Con esto mismo y previo, vas reemplazando las vocales tildadas por unas que no.

Código Delphi [-]
For desde:= 0 to length(Texto) do
begin
       Case Texto[desde] do
       begin
              'Á': Texto[desde]:= 'A'
              'É': Texto[desde]:= 'E'
              'Í': Texto[desde]:= 'I'
              'Ó': Texto[desde]:= 'O'
              'Ú': Texto[desde]:= 'U'
       end;
end;

Esa es la idea pero no se si esta correcta la estructura de CASE, revisa la ayuda de Delphi...

Finalmente, no te puedes presentar así, pidiendo que te hagamos todo el trabajo, muy mal augurio si lo tuyo tiene que ver con informática.

Para que tengas de prueba:
Cita:
Palabras palíndromos

Ana, arenera, arepera, anilina, ananá, Malayalam, Neuquén, Oruro, oso, radar, reconocer, rotor, salas, seres, somos, sometemos, oro, ala, ojo, solos y sagas.


Frases palíndromos

* ¿Acaso hubo búhos acá? (de Juan Filloy)
* Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, acaso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida. (de Ricardo Ochoa)
* Allí por la tropa portado, traído a ese paraje de maniobras, una tipa como capitán usar boina me dejara, pese a odiar toda tropa por tal ropilla. (de Luis Torrent)
* Allí si María avisa y así va a ir a mi silla. (HG)
* Anita lava la tina. (Popular en México)
* Átale, demoníaco Caín, o me delata. (de Julio Cortázar)
* Dábale arroz a la zorra el abad. (Tal vez uno de los más populares)
* La ruta nos aportó otro paso natural.
* Nada, yo soy Adán. (Guillermo Cabrera Infante)
* No lata, no: la totalidad arada dilato talón a talón. (Juan Filloy)
*Aves, aten al planeta, se va.
http://es.wikipedia.org/wiki/Algunos_pal%C3%ADndromos

Última edición por MAXIUM fecha: 29-03-2009 a las 06:02:52.
Responder Con Cita
  #5  
Antiguo 29-03-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola a todos,
MAXIUM dio unos buenos tips.

Yo solo quiero hacer dos observaciones:

1. En vez de UpperCase, yo recomiendo AnsiUperCase. Revisar la ayuda para más información.

2. La estructura CASE es case ... of.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 29-03-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Mira este código que acabo de preparar, puedes crear con él una función o símplemente modificarlo, nota utilizo dos "Edit", para que resulte más didáctico, pero obviamente no son necesarios.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=AnsiUpperCase(StringReplace(Edit1.Text,' ','',[rfReplaceAll]));;
Edit2.Text:=ReverseString(Edit1.Text);

  If Edit1.text = Edit2.Text then
  ShowMessage('Es palíndromo.')
  else
  ShowMessage('No es palíndromo.');

end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 30-03-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Habrá inconvenientes con las letras que lleven acentos o diéresis, pues todas las funciones nativas discriminan entre letras con diacríticos y sin diacríticos (a no ser que se me escape alguna).

La solución a esto pasa por emplear "mapeo" de caracteres. Digamos una constante String con las letras que pueden llevar diacrítico, pero sin él, y una segunda constante String con las mismas letras pero con el diacrítico puesto.

Pero si se quiere impresionar al profesor y se cuenta con el tiempo y la disposición suficientes para investigar, convendría recurrir a la función MultiByteToWideChar de la API de Windows. Ya que ésta permite separar las partes de un carácter compuesto, digamos una a acentuada (á) en las partes que la componen (a y ´). Sólo tener cuidado de exceptuar a la eñe, que por alguna "extraña" razón fue tomada como letra compuesta por algún ingeniero en alguna parte del mundo.

Un saludo.

Al González.

Última edición por Al González fecha: 30-03-2009 a las 06:24:02.
Responder Con Cita
  #8  
Antiguo 30-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Habrá inconvenientes con las letras que lleven acentos o diéresis, pues todas las funciones nativas discriminan entre letras con diacríticos y sin diacríticos (a no ser que se me escape alguna).
Yo pensé que esto no era problema con "AnsiUpperCase"...
__________________

Responder Con Cita
  #9  
Antiguo 30-03-2009
Cheerpipe Cheerpipe is offline
Miembro
 
Registrado: oct 2006
Posts: 46
Poder: 0
Cheerpipe Va por buen camino
Les dejo una funcion para extraer los simbolos (letra pura) de caracteres multybyte, en resumen, quitar acentos y otras hierbas usando la api mencionada arriba. Un detalle importante es que esto lo hice en Delphi 2009, en versiones anteriores la declaracion de uso de la api podria variar y por tanto las funciones que puse, no funcionaran, esto porque la declaración es ahora Unicode.

Código Delphi [-]
function extractSimbolFromMultiByteChar(Text: PAnsiChar): Char;
var
  Buffer: Char;
  Size: Integer;
begin
  Size := MultiByteToWideChar(0,0,Text,-1,nil,0);
  if (Size > 0) then
  begin
    MultiByteToWideChar(0 ,MB_COMPOSITE , Text,-1, @Buffer, Size);
    result:=Buffer;
  end;
end;

function clearMultiByteChar(Text: String): String;
var
  i: Integer;
begin
  result:='';
  for I := 1 to Length(Text) do
    Result:=Result+extractSimbolFromMultiByteChar(PAnsiChar(AnsiString(text[i])));
end;

Última edición por Cheerpipe fecha: 30-03-2009 a las 17:11:00.
Responder Con Cita
  #10  
Antiguo 30-03-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por ContraVeneno Ver Mensaje
Yo pensé que esto no era problema con "AnsiUpperCase"...
Lo que tiene ANSIUpperCase es que considera a todos los caracteres del idioma actual, incluyendo los acentuados. Pero no da por iguales a una "a" y una "á".

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage (UpperCase ('a, á'));
  ShowMessage (ANSIUpperCase ('a, á'));
end;

Sería terrible que ANSIUpperCase quitara los acentos al convertir a mayúsculas.
Responder Con Cita
  #11  
Antiguo 30-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
cierto, cierto, ya entendí cuál sería el problema con los acentos. Gratzie
__________________

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como averiguar que un fichero ha finalizado su creacion ? QuarkBcn API de Windows 3 11-03-2009 13:34:55
frase palindromo lakers Varios 24 24-05-2007 00:34:05
Como averiguar los procesos inactivos abracadabra API de Windows 0 16-12-2005 22:36:59
Como averiguar el usuario de windows Telemaco PHP 8 26-07-2004 10:15:10
Como averiguar si hay un campo en la Db Jose Manuel Tablas planas 3 23-08-2003 19:08:50


La franja horaria es GMT +2. Ahora son las 15:41:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi