IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Chiffre de Vigenere


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut Chiffre de Vigenere
    bonjour
    j'ai un probleme en ce programme.le probleme est que l'operation de cryptage n'est pas realiser.et voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<ctype.h>
    void main()
    {
     
    	char *alphabet="abcdefghijklmnopqrstuvwxyz";
    	char texte[200];//texte à coder
    	char *ptexte=texte;
    	char clef[20];//la clé
    	char *pclef=clef;
    	char crypte[200];
    	char *p=crypte;//le texte crypte
    	int lgtexte;//longueure du texte à crypter
    	int lgclef;//longueure de la clef
    	//int nbocc,rbocc;//nombre d'occurence de clef
    	/* cryptage */
    	puts("+++taper le texte à coder+++  \n");
    	gets(texte);
    	lgtexte=strlen(texte);
    	printf("+++taper la clef+++ \n");
    	gets(clef);
    	lgclef=strlen(clef);
    	//rbocc=lgtexte%lgclef;
    	//nbocc=(lgtexte-rbocc)/lgclef;
     
    	int i=0;
    	do
    	{
    		int j=0;
     
    		do
    		{
    			if(isalpha(*(ptexte+i)!=0))
    			{			
    				int k=0;
    				*(p+i)==(*(ptexte+i)+*(pclef+j)-2*'a')%26+'a';
    				//printf("%d",k);
    				//*ptexte=alphabet[k];
    				i++;
    				j++;
    			}
    			else
    				i++;
     
    		}
    		while(*(pclef+j)<lgclef);
     
    	}
    	while(*(ptexte+i)<lgtexte);
    	puts("/*message crypte*/");
    	 puts(crypte);
    }

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    *(p+i)==(*(ptexte+i)+*(pclef+j)-2*'a')%26+'a';
    t'es sure que c'est un "==" et non pas un simple "="???!!

    PS : Pense aux balises [ CODE ]

  3. #3
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    salut,

    déjà, évite les déclarations en plein milieu de code (i et j), surtout dans une boucle.

    ensuite, je ne sais pas si les parenthèses de

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

    sont bien agencées. Je ne sais pas ce que fais isalpha mais je pense que ça renvoie un int. dans ce cas-là c'est plutôt

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

    ou encore mieux

    if(isalpha(*(ptexte+i)))


    D'autre part,

    je ne sais pas si tes boucles font exactement ce que tu voudrais. Je n'ai pas envie de tester ni de me mettre à fond dedans (désolé ) mais si j'étais toi je vérifierait le comportement de mon code en faisant des printf("\n valeur de i : %d valeur de j : %d valeur de texte %s", i, j, texte); fin tu vois le principe.

    et le message de zehle est pertinent à mon sens.

    derniere chose, lgtexte et lgclef sont inutiles. strlen est fait pour ça.

    bon courage

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Il y a aussi un problème sur les tests de fin de boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            }
        while(*(pclef+j)<lgclef);
        }
    while(*(ptexte+i)<lgtexte);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            }
        while(j<lgclef);
        }
    while(i<lgtexte);
    En tenant compte des deux messages précédant, on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<ctype.h>
    int main(void)
    {
     
        char *alphabet = "abcdefghijklmnopqrstuvwxyz";
        char texte[200];            //texte à coder
        char *ptexte = texte;
        char clef[20];              //la clé
        char *pclef = clef;
        char crypte[200];
        char *p = crypte;           //le texte crypte
        int lgtexte;                //longueure du texte à crypter
        int lgclef;                 //longueure de la clef
    /* cryptage */
        puts("+++taper le texte à coder+++ \n");
        gets(texte);
        lgtexte = strlen(texte);
        printf("+++taper la clef+++ \n");
        gets(clef);
        lgclef = strlen(clef);
     
        int i = 0;
        do {
            int j = 0;
     
            do {
                /* attention aux parenthèses */
                if (isalpha(*(ptexte + i))!= 0) {
                    /* = à la place de == */
                    *(p + i) =
                        (*(ptexte + i) + *(pclef + j) - 2 * 'a') % 26 + 'a';
                    i++;
                    j++;
                } else {
                    i++;
                }
            }
            /* attention aux condition de sortie */
            while (j < lgclef);
        }
        while (i < lgtexte);
        puts("/*message crypte*/");
        puts(crypte);
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +++taper le texte à coder+++
     
    hello
    +++taper la clef+++
    foobar
    /*message crypte*/
    mszmo

Discussions similaires

  1. decryptage de chiffre de vigenere
    Par chroufa87 dans le forum C
    Réponses: 1
    Dernier message: 29/05/2009, 14h17
  2. extraire 2 chiffres après virgule ?
    Par nerick dans le forum C
    Réponses: 2
    Dernier message: 13/12/2002, 17h10
  3. [VB6] [Printer] Chiffres alignés à droite
    Par Laye dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/10/2002, 18h36
  4. Chiffre a Virgule Fixe
    Par garybaldi dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 10h41
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo