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 :

probleme implémentation code crypto chiffre de césar


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut probleme implémentation code crypto chiffre de césar
    Bonsoir à tous ,

    j'essaie de mettre un code crytpo méthode césar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void decalage (char *chaine, int cle){
    		if (chaine){
    		int i,j;
    				const char alphabet[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z'};
    				for (i=0;i<strlen(chaine);i++){
    					for(j=0; j<strlen(alphabet);j++)
    						if(chaine[i]==alphabet[j]) chaine[i] = alphabet[(j+cle)%26];
     
    																} 
    			}
    			else {exit(1);}
    	}

    quand je l'applique sur mon texte par exemple en utilisant 2 comme clé ça m'affiche un texte complets avec que des a et b , si je choisi 3 j'aurai un texte avec a et b et c seulement , alors que ce n'est pas à ce que je m'attends .
    pourriez vous m'indiquer qu'est ce qui cloche SVP , merci

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    basiquement il te manque un break sur ta boucle j, en effet si tu essayes de chiffrer disons la lettre 'h' avec la clé 13, celle ci va devenir un 'u', mais comme la boucle continue de tourner sur l'alphabet, quand on va rencontrer le 'u' on va à nouveau le chiffrer et ça va redonner un 'h'
    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
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    char * decalage (char *chaine, int cle) {
        if (!chaine) return NULL;
     
        int i,j;
        const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
     
        for (i = 0; i < strlen(chaine); i++) {
            for(j = 0; j < strlen(alphabet); j++) {
                if(chaine[i]==alphabet[j]) {
                    chaine[i] = alphabet[(j+cle)%strlen(alphabet)];
                    break;
                }
            }
        }
        return chaine;
    }
     
    int main (void) {
        char chaine[] = "hello world !";
        printf ("%s\n", chaine);
        printf ("%s\n", decalage (chaine, 13));
        printf ("%s\n", decalage (chaine, 13));
        return 0;
    }

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hakim lyonnais Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void decalage (char *chaine, int cle){
    		if (chaine){
    		int i,j;
    				const char alphabet[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z'};
    				for (i=0;i<strlen(chaine);i++){
    					for(j=0; j<strlen(alphabet);j++)
    						if(chaine[i]==alphabet[j]) chaine[i] = alphabet[(j+cle)%26];
     
    																} 
    			}
    			else {exit(1);}
    	}

    Bonjour
    Tu n'as pas le droit d'appeler strlen() pour "alphabet" car ce n'est pas un chaine (il n'y a pas de '\0' qui termine ce tableau). Et on ne sort pas d'une fonction par exit().

    Accessoirement vaut mieux essayer de ne pas utiliser strlen() de façon aussi systématique. N'oublies pas qu'il s'agit d'une fonction qui effectue un travail de recherche. Si tu l'inclus comme condition de fin du for, elle est appelée à chaque tour de boucle...

    Code c : 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
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    char * decalage (char *chaine, int cle) {
        if (!chaine) return NULL;
     
        int i,j;
        const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
        size_t sz_alpha;
     
        sz_alpha=strlen(alphabet);
        for (i = 0; chaine[i] != '\0'; i++) {
            for(j = 0; alphabet[j] != '\0'; j++) {
                if(chaine[i]==alphabet[j]) {
                    chaine[i] = alphabet[(j+cle)%sz_alpha];
                    break;
                }
            }
        }
        return chaine;
    }
     
    int main (void) {
        char chaine[] = "hello world !";
        printf ("%s\n", chaine);
        printf ("%s\n", decalage (chaine, 13));
        printf ("%s\n", decalage (chaine, 13));
        return 0;
    }

    Et tu peux en plus éviter ces appels répétés à [i] en passant par des pointeurs de chaines, ça optimise encore un peu plus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour , merci a vous de m'avoir aidé

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    excusez moi du dérangement , mais en faite quand j’essaie de faire le décodage maintenant celà ne marche pas bien , à partir d'un certain chiffre de clé ça déchiffre pas

    voici le 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
     
    	char* decalagedecode (char *chaine, int cle){
    		if (!chaine) return NULL;
     	    int i,j;
        	const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
        	size_t sz_alpha;
        	sz_alpha=strlen(alphabet);
        	for (i = 0; chaine[i] != '\0'; i++) {
            	for(j = 0; alphabet[j] != '\0'; j++) {
                	if(chaine[i]==alphabet[j]) {
                		chaine[i] = alphabet[(j-cle)%sz_alpha];
                    	break;
               		 }
            	}
       		 }
        	return chaine;
    	}

    pourriez vous m'indiquer à nouveau où est ce qu'il se situe le problème ?

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hakim lyonnais Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine[i] = alphabet[(j-cle)%sz_alpha];
    pourriez vous m'indiquer à nouveau où est ce qu'il se situe le problème ?
    Pfff... Ce n'est pas parce que tu as commencé des études d'informatique qu'il faut arrêter de réfléchir. Tu t'es demandé un peu ce que pourrait bien donner "j-cle" quand "j" vaut 2 et que "cle" vaut 5 ???!!!???

    PS: c'est quand-même malheureux: on te donne une fonction super bien écrite, bien indentée proprement, agréable à lire et t'es même pas capable de la recopier avec une indentation correcte !!! Ben tu vois, la façon d'écrire représente souvent la façon de travailler...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme de code
    Par fixouille90 dans le forum Access
    Réponses: 11
    Dernier message: 09/12/2005, 15h23
  2. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  3. [VB.Net] Probleme popup code behind
    Par balibo dans le forum ASP.NET
    Réponses: 19
    Dernier message: 17/10/2005, 12h22
  4. probleme de code formulaire
    Par bachilbouzouk dans le forum ASP
    Réponses: 45
    Dernier message: 13/04/2005, 10h01
  5. [debutant] probleme de code :-(
    Par flogreg dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 16/08/2004, 18h20

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