Aidez moi à detecter l 'erreur

hannou_hana -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
voici mon programme de chifre de vigenere en langage c aidez moi à detecter l 'erreur et merci d'avance

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
//char *alphabet = "abcdefghijklmnopqrstuvwxyz";
char texte[100]; //texte à coder
char *ptexte = texte;
char clef[10]; //la clé
char *pclef = clef;
char crypte[100];
char *p = crypte; //le texte crypte
char decrypte[100];
char *pdec=decrypte;
int lgtexte; //longueure du texte à crypter
int lgclef; //longueure de la clef
/* cryptage */
void cryptage(char* ptexte, char* pclef)
{
int i = 0;
do
{
int j = 0;

do
{
if (isalpha(*(ptexte + i))!= 0)
{

*(p + i) = (*(ptexte + i) + *(pclef + j) - 2 * 'a') % 26 + 'a';
i++;
j++;
}
else
{
*(p + i) = *(ptexte + i);
i++;
}
}

while (j < lgclef);
}
while (i < lgtexte);
gets("/*message crypte*/");
gets(crypte);
}
void decryptage(char* p, char* pclef)
{
int i = 0;
do
{
int j = 0;

do {
if (isalpha(*(p + i))!= 0)
{

*(pdec + i) =(*(p + i) - *(pclef + j))%26 +'a' ;

// *(pdec + i) =26+(*(p + i) - *(pclef + j)) +'a';

i++;
j++;
}
else
{
*(pdec+i)=*(p+i);
i++;
}
}
/* attention aux condition de sortie */
while (j < lgclef);
}
while (i < lgtexte);
gets("/*message decrypte*/");
gets(decrypte);
//fonction de majuscules de chaine
char upcase(char* ptexte)
{
if ((texte[i]>=97)&&(texte[i]<=122))
return texte[i]-32;
switch(texte[i])
{
case 'à':return 'A';
case 'â':return 'A';
case 'ä':return 'A';
case 'é':return 'E';
case 'è':return 'E';
case 'ê':return 'E';
case 'ë':return 'E';
case 'ì':return 'I';
case 'î':return 'I';
case 'ï':return 'I';
case 'ô':return 'O';
case 'ö':return 'O';
case 'ò':return 'O';
case 'ù':return 'U';
case 'ü':return 'U';
case 'ç':return 'C'
case 'ñ':return 'N';
default: return texte[i];
}
}

char * upcase_string(char *p)
{
int l=strlen(chaine),i;
char * chaine2=(char*)malloc((l)*sizeof(char));
for(i=0; i<l; i++)
chaine2[i]=upcase(chaine[i]);

return chaine2;
}
// foction qui renvoie la position de c dans chaine. -1 si inexistant //
pos(char c,char *p)
{
int i=0,l=strlen(chaine);
mots=0;
for(i=0,i<l,i++)
for(j=0,j<l,j++)

if(c==chaine[i])
{k=i}
while ((c!=chaine[i]) && (i<l))
if(chaine[i]==' ')
{mots =mots+1}
i++;
if (i==l) return ('la lettre est introuvable')
else prinf(%d éme lettre du %d ème mot de la 1ère phrase du message en clair',i,k)
}

//fonction de lecture de chaine de caractère dans un fichier 'nom_fichier'
char * lecture(char *f1)
{
FILE *f1=fopen(f1,"r");
if (fichier==NULL) return "\0";
int i=0;
char *texte=(char*)calloc(lgtexte,sizeof(char));

while ((i<lgtexte) && (fread(&chaine[i],1,sizeof(char),f1)))
i++;

fclose(fichier);
return texte;
}
//procédure d'écriture d'une chaine dans un fichier
void enregistrer(char *texte, char *f1)
{
FILE *fichier=fopen(FILE,"w");
if (f1==NULL)
{
printf("nom de fichier de sortie invalide");
}

fwrite(texte,sizeof(char), strlen(texte),f1);
fclose(f1);

return;
}
int main()
{
FILE *f1
f1=fopen("C:\\file.txt","r");
if (f1==NULL)
{
printf("L'ouverture a échouée f1\n");
exit(1);
}
else
{
printf("f1 opened\n");
}

printf("+++taper le texte à coder+++ \n");
gets(texte);
fwrite(texte,sizeof(texte),1,f1)
lgtexte = strlen(texte);
printf("+++taper la clef+++ \n");
gets(clef);
fwrite(clef,sizeof(clef),1,f1)
lgclef = strlen(clef);
cryptage(ptexte, pclef);
decryptage(p, pclef);
fclose(f1);
}

1 réponse

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    Bonjour,
    Correction des fonctions avec le filtrage des caractères et mise en majuscules + suppression de toutes les variables globales et modifications qui vont avec, pas touché aux fonction pour l'enregistrement et la lecture dans un fichier alors à vous de les refaire à partir de ça:
    #include<stdio.h>
    #include<string.h>
    
    /* cryptage */
    char *cryptage(char *destination,char* ptexte, char* pclef)
      {
        int i = 0,lgclef=strlen(pclef),lgtexte=strlen(ptexte);
        do
          {
            int j = 0;
            do
              {
                if (isalpha(*(ptexte + i))!= 0)
                  {
                    *(destination + i) = (*(ptexte + i) + *(pclef + j) - 2 * 'A') % 26 + 'A';
                    i++;
                    j++;
                  }
                else
                  {
                    *(destination + i) = *(ptexte + i);
                    i++;
                  }
              }
            while (j < lgclef);
          }
        while (i < lgtexte);
        return destination;
      }
    char *decryptage(char *destination,char* p, char* pclef)
      {
        int i = 0,lgclef=strlen(pclef),lgtexte=strlen(p);
        do
          {
            int j = 0;
            do {
                if (isalpha(*(p + i))!= 0)
                  {
                    *(destination + i) = (*(p + i) - *(pclef + j))%26 +'A' ;
                    i++;
                    j++;
                  }
                else
                  {
                    *(destination + i) = *(p+i);
                    i++;
                  }
            }
            while (j < lgclef);
          }
        while (i < lgtexte);
      }
    //fonction de majuscules de chaine
    char upcase(char c)
      {
        if ((c>=97)&&(c<=122))
            return c-32;
        switch(c)
          {
            case 'à':return 'A';
            case 'â':return 'A';
            case 'ä':return 'A';
            case 'ã':return 'A';
            case 'é':return 'E';
            case 'è':return 'E';
            case 'ê':return 'E';
            case 'ë':return 'E';
            case 'ì':return 'I';
            case 'î':return 'I';
            case 'ï':return 'I';
            case 'ô':return 'O';
            case 'ö':return 'O';
            case 'ò':return 'O';
            case 'õ':return 'O';
            case 'ù':return 'U';
            case 'ü':return 'U';
            case 'û':return 'U';
            case 'ç':return 'C';
            case 'ñ':return 'N';
            default: return c;
          }
      }
    char * upcase_string(char *chaine)
      {
        int i,l=strlen(chaine);
        for(i=0; i<l; i++)
            chaine[i]=upcase(chaine[i]);
        return chaine;
      }
    
    int main()
      {
        char textecrypte[256],textedecrypte[256],texte[256],cle[10];
        printf("+++taper le texte à coder : ");
        gets(texte);
        printf("+++taper la clef : ");
        gets(cle);
        printf("+++Texte : %s\n+++Cle : %s\n",
                upcase_string(texte),upcase_string(cle));
        cryptage(textecrypte,texte,cle);
        printf("\nle texte crypte : %s\n",textecrypte);
        decryptage(textedecrypte,textecrypte,cle);
        printf("le texte decrypte : %s\n",textedecrypte);
      }
    
    0