Untitled

 avatar
unknown
plain_text
3 years ago
5.0 kB
2
Indexable
#include<stdlib.h>
#include <stdio.h>
#include <string.h>

void decode_caesar(int cheie, char mesaj[])
{
    for(int i=0; i<strlen(mesaj); i++)
    {
        int copie=cheie;

        while(copie)
        {
            if(mesaj[i]=='A')
            {
                mesaj[i]='Z';
            }
            else
            {
                if(mesaj[i]=='a')
                {
                    mesaj[i]='z';
                }
                else
                {
                    if(mesaj[i]=='0')
                    {
                        mesaj[i]='9';
                    }
                    else
                    {
                        mesaj[i]=mesaj[i]-1;
                    }
                }
            }
            copie--;
        }
    }
}
int main()
{
    char cerinta[20];

    fgets(cerinta, sizeof cerinta, stdin);

    if(strcmp(cerinta,"caesar\n")==0) ///caesar
    {
        int cheie;
        scanf("%d",&cheie);

        char mesaj[1001];

        fgets(mesaj, sizeof mesaj, stdin); ///pt buffer
        fgets(mesaj, sizeof mesaj, stdin);

        for(int i=0; i<strlen(mesaj); i++)
        {
            int copie=cheie;

            while(copie)
            {
                if(mesaj[i]=='A')
                {
                    mesaj[i]='Z';
                }
                else
                {
                    if(mesaj[i]=='a')
                    {
                        mesaj[i]='z';
                    }
                    else
                    {
                        if(mesaj[i]=='0')
                        {
                            mesaj[i]='9';
                        }
                        else
                        {
                            mesaj[i]=mesaj[i]-1;
                        }
                    }
                }
                copie--;
            }
        }
    }

    if(strcmp(cerinta,"vigenere\n")==0)
    {
        char cheie[1001],text_criptat[1001],text_decriptat[1001];

        fgets(cheie, sizeof cheie, stdin);

        int dim_cheie=strlen(cheie)-1;

        fgets(text_criptat, sizeof text_criptat, stdin);

        for(int i=0; i<strlen(text_criptat); i++)
        {
            if(text_criptat[i]>='0' && text_criptat[i]<='9')
            {
                char scazut=i%dim_cheie+'0';
                printf("Scazutul este %d\n",scazut);

                text_decriptat[i]=(text_criptat[i]-scazut+9)%9;
                text_decriptat[i]+='0';
                printf("criptarea lui %c este %c\n",text_criptat[i],text_decriptat[i]);
            }
            else
            {
                char scazut=i%dim_cheie+'a';
                printf("Scazutul este %d\n",scazut);
                text_decriptat[i]=(text_criptat[i]-scazut+26)%26;
                text_decriptat[i]+='a';
            }

        }

        for(int i=0; i<strlen(text_criptat)-1; i++)
            printf("%c",text_decriptat[i]);
    }

    if(strcmp(cerinta,"addition\n")==0)
    {
        int cheie;
        scanf("%d",&cheie);

        char primul[1001];

        fgets(primul, sizeof primul, stdin); ///pt buffer
        fgets(primul, sizeof primul, stdin);

        char doilea[1001];
        fgets(doilea, sizeof doilea, stdin);

        decode_caesar(cheie,primul);
        decode_caesar(cheie,doilea);

        strrev(primul);
        strrev(doilea);

        if(strlen(primul)>strlen(doilea))
        {
            for(int i=strlen(doilea); i<strlen(primul); i++)
            {
                doilea[i]='0';
            }
        }
        if(strlen(doilea)>strlen(primul))
        {
            for(int i=strlen(primul); i<strlen(doilea); i++)
            {
                primul[i]='0';
            }
        }
        for(int i=0; i<strlen(primul); i++)
        {
            printf("%c",primul[i]);
        }

        printf("\n");

        for(int i=0; i<strlen(doilea); i++)
        {
            printf("%c",doilea[i]);
        }

        printf("\n");

        int addition=0;
        char rezultat[1001]={0};
        int contor=0,suma=0;

        for(int i=1; i<strlen(primul); i++) ///au lungimea egala primul si doilea asa ar trb
        {
            int numar1=primul[i]-'0';
            int numar2=doilea[i]-'0';

            suma=numar1+numar2;

            if(addition==1)
            {
                suma+=1;
            }

            if(suma>9)
            {
                suma=suma-10;
                addition=1;
            }

            rezultat[contor]=suma+'0';
            contor++;
          ///  printf("suma este %d",suma);
        }


        if(addition==1)
        {
            rezultat[contor]='1';
            contor++;
        }


    strrev(rezultat);

       for(int i=0;i<contor;i++)
        {
            printf("%c",rezultat[i]);
        }

    }




}