• Viernes 8 de Noviembre de 2024, 18:00

Autor Tema:  Código de César en C  (Leído 3326 veces)

Alehtokita

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Código de César en C
« en: Miércoles 2 de Mayo de 2012, 23:19 »
0
lo que pasa es que tengo este codigo
Código: [Seleccionar]
#include <stdio.h>
#include <string.h>


char *claro="abcdefghijklmnñopqrstuvwxyz";
char *oculto ="DEFGHIJKLMNÑOPQRSTUVWXYZABC";

char* cif(char*);
char* des(char*);

int main(void)
{
  char texto[300];
  char *mod;
  fprintf(stdout,"Ingrese texto a cifrar\t:\n");
  fscanf(stdin,"%s",texto);
  mod=cif(texto);
  fprintf(stdout,"\nLa cadena Cifrada es\t:%s\n\n",mod);
  mod=des(mod);
  fprintf(stdout,"La cadena Desifrada es\t:%s",mod);
  getchar();
  getchar();
  return 0;
}

char* cif(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(claro);i++)
      {
         if(*(text+j)==*(claro+i))
         {
         *(text+j)=*(oculto+i);
         }
      }
    }
    return text;
}

char* des(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(claro);i++)
      {
         if((*(text+j))==*(oculto+i))
         {
         *(text+j)=*(claro+i);
         }
      }
    }
    return text;
}

es el encriptado de César , y lo que hace es correr cada letra del alfabeto tres posiciones, el profesor me pidió que lo cambiara para ingresar el número de posiciones, es decir que ya no sean 3.. pero no sé como hacerlo.. y luego tengo que agregar los parámetros desde la línea de ordenes donde "-e" sea encriptar y "-d" desencriptar.. y otro donde se ingresen las posiciones que tiene que mover...es para ya! URGENTE POR FAVOOOR  :ayuda:

Alehtokita

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re:Código de César en C
« Respuesta #1 en: Jueves 3 de Mayo de 2012, 00:19 »
0
Tengo este avance.. pero pide un archivo.. necesito que pida -e cuando encripta y el número de posiciones, que en este caso sería key

#include <stdio.h>
#include <string.h>

int main (int argc, char **argv)
{
    if (argc != 3)
    {
        printf("%s -[e|d] key\n", argv[0]);
        printf("%s -e 3\n", argv[0]);
        exit(0);
    }

    if (argv[1][1] != 'e' && argv[1][1] != 'd')
    {
        printf("%s -[e|d] key\n", argv[0]);
        exit(0);
    }

    char ed = argv[1][1];
    int k = atoi(argv[2]);
    if (k > 25)
        k = k % 26;

    return 0;
}

droezva

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re:Código de César en C
« Respuesta #2 en: Jueves 3 de Mayo de 2012, 16:34 »
0
Bueno no entendí, necesitas que el texto que va a encriptar o desencriptar se encuentre en un archivo

Eriol

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: 00
    • Ver Perfil
Re:Código de César en C
« Respuesta #3 en: Miércoles 9 de Mayo de 2012, 16:50 »
0
No sé si entendí del todo, pero creo que tendrías que modificar los for para que se ejecutaran un número de veces que el usuario decida.

Pues creo desde mi limitado conocimiento que deberías hacer un printf que pregunte al usuario ¿Cuántos espacios desea correr?
Y asignar ese valor a una variable por lo menos t, y las funciones además de recibir el carácter debería recibir la t y los for irían solo hasta i<t.

dayabel15

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Código de César en C
« Respuesta #4 en: Domingo 8 de Julio de 2012, 21:01 »
0
hola estaba revisando un codigo cesar
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define N 80

void encriptarFrase();
void desencriptarFrase();

int largo;
char frase[N];

int main ()
{
    printf("Ingrese la frase: ");
    gets(frase);

    largo = strlen(frase);

    encriptarFrase();
    printf("La frase encriptada es: %sn",frase);

    desencriptarFrase();
    printf("La dfrase desencriptada es: %sn",frase);
    return 0;
}

void encriptarFrase ()
{
    int i;

    for(i=0 ; i<largo ; ++i)
    {
        //convierte las minuscalas a mayuscula.
        *(frase + i) = toupper(*(frase + i));

        //descarta los digitos
        if(isalpha(*(frase + i)))
        {
            //verifica los casos especiales X-Y-Z
            if(*(frase + i) > 87)
            {
                *(frase+i) = *(frase+i) - 23;
            }
            else
            {
                *(frase + i) = *(frase + i) + 3;
            }
        }
    }
}

void desencriptarFrase ()
{
    int i;

    for(i=0 ; i<largo ; ++i)
    {
        if(isalpha(*(frase + i)))
        {
            if(*(frase + i) < 68)
            {
                *(frase+i)= *(frase+i) + 23;
            }
            else
            {
                *(frase+i)= *(frase+i) - 3;
            }
        }
    }
}



pero yo quiero el afin queria darme una idea con este
pero para encriptar
necesito 2 variables mas que es a y b que el usuario les pondra valor y
 tengo que agarrar la posicion de la letra que el usuario coloco * a que es el valor q ue le ponga el usuario y el resultarlo sumarlo mas b
y si es mayor a 27 que 27 es el valor del abecedario entonces lo debe de dividir agarrar el residuo y buscarlo en el abecedario e imprimir la letra que corresponde