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

Pascal Discussion :

[Débutante] Exercice de conversion majuscules <-> minuscules


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 20
    Points
    20
    Par défaut [Débutante] Exercice de conversion majuscules <-> minuscules
    Salut
    Pouvez vous me dire comment résoudre cet exercice?? car je suis débutante et j'ai pas su comment le résoudre
    L'énoncé:
    Ecrire une analyse, un algorithme et sa traduction en pascal d'un programme qui permet d'afficher le minuscule d'un caractère donné en majuscule.
    Voilà, j'attends votre réponse et Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    Est-ce l'énoncé qui te pose problème?

    Sinon, pour avoir plus de précision, ce qu'on demandait c'est d'entrer au clavier "A" et que ça retourne "a" par exemple?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Oui c'est ça, mais quels sont les étapes à faire pour arriver à afficher "A" (par exemple) en miniscule??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    Je pense qu'il y a différente façon de faire. Par exemple, si tu te renseignes pour calculer en pascal le code ASCII d'une lettre, tu vérifies qu'il est dans une certaine plage et pour avoir le code ASCII de la lettre minuscule correspondante, tu additionnes ce qu'il faut (si ce que je dis te sembles incompréhanssible, dis-le je serais plus précis).

    Sinon, on peut vouloir simplement te faire un programme qui teste si on a rentré "A", et le cas échéant on affiche "a". Tu vois comment faire ça?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Non je n'ai pas compris comment faire???
    Moi je comprends losrque vous me montrez l'algorithme, ça m'a parru difficile de changer en minuscule car je ne sais pas quels sont les opérateurs que je dois utiliser pour arriver au résultat voulu.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    tu beaucoup!

    Si tu cherches une fonction du genre mettre_en_petit(A), ça peut exister mais son utilisation ne sera en rien un exercice...

    Voilà ma première suggestion :
    tu lis une lettre
    tu testes si c'est un A,
    et si ç'en est un, tu affiches a
    sinon tu testes si c'est un B,
    et si ç'en est un, tu affiches b
    ...

    ça te donne des idées? Et si tu as étudié d'autres controles que if then... tu trouveras mieux


    Ma deuxième suggestion est mieux, mais suppose que tu vois ce que j'entend par code ASCII. Si ce n'est pas le cas, renseigne toi (en gros, c'est un code pour chaque caractère; A=065, B=066... a=097, b=098...). Reste à savoir comment manipuler ça dans pascal.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Merci, j'ai demandé de la'ide car je vais passer un devoir d'info après une heure, donc un peu perturbée
    J'ai pas encore des bonnes connaissances en pascal mais ça n'empeche ue je vais m'ameliorer!
    J'ai compris les suggestions
    Salut

  8. #8
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    bonjour,
    Citation Envoyé par apqmwnqmap
    Voilà ma première suggestion :
    tu lis une lettre
    tu testes si c'est un A,
    et si ç'en est un, tu affiches a
    sinon tu testes si c'est un B,
    et si ç'en est un, tu affiches b
    ...
    c'est un code qu'on pourra faire mais à éviter car tu imagine bien qu'on va faire des test sur toutes les lettres de l'aphabet(26 tests ) meme pour un debutant je ne le conseillerai pas c'est une mauvaise habitude ,
    la deuxieme idéé me parait plus interessant
    1...
    sahant que le code ascii de A est 65 celui de Z est 65+25 donc pour savoir si le caractere entré est en lettre majuscule il faut faire un test sur son code ascii et sil est bien dans l'intervalle alors tu peux passer a la conversion
    2...
    Plus simple a faire et pour pas de casser la tete tester si le caractere est compris entre 'A' et 'Z' alors c'est un majuscule

    bon maintenant si je te dis que le code ascii de 'a' est 97 alors tu penses a quoi?

    Bon tout ça c'est quand on connait pas trop les mots clés de pascal sinon il y une fonction dans pascal qui converti une lettre majuscule en letre miniscule :Upcase voila ca t'evite d'ecrire des lignes de codes qui t'auront sans doute appris pas mal de choses ,et au moins tu auras compris par toi meme comment cette fonction fonctionne ,pour ces genres de choses tu pourras ausi regarder dans l'aide de pascal les mots clés qui existent et voir ce qu'il font
    @
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    Voilà ce que je me suis dis en postant ma réponse :

    La première idée d'un débutant doit etre de tester chaque cas, car on ne sait pas manupuler les lettres dans l'ordre alphabetique comme on manipule les nombres. Donc si on n'a pas pensé à ça, il faut donner cette solution, parce qu'on a louppé quelque chose.

    Ce n'est qu'après avoir pensé à ça que l'on peut essayer d'utiliser la structure du problème (il y a une logique dans le fait de transformer "A" en "a"). Et là il faut savoir que l'on peut manipuler les caractères par leur code ASCII par exemple (ou leur valeur binaire, pourquoi pas)


    Pour ces raisons, je pense que je répondrais au même post de la même manière. Comprends-tu mon point de vue?

  10. #10
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    Je suis en premiere année d'info, et voila ce que je propose;

    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
    Program majorMin;
        function Maj_or_Min(c :CHAR) :CHAR;
        var
            res :CHAR;
        Begin
            res:= c;  // tout ce qui n'est pas lettre ne varie pas
            if ('a' <= c) and (c <= 'z') then
                res:= chr( ord('A') + (ord(c) - ord('a')) )     // UpCase
     
            else if ('A' <= c) and (c <= 'Z') then
                res:= chr( ord('a') + (ord(c) - ord('A')) );  // LowerCase
     
        Maj_or_Min:= res;
        End;
     
    Begin
      writeln('''a'', ''z'', ''1'', ''A'', ''Z''; donnent');
      writeln(Maj_or_Min('a'),Maj_or_Min('z'),Maj_or_Min('1'),Maj_or_Min('A'),Maj_or_Min('Z'));
    End.

  11. #11
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Si on examine les codes des caractères au niveau binaire, on trouve une méthode extrêmement simple :
    Majuscules (de 41h à 5Ah) : 0100 0001 à 0101 1010
    Minuscules (de 61h à 7Ah) : 0110 0001 à 0111 1010
    Un seul bit de différence : le n° 5.

    Donc, pour mettre en majuscule sans avoir à tester s'il s'agit déjà d'une majuscule ou d'une minuscule, il faut trouver une opération logique qui force dans tous les cas le bit 5 à 0. Pour mettre en minuscule, c'est la même chose sauf qu'il faut forcer à 1.

    Mais je ne sais pas si tu as le droit d'utiliser les instructions and et or ? Oups, je viens de donner un indice, là.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  12. #12
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonsoir,

    J’ai fais un module automatique au premier semestre et j’ai compris l’astuce ;
    Il suffit de faire :
    De min vers maj:
    ord(c) and 223
    = ord(c) and 11011111
    = ord(c) and DFh


    De maj vers min:
    ord(c) or 32
    = ord(c) or 00100000
    = ord(c) or 20h
    Mieux si on ne prend pas en compte le fait que ce soit en min ou en maj;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Ord(c) xor 32             //si c'est en maj ça passe en min
      = Ord(c) xor 00100000    //si c'est en min ça passe en maj
      = Ord(c) xor 20h
    En tout cas merci Alcatiz, je n’y aurais jamais pensé;
    toutefois je ne vois pas encore comment je vais coder ça en Pascale, en AMS peut-être ?
    Remarque : j’ai testé les codes sur ma TI89 (et oui c’est sur ti que j’ai appris à programmer).
    Sur ma ti ça marche ; mais si les codes ASCII ne sont pas les mêmes sur PC, ça risque pas de marcher.

  13. #13
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Ultima
    toutefois je ne vois pas encore comment je vais coder ça en Pascale, en AMS peut-être ?
    Un transtypage de char vers byte et une instruction and ou or. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Byte(caractere) := Byte(caractere) and $20;
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  14. #14
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    cool la methode de Alcatîz, deja j'essaie de le comprendre et c'est top
    @
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  15. #15
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Je n'ai vraiment rien compris! Pouvez-vous simplifier ?
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  16. #16
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour katrena99,
    Peux-tu expliquer ce que tu n’as pas compris exactement ?
    Je te propose un code à tout hasard.
    N’hésites pas à poser des questions (précises).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        function majmin(c :CHAR) :CHAR;
        var
          res :CHAR;
        Begin
          res:= c;
          ord(res):= (ord(res) xor $20);   // On agit directement sur ord(c)
    //    BYTE(res):= BYTE(res) xor 32;    // Autre possibilitée
        majmin:= res;
        end {majmin};

  17. #17
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Salut!

    ord(res):= (ord(res) xor $20)

    que veulent dire xor et $20 ?
    et byte, je croyais que c'était un type pas une fonction...
    merci
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  18. #18
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    La première ligne res xor $20 signifie qu'on effectue une opération logique de type ou exclusif entre la variable res, et $20. $20 vaut 32 en décimal, ca qui correspond au nombre 00100000 en binaire. Cette opération va donc transformer le 5ème bit de res, en le faisant passer de 1 si il est à 0, et à 0 si il vaut 1.

    Et byte est bien un type, l'opération effectuée ici est un transtypage : on dit au compilateur de traiter la valeur suivie entre parenthèses comme un byte. Ici on transtype un char en byte. Le résultat est le même, car byte et char sont codé sur un octet.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  19. #19
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    ok merci.
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    salut
    waw, j'ai rien compris!! je savais pas que pascal est aussi difficile
    j'éspère qu'un jour j'arriverai à comprendre ces trucs que vous écrivez

Discussions similaires

  1. [Batch] Conversion Majuscule - minuscule en DOS
    Par SergeBl dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 19/10/2011, 23h24
  2. Conversion majuscule minuscule en html
    Par STEPHANE777 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/11/2008, 11h13
  3. Réponses: 2
    Dernier message: 18/02/2007, 01h47
  4. [VB6] Conversion Majuscule/Minuscule
    Par jerzy59 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 17/05/2006, 11h58
  5. [68k] Conversion majuscule en minuscule
    Par cinefanfan dans le forum Autres architectures
    Réponses: 2
    Dernier message: 19/12/2005, 09h26

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