Programación General > Visual Basic 6.0 e inferiores
Sustituir Un Caracter Por Otro Del Alfabeto
(1/1)
fantasma_85:
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:
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 --- if KeyAscii = 8 Then exit sub elseif (KeyAscii > 64 And KeyAscii < 91) Then if (KeyAscii > 87) then keyascii=(67-(keyascii-90)) end if elseif (KeyAscii > 96 And KeyAscii < 123) Then if (KeyAscii > 120) then keyascii=(99-(keyascii-122)) end if else ' Elimino valor introducido. keyascii=0 end if
'Ten en cuenta que las 'ñ' 'Ñ' tiene valores diferentes
'ñ=164
'Ñ=165
espero no liarte.
:comp: :smartass:
Nebire:
--- Cita de: "fantasma_85" ---
entonces pase parte de esto a Visual...
--- Código: Text --- [color=blue]Dim cadenaDim XPrivate 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 = cifraEnd Function[/color]
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.
--- Fin de la cita ---
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 --- dim letra as string ' la letra tomada dim p as byte ' valor numérico de una letra dim nCadena as string 'nueva cadena que se va originando for I = 1 to X letra= mid$(cadena,I,1) p=asc(letra) if p > 87 then ' 88=X p=65 + (p mod 87) else p= p +3 end if nCadena = nCadena & chr$(p) next
Sustituye tu bucle por este y te valdría .... es una alternativa al código que te expuso Sagutxo...
Saludos.
Navegación
Ir a la versión completa