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 :

Aide codage cesar


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Aide codage cesar
    Salut a tous,

    Je doit faire un exo ou je doit prendre une phrase et la coder en cesar.
    Voici donc 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
    55
    56
    57
    58
    59
        char phrase[55] = {0};
        char phraseini[55] = {0};
     
        int i;
        int N;
        int erreur = 0;
     
     
     
        printf("Entrez une phrase au clavier :\n");
        fgets(phrase, 55, stdin);
     
        printf("Choisissez le decallage : ");
        scanf("%d", &N);
     
        printf("Voici la phrase code en cesar : \n");
     
        //SAUVEGARDE DE LA PHRASE
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            phraseini[i] = phrase[i];
     
        }
     
        //DEBUT CODAGE
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            if(phrase[i] == ' ')
                printf(" ");
     
            phrase[i] = phrase [i] + N;
     
            if (phrase[i] > 122)
            {
                phrase[i] = phrase[i] - 122;
                phrase[i] = phrase[i] + 96;
            }
     
             if (phrase[i] > 90 && phrase[i] < 97 )
            {
                phrase[i] = phrase[i] - 91;
                phrase[i] = phrase[i] + 64;
            }
     
            printf("%c", phrase[i]);
     
        }
     
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            if (phrase[i] != phraseini[i])
                erreur ++;
     
        }
     
        if (erreur >= 1)
            printf("Il y a eu une erreur lors de l'encodage/decodage");
        else
            printf("La phrase est valide");
    La premiere erreur que j'ai c'est que le programme ne m'affiche rien.
    Si au dessus de mon printf("%c", phrase[i]) je lui met printf("Coucou ") la il va m'afficher mes coucous ainsi que mon codage avant chaque coucou.

    La seconde erreur c'est qu'apres chaque espace il me rajoute un #, je ne voit pas ou il va me le chercher.
    Apres je doit la decoder mais si deja mon encodage marche je me debrouillerai pour le decodage.
    Si quelqu'un veux bien m'expliquer.
    En vous remerciant.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Lorsque tu rencontres un espace, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if(phrase[i] == ' ')
                printf(" ");
    mais tu ne passes pas de suite à l'itération suivante, tu exécutes aussi la suite :
    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
           phrase[i] = phrase [i] + N;
     
            if (phrase[i] > 122)
            {
                phrase[i] = phrase[i] - 122;
                phrase[i] = phrase[i] + 96;
            }
     
             if (phrase[i] > 90 && phrase[i] < 97 )
            {
                phrase[i] = phrase[i] - 91;
                phrase[i] = phrase[i] + 64;
            }
     
            printf("%c", phrase[i]);
    sur ton espace.

    J'attire aussi ton attention sur le potentiel '\n' situé à la fin :
    Citation Envoyé par man fgets
    fgets() lit au plus size - 1 caractères depuis stream et les place dans le tampon pointé par s. La lecture s'arrête après EOF ou un retour chariot. Si un retour chariot (newline) est lu, il est placé dans le tampon. Un octet nul (« \0 ») final est placé à la fin de la ligne.
    Remarque : selon si tu y as droit ou non, certaines parties de ton code peuvent être remplacée par l'utilisation des fonction strcpy et strcmp.

  3. #3
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Tu pourrais, pour traiter l'espace et incrémenter i, utiliser un continue. Du même coup tu pourrais traiter le '\n' mentionner par Winjerome.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(phrase[i] == ' ' || phrase[i] == '\n')
    {
        printf(" ");
        continue;
    }
    Bon tu peux le faire avec if-else aussi (peut être préférable).

    Plus loin quand tu vérifies la validité de l'encodage, si N > 0, phrase[i] va toujours être différent de phraseini[i]. Faudrait peut être plutôt vérifier si l'écart est bon entre les deux tableaux.

    Sinon ça éclaircirait ton code d'utiliser 'a', 'z', 'A' etc au lieu des codes de caractères.


  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos conseils.

    @Winjerome : J'ai effectivement vu l'erreur de l'espace hier soir avant de voir ton message, et bizarement ca marche mieu
    Mais j'ai pas compris pour le '\n'.

    @moins1 C'est vrai qu'au lieu des codes de carac ce serait mieu de mettre les carac je vais le changer de ce pas.

    Et j'ai mal lu mon ennoncer, pour comparer les deux string je peux utiliser la fonction strcmp.

  5. #5
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Simplement tu traites le '\n' et tu lui appliques N. ('\n' vaut 10 m'semble)


  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Voici le nouveau 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include <stdio.h>
     
    int main(void)
    {
        char phrase[55] = {0};
        char phraseini[55] = {0};
     
        int i;
        int N;
        int erreur = 0;
     
     
     
        printf("Entrez une phrase au clavier :\n");
        fgets(phrase, 55, stdin);
     
        printf("Choisissez le decallage : ");
        scanf("%d", &N);
     
        printf("\nVoici la phrase code en cesar : \n");
     
        //SAUVEGARDE DE LA PHRASE
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            phraseini[i] = phrase[i];
     
        }
     
        //DEBUT CODAGE
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            if(phrase[i] == ' ')
                phrase[i] = ' ';
     
            if (phrase[i] != ' ')
            {
                phrase[i] = phrase [i] + N;
     
                if (phrase[i] > 'z')
                {
                    phrase[i] = phrase[i] - 'z';
                    phrase[i] = phrase[i] + '`';
                }
     
                if (phrase[i] > 'Z' && phrase[i] < 'a' )
                {
                    phrase[i] = phrase[i] - '[';
                    phrase[i] = phrase[i] + '@';
                }
            }
     
            printf("%c", phrase[i]);
     
        }//FIN CODAGE
     
        printf("\nVoici la phrase decode en cesar : \n");
     
        //DEBUT DECODAGE
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            if(phrase[i] == ' ')
                phrase[i] = ' ';
     
            if (phrase[i] != ' ')
            {
                phrase[i] = phrase [i] - N;
                if (phrase[i] < 'a')        
                {
                    phrase[i] = phrase[i] - '`';
                    phrase[i] = phrase[i] + 'z'; 
                }
     
                if (phrase[i] > 'Z' && phrase[i] < 'a' )
                {
                    phrase[i] = phrase[i] - '[';
                    phrase[i] = phrase[i] + '@';
                }
            }
     
            printf("%c", phrase[i]);
     
        }//FIN DECODAGE
     
     
        //COMPARAISON
     
        for(i = 0 ; phrase[i] != '\0'; i++)
        {
            if (phrase[i] != phraseini[i])
                erreur ++;
     
        }
     
        if (erreur >= 1)
            printf("\nIl y a eu %d erreur lors de l'encodage/decodage", erreur);
        else
            printf("\nLa phrase est valide");
     
        return 0;
    }
    L'encodage marche bien pas de soucis, mais lors du décodage j'ai un " qui se met en fin de phrase (avec mon decalage = à 3).
    Et petite question qui peut parraitre bete au passage, si je met ma demande de N avant la saisie de ma phrase le programme s'arrete apres la demande de N, pourquoi ?

    Merci

    @moins1 Ok la j'ai compris merci.

    EDIT : Mon profs est passer par la il ma aider a corriger. Merci a vous en tout cas

  7. #7
    Membre actif Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par iMrHiM Voir le message
    Et petite question qui peut parraitre bete au passage, si je met ma demande de N avant la saisie de ma phrase le programme s'arrete apres la demande de N, pourquoi ?
    Surement un problème de buffer clavier. Fait une petite recherche genre "langage c buffer clavier".

    Sinon t'as encoder le '\n'.


  8. #8
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Tu devrais commencer par séparer tout ton code en fonction !

Discussions similaires

  1. Aide codage gestion d'erreur Qr Code reed solomon
    Par bglacial dans le forum Général Java
    Réponses: 0
    Dernier message: 04/01/2012, 15h06
  2. [XHTML 1.0] Aide codage débutant - menu déroulant
    Par tintinspeed dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/01/2011, 15h09
  3. [XL-2003] Aide codage textebox
    Par cabridous dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2010, 11h33
  4. Aide Codage WebService svp
    Par sawkiller dans le forum Services Web
    Réponses: 0
    Dernier message: 04/06/2009, 19h39
  5. aide codage plan 3D
    Par xess91 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 16/01/2009, 23h45

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