Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Tutoriel] Apprendre à programmer avec Ada

problème d'affichage des caractères dans la console

    28 juin 2019 à 14:21:37

    Bonjour,

    je suis arrivée au TP de la bataille navale est j'ai un petit problème d'affichage des symboles :

    j'aimerai avoir les mêmes symboles que la capture suivante (coeur, Smiley et flèches) :

    mais je me retrouve avec des ? dans des carrés.

    Que dois-je changer dans ma configuration pour que cela marche ?

    Je programme avec GNAT 2019 et GPS.

    -
    Edité par Ryumizuhi 28 juin 2019 à 14:22:44

    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2019 à 0:23:00

      Bonsoir,

      Tu avance vite dit donc ^^

      Pourrais-tu envoyer un bout de code de la partie qui pause problème (là où tu fait l'affichage du status) ?

      Tu utilise des string et caractères simple ou étendu (étendu dans le sens Wide_Character, Wide_String) ?

      Voici un petit example utilisant des Wide_Characters :

      with Ada.Wide_Text_IO;
      
      procedure Main is
         use Ada.Wide_Text_IO;
      begin
         Put_Line ("Heart: " & Wide_Character'Val (16#2665#));
         Put_Line ("Smiley: " & Wide_Character'Val (16#263B#));
      end Main;
      



      • Partager sur Facebook
      • Partager sur Twitter
      Ensemble créons l'avenir !
        1 juillet 2019 à 9:12:44


        Bonjour,

        voici le code de Put_Status ainsi que les entête du fichier :

        with Ada.Text_IO;                   use Ada.Text_IO;
        with P_Variables;                   use P_Variables;
        with P_Navire.list;                 use P_Navire.list;
        with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
        with Ada.Integer_Text_IO;
        
        procedure Put_Status (Navire : T_Navire'Class; Pos : T_Position := Gauche) is
              X : Natural;
              Y : constant Natural := 15;
           begin
              if Pos = Gauche
                 then x := 0;
                 else x := 39;
              end if;
              
              Set_Background (White);
              Print ("      " & To_String (Navire.Nom), Black, X, Y);
              Set_Foreground (Light_Red); Goto_XY (X, Y + 1);
              Put ("   " & Character'Val (2) & " "); Put_Point (Navire.Coque);
              Set_Foreground (Green); Goto_XY (X, Y + 2);
              Put ("   " & Character'Val (3) & " "); Put_Point (Navire.Equipage);
              Goto_XY (X, Y + 3); Put ("Puis:") ; Put_Point (Navire.Puissance);
              Goto_XY (X, Y + 4); Put ("Att :") ; Put_Point (Navire.Attaque);
              Goto_XY (X, Y + 5); Put ("Cuir:") ; Put_Point (Navire.Cuirasse);
              Goto_XY (X, Y + 6); Put ("Def :") ; Put_Point (Navire.Defense);
              Goto_XY (X, Y + 7); Put ("Vit :") ; Put_Point (Navire.Vitesse);      
        end Put_Status;
           

        J'ai également fait un test en faisant une boucle pour afficher tout les caractères et j'ai la même chose pour une bonne partie des cinquante premiers  caractères.

        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2019 à 19:57:22

          Désolé pour le temps de réponse.
          En effet, il ne va pas afficher le caractère voulu.
          La raison est que les valeurs données sont celles de la page de code 437 de Windows.
          Or aujourd'hui il ne doit plus utiliser cela, probablement Windows-1252 (je ne suis pas sur Windows, du coup je ne peux pas confirmer).
          Ada utilise le standard Unicode.
          Le type Character ne contient que les caractères définis dans ISO 8859-1 (soit, les caractères ASCII, plus quelques autres caractères).
          Wide_Character contient toute la premiière Basic Multilingual Plane (BMP-0) d'Unicode. C'est généralement suffisant dans la quasi-totalité des cas d'utilisation.
          Sinon il y a Wide_Wide_Character qui contient l'intégralité d'Unicode (les 17 BMP).
          Je te conseillerais du coup d'utiliser les valeurs unicodes plutôt que celles de Windows-437. Je sais que les valeurs viennent de la correction du cours d'Ada, mais ces valeurs ne sont pas correctes pour une utilisation « portable ».
          Je t'ai donné les valeurs dans mon message précédent.
          J'avais fait tout le cours sur Linux, sauf ce TP et le chapitre sur l'interfaçage. J'ai pu donc voir toutes ce qui n'allait pas dans le cours (il y en a pas trois tonnes, mais il y en a quand même). Mais du coup je suis passé à coté de ce problème vue que je n'ai pas fait ce TP…
          • Partager sur Facebook
          • Partager sur Twitter
          Ensemble créons l'avenir !
            4 juillet 2019 à 9:42:26

            Bonjour,

            j'ai essayer le code que tu m'a transmis dans ton message mais voici ce que cela donne :

             Comment faire en sorte que cela m'affiche le symbole et pas son code ?

            procedure Put_Status (Navire : T_Navire'Class; Pos : T_Position := Gauche) is
                  X : Natural;
                  Y : constant Natural := 15;
               begin
                  if Pos = Gauche
                     then x := 0;
                     else x := 39;
                  end if;
                  
                  Set_Background (White);
                  Print ("      " & To_String (Navire.Nom), Black, X, Y);
                  Set_Foreground (Light_Red); Goto_XY (X, Y + 1);
                  Ada.Wide_Text_IO.Put ("   " & Wide_Character'Val (16#2665#) & " "); Put_Point (Navire.Coque);
                  Set_Foreground (Green); Goto_XY (X, Y + 2);
                  Ada.Wide_Text_IO.Put ("   " & Wide_Character'Val (16#263B#) & " "); Put_Point (Navire.Equipage);
                  Goto_XY (X, Y + 3); Put ("Puis:") ; Put_Point (Navire.Puissance);
                  Goto_XY (X, Y + 4); Put ("Att :") ; Put_Point (Navire.Attaque);
                  Goto_XY (X, Y + 5); Put ("Cuir:") ; Put_Point (Navire.Cuirasse);
                  Goto_XY (X, Y + 6); Put ("Def :") ; Put_Point (Navire.Defense);
                  Goto_XY (X, Y + 7); Put ("Vit :") ; Put_Point (Navire.Vitesse);      
               end Put_Status;
            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2019 à 10:27:02

              Hello,

              Je ne fait pas de Ada, mais ce ne serais tout simplement pas ton terminal qui n'aurais pas la police pour afficher les emoji ?

              Tu as essayer sur une console linux ?

              • Partager sur Facebook
              • Partager sur Twitter

              Architecte logiciel - Software craftsmanship convaincu.

                4 juillet 2019 à 11:16:01

                Salut,

                je suis sur windows avec un .exe à lancer. Je ne sais pas convertir mon code (ou les paramètres de GPS) pour avoir un programme qui se lit sur une console Linux.

                • Partager sur Facebook
                • Partager sur Twitter
                  4 juillet 2019 à 11:26:59

                  https://gcc.gnu.org/onlinedocs/gnat_ugn/Running-a-Simple-Ada-Program.html
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Architecte logiciel - Software craftsmanship convaincu.

                    5 juillet 2019 à 20:13:01

                    Pour le coup là je n'ai pas la réponse. Tu devrait peut-être tester dans un terminal « linux » (Msys2, mingw, et cie de mémoire).
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Ensemble créons l'avenir !

                    [Tutoriel] Apprendre à programmer avec Ada

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown