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

[0] Índice de Mensajes

Ir a la versión completa