• Domingo 22 de Diciembre de 2024, 13:40

Autor Tema:  Sustituir Un Caracter Por Otro Del Alfabeto  (Leído 5745 veces)

fantasma_85

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Sustituir Un Caracter Por Otro Del Alfabeto
« en: Domingo 30 de Marzo de 2008, 23:53 »
0
hola nuevamente a todos y gracias por todas las aportaciones anteriores han sodo muy buenas, chequen este codigo y diganme que puedo hacer para que funcione correctamente...

es un cifrado pos sustitucion, de tal manera que disfrace mi mensaje sustituyendolo por una regla, es decir, un caracter por otro.

debe desplazar el alfabeto una  determinada cantidad. Por ejemplo, si cada letra se desplaza tres lugares, entonces:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z

llegara a ser:

D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,A,B,C

posteriormente se para codificar el mesaje, se sustituye el alfabeto real por el desplazado.

entonces pase parte de esto a Visual...

Dim cadena
Dim X

Private Sub Command1_Click()

cadena= txt1.text

X = Len(cadena)

For I = 1 To X

  if ((I+3) Mod 27) then

     cifra = cifra & Mid(cadena,I,1)

  End If

Next I

tct2.text = cifra

End Function



Al primcipio leo la cadena y me da cuantos caracteres tengo, meto despues un for, pero al hacer la operacion (sumatle al caracter 3 posiciones mas del alfabeto, y sacarle el mod para saber que letra la sustituira, no la hace) esa es mi duda.

Agradecería iuna vez mas al apoyo de todos..

Sagutxo

  • Miembro MUY activo
  • ***
  • Mensajes: 320
    • Ver Perfil
Re: Sustituir Un Caracter Por Otro Del Alfabeto
« Respuesta #1 en: Sábado 5 de Abril de 2008, 00:50 »
0
Salu2.

   Se me ocurre que podias usar el evento keypress para hacer el cambio a la vez que escribes en el campo.

  Utiliza primero pasar a mayusculas o minusculas o bien compara entre las 2 posibilidades.

   Sería muy sencillo.

'  este es el valor decimal de las letras del abecedario, 1º mayúsculas y despues minúsculas, el valor 8 equivale a la tecla retroceso.

Código: Text
  1.   if KeyAscii = 8 Then
  2.   exit sub
  3.  
  4.   elseif (KeyAscii > 64 And KeyAscii < 91) Then
  5.  
  6.     if (KeyAscii > 87) then
  7.     keyascii=(67-(keyascii-90))
  8.     end if
  9.  
  10.   elseif (KeyAscii > 96 And KeyAscii < 123) Then
  11.  
  12.     if (KeyAscii > 120) then
  13.     keyascii=(99-(keyascii-122))
  14.     end if
  15.  
  16.   else ' Elimino valor introducido.
  17.   keyascii=0
  18.   end if
  19.  

'Ten en cuenta que las 'ñ' 'Ñ' tiene valores diferentes
'ñ=164
'Ñ=165

espero no liarte.

 :comp:  :smartass:
Mi mujer tiene un físico bárbaro!!!. Einstein.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Sustituir Un Caracter Por Otro Del Alfabeto
« Respuesta #2 en: Martes 22 de Abril de 2008, 20:43 »
0
Cita de: "fantasma_85"

entonces pase parte de esto a Visual...
Código: Text
  1.  
  2. [color=blue]
  3. Dim cadena
  4. Dim X
  5. Private Sub Command1_Click()
  6.    cadena= txt1.text
  7.    X = Len(cadena)
  8.    For I = 1 To X
  9.        if ((I+3) Mod 27) then
  10.          cifra = cifra & Mid(cadena,I,1)
  11.       End If
  12.    Next I
  13.    tct2.text = cifra
  14. End Function[/color]
  15.  
  16.  

Al primcipio leo la cadena y me da cuantos caracteres tengo, meto despues un for, pero al hacer la operacion (sumatle al caracter 3 posiciones mas del alfabeto, y sacarle el mod para saber que letra la sustituira, no la hace) esa es mi duda.
 
Efectivamente como te dice Sagutxo...

Cometes varios errores, por un lado  en considerar que los valores de las teclas van de 0 a 27.... la "A" empiueza en la posición 65, otro error es que no tomas el valor numérico de la letra para luego sumarle 3, y finalmente que lo metes dentro del condicional del 'mod' ... el bucle 'for' que tienes sería algo como:

Código: Text
  1.  
  2.    dim letra as string  ' la letra tomada
  3.    dim p as byte   ' valor numérico de una letra
  4.    dim nCadena as string  'nueva cadena que se va originando
  5.    for I = 1 to X
  6.         letra= mid$(cadena,I,1)
  7.         p=asc(letra)
  8.         if p > 87 then ' 88=X
  9.             p=65 + (p mod 87)
  10.        else
  11.            p= p +3
  12.        end if
  13.       nCadena = nCadena & chr$(p)
  14.    next
  15.  
  16.  

Sustituye tu bucle por este y te valdría .... es una alternativa al código que te expuso Sagutxo...

Saludos.
«Ma non troppo»
----> ModoVacaciones = False<----