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 :

Problème de test de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut Problème de test de caractère
    Bonjour,
    Je dois réaliser un programme réalisant les contraintes suivantes :
    Cahier des charges:

    L'algorithme proposé utilise une matrice 6x6, identique au codage et au
    décodage. Elle contient 36 caractères : les lettres de A à Z, les chiffres
    de 1 à 9 et l'espace. Le chiffre zéro est représenté par la lettre O.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ABCDEF
    GHIJKL
    MNOPQR
    STUVWX
    YZ 123
    456789
    La clef de chiffrement associée à cette matrice est la concaténation de ses
    lignes :

    "ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789"

    Le message est chiffré par bigrammes, i.e. par groupe de 2 caractères
    successifs. Le chiffrement obéit aux règles suivantes :

    - Si les deux caractères du bigramme représentent deux coins d'un rectangle
    dans la matrice (c'est à dire sont sur 2 lignes et colonnes différentes),
    on les code par les deux coins restants, dans le sens direct.
    Ainsi, avec la matrice ci-dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    VI --> JU
    IV --> UJ
    W3 --> 2X
    - Si les deux caractères sont sur la même ligne, on prend leurs deux voisins de
    droite, modulo la largeur de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EF --> FA
    GJ --> HK
    -Si les deux caractères sont sur la même colonne, on prend les deux voisins du
    dessous, modulo la hauteur de la colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Y4 --> 4A
    KW --> Q2
    - Si les deux caractères sont identiques ou si le bigramme ne contient plus
    qu'un seul caratère (message de longueur impaire), on ne code tout simplement
    pas le bigramme.


    Interface:

    Le programme doit pouvoir s'appeller en ligne de commande, avec comme
    arguments l'options -C pour coder ou -D pour décoder, la matrice de codage
    mise sous la forme d'une chaîne de 36 caractères, et enfin la chaîne à coder
    entre guillemets. Le résultat est afficher sur la sortie standard.

    Exemple:

    $ MC []TP7.EXE -C "ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789" "Bonjour"
    NCPHU R

    $ MC []TP7.EXE -D "ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789" "NCPHU R"
    BONJOUR,

    alors j'ai réussi a récupere ma matrice de codage que je stocke dans mon tableau MATRICE mais je en vois absolument pas comment testé els carractére pour respecter l'algorythme ci dessu.
    voici ma fonction codage pour le moment: mais je ne sait pas comment faire opur tester les lettres une par une dans la chaine de carractére, ni comment les tester pour obtenir la fonction de codage souhaitée:
    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
     
    int codage(char matrice[TAILLE_MATRICE][TAILLE_MATRICE],char *argv[])
    {   int nb;
     
        nb=strlen(argv[3]);
        while(nb>=0)
        {
                    nb=nb-2;// test si nombre multiple de 2 ou pas
        }
        switch(nb)
        {case -2: printf("chaine pair");
              break;
        case -1:
             printf("chaine impair");
             break;
        }
        return 0;
    }
    Toute aide sera la bienvenue parceque la je galére trop ...Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Déjà, pour tester qu'une valeur "nb" est paire ou impaire tu peux utiliser nb % 2 (modulo). Ca évitera la boucle (ingénieuse mais inutile).

    Ensuite pour tester qu'une chaine ne contient que des caractères précis, faut faire une boucle sur chaque caractère de la chaine et vérifier si ce caractère correspond bien à l'ensemble des caractères admis. Si l'un ne correspond pas alors arrêt.
    Les macro "isalnum()", "isalpha()", "isspace()" et autres te seront utiles....
    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]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    merci pour cette réponse j'ai améliorer ma fonction de controle de parité mais je ne sais pas me servir des fonction isalnum... et surtout je doit codé en c et pas c++ et avec les bliobliothéque satndar . Pouvez vous m'aider un peu sur l'utilisation de ces fonction, car en cherchant sur internet j'ai juste trouver que ces fonctions servent a vérifier si le carractére saisie est un chiffre un carractére ou un espace et je ne comprend pas l'utilité ici.
    Merci pour votre aide

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dgac2000 Voir le message
    car en cherchant sur internet j'ai juste trouver que ces fonctions servent a vérifier si le carractére saisie est un chiffre un carractére ou un espace
    Oui c'est exactement ça
    Citation Envoyé par dgac2000 Voir le message
    et je ne comprend pas l'utilité ici.
    Ben c'est ce que j'ai compris de l'énoncé => chaque caractère de la matrice doit être compris entre 0 et 9 et entre A et Z...
    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]

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/06/2005, 15h37
  2. Problème d'affichage des caractères accentués
    Par ostaquet dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 06h58
  3. [FLASH MX2004] Problème de reconnaissance des caractères
    Par Spikefreeman dans le forum Flash
    Réponses: 10
    Dernier message: 04/01/2005, 23h08
  4. Réponses: 3
    Dernier message: 11/10/2004, 17h26
  5. Problème de chaîne de caractères (BSTR)
    Par patvdb dans le forum MFC
    Réponses: 2
    Dernier message: 26/02/2004, 15h44

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