Título: Cifrado de cesar en [C] [?]
Publicado por: katy09811 en 19 Julio 2015, 01:27 am
disculpen tengo un problema en c ya que que tengo q hacer que un programa m de el cifrado de cesar tengo esto pero no m sale la frac cifrada alguien que m ayude por fa,gracias #include<stdio.h> #define LONG_MAX 30 void mayuscula(char *fraseOriginal_prt); int cifrar(char *fraseOriginal_ptr,char *fraseConvertida_ptr,int clave); int main(){ char fraseOriginal[LONG_MAX]; char fraseConvertida[LONG_MAX]; int clave,opcion; printf("Cifrado de cesar"); printf("\nCadena original:"); fgets(fraseOriginal,LONG_MAX,stdin); mayuscula(fraseOriginal);//En este caso la misma cadena de entrada guardara los valores convertidos a mayuscula. printf("Ingrese clave:"); scanf("%d", &clave); printf("Digite 1 para cifrar o 2 para descifrar:"); scanf("%d",&opcion); printf("\nCadena mayuscula:%s",fraseOriginal); if(opcion == 1){ cifrar(fraseOriginal,fraseConvertida,clave); printf("Cadena cifrada:%s",fraseConvertida); // }else if(opcion == 2){ // descifrar(fraseOriginal,fraseConvertida,clave); // printf("Cadena descifrada:%s",fraseConvertida); }else{ printf("OPCION NO RECONOCIDA"); } return 0; } void mayuscula(char *fraseOriginal_ptr){ while(*fraseOriginal_ptr){ if(*fraseOriginal_ptr>='a' && *fraseOriginal_ptr<='z'){ *fraseOriginal_ptr = *fraseOriginal_ptr-32; } fraseOriginal_ptr++; } return ; } int cifrar(char *fraseOriginal_ptr,char *fraseConvertida_ptr,int clave){ while(*fraseOriginal_ptr){ if(*fraseOriginal_ptr>='a' && *fraseOriginal_ptr<='z'){ *fraseOriginal_ptr = *fraseConvertida_ptr+clave; } fraseOriginal_ptr++; } while(*fraseConvertida_ptr){ if(*fraseConvertida_ptr>='a' && *fraseConvertida_ptr<='z'){ *fraseConvertida_ptr = *fraseConvertida_ptr-32; } fraseConvertida_ptr++; } return fraseConvertida_ptr; }
Mos: los códigos debeniren etiquetas GeSHi
Título: Re: Cifrado de cesar en [C] [?]
Publicado por: crack81 en 19 Julio 2015, 21:43 pm
Mira este codigo a ver si te sirve void cifrar(char cadena[],int clave,int size){ int i; for(i=0;i<size;i++){ cadena[i]=(char)((int)cadena[i]+clave); } } void descifrar(char cadena[],int clave,int size){ int i; for(i=0;i<size;i++){ cadena[i]=(char)((int)cadena[i]-clave); } } int main() { char cadena[]="hola mundo"; cifrar(cadena,13,size); printf("cadena cifrada: %s",cadena ); descifrar(cadena,13,size); printf("\ncadena descifrada: %s",cadena ); return 0; }
Título: Re: Cifrado de cesar en [C] [?]
Publicado por: engel lex en 19 Julio 2015, 21:49 pm
La función cifrar retorna un valor, sin embargo en la linea 19 no se lo asignas a nadie
crack81 tu codigo veo que tiene un error, si colocas letras minúsculas, te colocará caracteres problematicos o no imprimibles
Título: Re: Cifrado de cesar en [C] [?]
Publicado por: ivancea96 en 19 Julio 2015, 22:09 pm
Recordad que si la letra + la clave acaba mayor que 'z' o de 'Z', hay que restarle. void cesar(char* str, int key){ for(; *str; str++) if(*str>='a' && *str<='z') *str = (*str+key-'a')%('z'-'a'+1)+'a'; else if(*str>='A' && *str<='Z'){ *str = (*str+key-'A')%('Z'-'A'+1)+'A'; } } void decryptCesar(char* str, int key){ cesar(str, 'z'-'a'-key+1); }
|