[Ayuda] Como puedo validar esto?

Iniciado por Dreamaker, 28 Mayo 2010, 18:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Dreamaker

Hola a todos, estoy haciendo un programa para convertir palabras a palindromas, donde el código contiene 2 funciones:

Una llamada Verificar() que lo que hace es verificar si la palabra ya es palindroma: Por ejemplo, oro, oso, anana

Y otra llamada Convertir() que en el caso de que la palabra ingresada no sea palindroma, entonces la convierte, ejemplo:

Perro -> PerrorreP
Rata -> RatataR

Está validado para que si la palabra es palindroma, muestre en un label un mensaje diciendo "La palabra ingresada ya es palindroma", si no es entonces la convierte y la muestra

Lo que yo quiero hacer es que si el usuario ingresa numeros o cualquier otra cosa que no sean letras, por ej "*5846-!,,,.." y aprete el boton de Convertir, tire un mensaje al Label diciendo "La palabra ingresada no es válida o la caja de texto está vacía, por favor ingrese otro valor"

Se entiende? Me supongo que es sencillo pero no logro aclararme alguna idea de como hacerlo, les dejo el código principal:

Código (vb) [Seleccionar]
Private Sub cmdConvertir_Click()

'Declaracion de variables

Dim strPalabra As String

'Asignacion de valor

strPalabra = txtValor1.Text

If strPalabra = Verificar(strPalabra) Then
   lblResultado.Caption = "La palabra ya es palindroma" 'Si pasa la verificación de que es palindroma, entonces avisa al usuario de eso"
Else
   lblResultado.Caption = txtValor1.Text & Convertir(strPalabra) 'Si no, entonces la convierte en palindroma
End If

End Sub


Está validado para lo que dije, lo que yo quiero es que diga lo otro en caso de que no sean letras lo que contiene la caja pero que tampoco pueda hacer trampa y poner "adsd5648"

Gracias, a ver si se les ocurre algo :huh:

PD: El problema es que ya probé poniendo con un Select case y los 3 casos, si es palindroma, si es distinto de palindromo (pero en este caso "*46541" como no es palindroma me la convertiría igual)

Shell Root

#1
Podrías usar expresiones regulares. Como está:
Código (RegExp) [Seleccionar]
[a-zA-Z]
Donde solo acepta Letras Minúsculas y Mayúsculas. En caso de ingresar un carácter especial o un numero no se cumpliría la RegExp.

Por ejemplo: (Aunque me falto la validación que mensionabas)
Código (php) [Seleccionar]
<?php /* #!/usr/bin/php

Autor: Shell Root
Archivo: PoC.php
Descripción: Verificación si una o varías palabra son palindromás

*/


    /* Verificamos la cantidad de parámetros */
    
if(sizeof($_SERVER['argv']) == 2){
  
$strOriginal str_replace(' '''$_SERVER['argv'][1]);
  
  $strInvertida strrev($strOriginal);
    
if(strtolower($strOriginal) == strtolower($strInvertida)){
  
echo "Es palindroma \n";
echo strtolower($_SERVER['argv'][1])."\n";
echo strrev(strtolower($_SERVER['argv'][1]))."\n";
  
}else{
  
echo "No es palindroma \n";
echo strtolower($_SERVER['argv'][1])."\n";
echo strrev(strtolower($_SERVER['argv'][1]))."\n";
  
}
    }else{
        echo 
"\n  Modo de uso: php PoC.php [Oración o Palabra] \n";
        echo 
"       PoC: php PoC.php hola \n";
        echo 
"       PoC: php PoC.php 'anita lava la tina \n\n";
    }

?>

PoC:
Código (bash) [Seleccionar]
shellroot@alex-laptop:~/Escritorio$ php PoC.php oso
Es palindroma
oso
oso
shellroot@alex-laptop:~/Escritorio$ php PoC.php 'Anita lava la tina'
Es palindroma
anita lava la tina
anit al aval atina
shellroot@alex-laptop:~/Escritorio$ php PoC.php 'No se que poner aqui'
No es palindroma
no se que poner aqui
iuqa renop euq es on
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Dreamaker

Pero estamos en visual basic, no sé programar en C :xD

Shell Root

No es C, es PHP, y solo te di un ejemplo.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

BlackZeroX

[b]lo peor que se puede hacer en un lugar de un tema fijado es relacionarlo con otro cuando este no le importa en lo absoluto al individuo sudicho, aquen que lo de expresiones regulares esta bien... pero el ejemplo esta pesimo en este subforo.[/b]

* Aqui la liga a expresiones regulares en vb6.0.

http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/166-expresiones-regulares.htm

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Karcrack

Con un poco de logica y StrReverse() tienes mas que suficiente ;)

Dreamaker

Claro Karcrack pero la idea no es usar funciones del vb (que yo se que hay muchas) sino crear mis propias funciones, ya que cuando te pasas a otro lenguaje las funciones no son todas igual y varían algunas, la idea es aprender a programar completamente para poder migrar a cualquier otro lenguaje apenas cambiando la sintaxis y aprendiendo unos detalles más (como punteros y todo eso) :laugh:

Todavía no me pude ingeniar una idea para hcerlo :-\

BlackZeroX

lo que dices se entiende de por medio desde que empiesas a programar, solo que hay que saber que hace X funcion despues puedes recrearla sin problemas, si no sabes que hace entonces en C/C++ como ejemplos no migrarias tan facil.

En resumen solo hay que saber que hace X funcion lo demas es logica rudimentaria en la migracion a otro lenguaje X.

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

#8
estoy aburrido asi que hice esto para vos nos vemos.

Son dos funciones para que compares que onda con lo que se te dice arriba un poco:

las funciones son similares como vez xP

Código (vb) [Seleccionar]


'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel )            //
' //                                                            //
' // Web: http://InfrAngeluX.Sytes.Net/                         //
' //                                                            //
' // |-> Pueden Distribuir Este Codigo siempre y cuando         //
' // no se eliminen los creditos originales de este codigo      //
' // No importando que sea modificado/editado o engrandesido    //
' // o achicado, si es en base a este codigo                    //
' ////////////////////////////////////////////////////////////////

Option Explicit
Option Compare Text

Public Function vbReverse(ByVal StrInOri As String) As String
Dim TmpChar             As String * 1   '   //  TmpChar = Space(1)
Dim Stringhalf          As Long
Dim StringLen           As Long
Dim Index_String        As Long
Dim index_StrInOri      As Long
   If Not Len(StrInOri) <= 1 Then
       StringLen = Len(StrInOri)
       Stringhalf = StringLen / 2
       For index_StrInOri = 1 To Stringhalf
           TmpChar = Mid$(StrInOri, index_StrInOri, 1)
           Index_String = StringLen - index_StrInOri + 1
           Mid$(StrInOri, index_StrInOri, 1) = Mid$(StrInOri, Index_String, 1)
           Mid$(StrInOri, Index_String, 1) = TmpChar
       Next
   End If
   vbReverse = StrInOri
End Function

Public Function EsPalidromoAlt(ByVal StrInOri As String) As Boolean
   EsPalidromoAlt = StrInOri = vbReverse(StrInOri)
End Function

Public Function EsPalidromo(ByVal StrInOri As String) As Boolean
Dim TmpChar             As String * 1   '   //  TmpChar = Space(1)
Dim Stringhalf          As Long
Dim StringLen           As Long
Dim Index_String        As Long
Dim index_StrInOri      As Long
Dim TmpStr              As String
   If Not Len(StrInOri) <= 1 Then
       StringLen = Len(StrInOri)
       Stringhalf = StringLen / 2
       TmpStr = Space(StringLen)
       For index_StrInOri = 1 To Stringhalf
           Index_String = StringLen - index_StrInOri + 1
           Mid$(TmpStr, index_StrInOri, 1) = Mid$(StrInOri, Index_String, 1)
           Mid$(TmpStr, Index_String, 1) = Mid$(StrInOri, index_StrInOri, 1)
       Next
   End If
   EsPalidromo = StrInOri = TmpStr
End Function



Código (vb) [Seleccionar]


Private Sub Form_Load()
Const vConst As String = "peep"
   MsgBox vbReverse(vConst)
   MsgBox EsPalidromo(vConst)
   MsgBox EsPalidromoAlt(vConst)
End Sub



funciones alternativas

Código (vb) [Seleccionar]


Public Function EsPalidromo(ByVal StrInOri As String) As Boolean
   EsPalidromo = StrInOri = StrReverse(StrInOri)
End Function



P.D.: las funciones son similares como vez si hay dudas avisa.

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Dreamaker

Cuando pones:

Código (vb) [Seleccionar]
Dim TmpChar             As String * 1

Es para declarar que la variable contendrá un carácter y por eso se coloca el *1?

Para qué es necesario? Declarando que contendrá un sólo carácter ocupa menos memoria que si le pones un sólo caracter sin poner el *1?