Autor
|
Tema: Como cifrar letra por letra en C++ (Leído 65,395 veces)
|
CCross
Desconectado
Mensajes: 36
|
rir3760 Muchas gracias el código es lo que buscaba pero obtengo el mismo error anterior el programa se me cierra antes de mostrar los resultados alguien sabe el porque Prueba con poner un getchar(); antes de: return EXIT_SUCCESS;
Buscate un buen libro de C te recomiendo el libro de kernighan y Ritchie que es muy bueno para empezar Saludos
|
|
|
En línea
|
|
|
|
Royca3
|
Prueba con poner un getchar(); antes de: return EXIT_SUCCESS;
Buscate un buen libro de C te recomiendo el libro de kernighan y Ritchie que es muy bueno para empezar Saludos Igual se sale :'( Pues si de echo ya tengo unos manuales pero apenas comienzo Pero porque se sigue saliendo del programa sin mostrar resultados? Saludos.
|
|
|
En línea
|
Homo erectus
|
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Buenas amigos!!
Aquí otra versión del cifrado cesar donde tu puedes indicar el desplazamiento que quieras
No es el cifrado César, te muestro una salida al código que planteas:Introduce una cadena: wikipedia la enciclopedia libre Ingrese desplazamiento: cifrado es: ┘╦═╦ÊÃã╦├
descifrado es: wikipedia
Como ves, en el cifrado se "va más allá" de la z/Z, cuando debería empezar a contar desde la a.
Una solución "a pura fuerza bruta", es decir aplicando estrictamente lo que plantea el cifrado César :/*En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de codificación más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 6.*/ #include <stdio.h> #include<stdlib.h> #include <string.h> int main (void) { int i,n=0,aux; char frase [256]; char cadena []="WIKIPEDIA, LA ENCICLOPEDIA LIBRE \n\ Wikipedia la Enciclopedia Libre f F x X"; puts("WIKIPEDIA, LA ENCICLOPEDIA LIBRE \n\ Wikipedia la Enciclopedia Libre f F x X"); for (i=0;cadena[i]!='\0';i++) { if ((cadena [i]>='u' && cadena [i]<='z') || (cadena [i]>='U' && cadena [i]<='Z' )) cadena [i]-=20; else if (cadena [i]>='a' && cadena [i]<='t' || (cadena [i]>='A' && cadena [i]<='T' )) cadena [i]+=6; } puts("\nY ahora codificada con desplazamiento 6:"); printf ("%s\n",cadena); puts("\nY ahora descodificada: "); for (i=0;cadena[i]!='\0';i++) { if ((cadena [i]<='f' && cadena [i]>='c') || (cadena [i]<='F' && cadena [i]>='C' )) cadena [i]+=20; else if (cadena [i]>'f' && cadena [i]<='z' || (cadena [i]>'F' && cadena [i]<='Z' )) cadena [i]-=6; } printf ("%s\n",cadena); /******* AHORA CON ENTRADA DESDE TECLADO *******/ while (1) { n=0; puts ("\n\nIntroduce una frase: "); fgets (frase,255,stdin); do { printf ("\nIndica el desplazamiento (1-25): "); scanf ("%d",&n); while (getchar()!='\n'); }while (n<1 || n>25); for (i=0;frase[i]!='\0';i++) { if ((frase [i]>('z'-n) && frase [i]<='z') || (frase [i]>('Z'-n) && frase [i]<='Z' )) frase [i]=frase [i]-26+n; else if (frase [i]>='a' && frase [i]<=('z'-n) || (frase [i]>='A' && frase [i]<=('Z'-n) )) frase [i]+=n; } printf("\nCodificada con desplazamiento %d \n",n); printf ("%s\n",frase); puts("\nY ahora descodificada: "); for (i=0;frase[i]!='\0';i++) { if ((frase [i]<('a'+n) && frase [i]>=('a')) || (frase [i]<('A'+n) && frase [i]>=('A') )) frase [i] =frase [i]+26-n; else if ((frase [i]>=('a'+n) && frase [i]<=('z') )|| (frase [i]>=('A'+n) && frase [i]<=('Z') )) frase [i]-=n; } printf ("%s\n",frase); } /*************** :-) OTRA FORMA :-) **********/ return 0; }
Con una salida como esta:WIKIPEDIA, LA ENCICLOPEDIA LIBRE Wikipedia la Enciclopedia Libre f F x X Y ahora codificada con desplazamiento 6: COQOVKJOG, RG KTIOIRUVKJOG ROHXK Coqovkjog rg Ktioiruvkjog Rohxk l L d D Y ahora descodificada: WIKIPEDIA, LA ENCICLOPEDIA LIBRE Wikipedia la Enciclopedia Libre f F x X Introduce una frase: leosansan Abc Xyz Indica el desplazamiento (1-25): 6 Codificada con desplazamiento 6 rkuygtygt Ghi Def Y ahora descodificada: leosansan Abc Xyz
¡Vamos!, a ver si se animan a plantear códigos diferentes, que sean más ingeniosos y/o eficaces. Ya hay una media propuesta de cypascal usando la operación módulo -ver post anteriores-, aunque está incompleto, ya que le falto el descifrado. Saluditos!.
|
|
« Última modificación: 13 Junio 2013, 19:06 pm por leosansan »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Y que sucede si en mi cadena tengo algun caracter estilo " @#$*{}", la tabla ascii no es solo el abecedario.
Un saludo.
|
|
|
En línea
|
|
|
|
Royca3
|
leosansan, Excelente código, Gracias (LA PROGRAMACIÓN ES MÁGICA ) pd. Ya inicie a leer unas guías para aprender C Saludos.
|
|
|
En línea
|
Homo erectus
|
|
|
CCross
Desconectado
Mensajes: 36
|
No es el cifrado César, te muestro una salida al código que planteas: Como ves, en el cifrado se "va más allá" de la z/Z, cuando debería empezar a contar desde la a.
Aqui va una versión mas eficiente #include <stdio.h> #include <ctype.h> int main() { int i, j, des, a, z; char cadena[30] = ""; printf("Ingrese una cadena: "); scanf("%s", cadena); printf("Ingrese desplazamiento: "); scanf(" %d", &des); for(i = 0; cadena[i]!='\0'; i++) { a = 97; if(isupper(cadena[i])) a = 65; cadena[i] =((cadena[i]-a+des)%26)+a; } printf("\nCifrado es: %s \n", cadena); for(j = 0; cadena[j]!='\0'; j++) { z = 122; if(isupper(cadena[j])) z = 90; cadena[j]= ((cadena[j]-z-des)%26)+z; } printf("\nDecifrado es: %s \n", cadena); return 0; }
Saludos
|
|
« Última modificación: 12 Junio 2013, 19:28 pm por CCross »
|
En línea
|
|
|
|
Royca3
|
Son unos programadores grosos! Sucedía lo mismo de siempre, no mostraba el resultado si no que se cerraba le agregue esto y listo... getchar(); getchar(); } eliminando el return 0; Saludos.
|
|
|
En línea
|
Homo erectus
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Son unos programadores grosos! Sucedía lo mismo de siempre, no mostraba el resultado si no que se cerraba le agregue esto y listo... getchar(); getchar(); } eliminando el return 0; Saludos. No elimines el return 0, vas en contra del estándar.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Codificacion en archivos bat, letra ñ
Scripting
|
santi810
|
3
|
12,356
|
1 Diciembre 2013, 18:57 pm
por Eleкtro
|
|
|
[DUDA] Como Desactivar Dispositivos Portátiles Para Que Se Le Asigne Una Letra
Windows
|
KZN
|
3
|
2,976
|
11 Marzo 2014, 17:00 pm
por Randomize
|
|
|
Dibujar letra 'T'
PHP
|
luchi
|
2
|
2,406
|
20 Abril 2014, 22:14 pm
por luchi
|
|
|
Como con una letra direccionarme a la tabla/registro?
Programación C/C++
|
enzopaez14
|
1
|
2,151
|
5 Septiembre 2016, 02:50 am
por AlbertoBSD
|
|
|
Comparar letra una letra en un array, con una letra del abcdario
Programación C/C++
|
Naimaderis
|
2
|
4,006
|
10 Marzo 2017, 04:24 am
por Naimaderis
|
|