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

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