Partage
  • Partager sur Facebook
  • Partager sur Twitter

AbCdEfG... avec l'ASCII

    20 septembre 2021 à 19:31:47

    Bonsoir j'aimerais avoir le résultat "AbCdEfG..." jusqu'à z avec la table ascii et en utilisant seulement putchar 

    J'ai fait 2 tests avec 2 boucles différentes mais ça se met pas dans l'ordre, c'est aléatoire 

    int d = 97;			
    int e = 65;
    
    while (d < 123)
        {
          putchar (d);
          d++;
    
          while (e < 90)
    	{
    	  putchar (e);
    	  e++;
    
    
    	}
    
        }
    



    for (d = 97; d < 123; d = d + 2)
        {
          putchar (d);
    
          for (e = 66; e < 91; e = e + 2)
    	{
    	  putchar (e);
    	}
        }


    Pouvez vous m'aider SVP

    Mes anciens exercices marchaient mais mon prof m'as dit qu'il fallait pas faire comme ça, c'est car j'ai fait du C l'année dernière mais j'ai jamais fait cela 

    -
    Edité par fzfzzfzf 20 septembre 2021 à 19:35:25

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2021 à 19:43:09

      Hello,

      #include <stdio.h>
      
      int main(void) {
      	for(int i='A';i<'Z';i+=2) {
      		putchar(i);
      		putchar(i+('a'-'A')+1);
      	}
      	
      	return(0);
      }
      



      • Partager sur Facebook
      • Partager sur Twitter

      Il y a ceux qui font des sauvegardes, et ceux qui n'ont pas encore eu d'incident....

        20 septembre 2021 à 19:49:37

        edgarjacobs a écrit:

        Hello,

        #include <stdio.h>
        
        int main(void) {
        	for(int i='A';i<'Z';i+=2) {
        		putchar(i);
        		putchar(i+('a'-'A')+1);
        	}
        	
        	return(0);
        }
        



        J'aurais préféré avoir juste de l'aide pour réfléchir par moi même mais super merci !

        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2021 à 20:04:42

          fzfzzfzf a écrit:

          edgarjacobs a écrit:

          Hello,

          #include <stdio.h>
          
          int main(void) {
          	for(int i='A';i<'Z';i+=2) {
          		putchar(i);
          		putchar(i+('a'-'A')+1);
          	}
          	
          	return(0);
          }
          



          J'aurais préféré avoir juste de l'aide pour réfléchir par moi même mais super merci !


          Une différence importante entre ton code et celui de edgar, c'est que toi tu écris 65, lui il écrit 'A'

          Parce que A a comme code ASCII 65 en effet, mais quand tu utilises les cotes    'A'  ça veut dire "Code ASCII de A"

          Et ça rend le code beaucoup plus lisible. 

          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            20 septembre 2021 à 20:48:25

            Fvirtman a écrit:

            fzfzzfzf a écrit:

            edgarjacobs a écrit:

            Hello,

            #include <stdio.h>
            
            int main(void) {
            	for(int i='A';i<'Z';i+=2) {
            		putchar(i);
            		putchar(i+('a'-'A')+1);
            	}
            	
            	return(0);
            }
            



            J'aurais préféré avoir juste de l'aide pour réfléchir par moi même mais super merci !


            Une différence importante entre ton code et celui de edgar, c'est que toi tu écris 65, lui il écrit 'A'

            Parce que A a comme code ASCII 65 en effet, mais quand tu utilises les cotes    'A'  ça veut dire "Code ASCII de A"

            Et ça rend le code beaucoup plus lisible. 


            Oui c'est ce que mon prof m'a dit, il faut mettre A à la place de 65, je suis en train de corriger ça dans mes précédents exercices
            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2021 à 1:44:26

              Autrefois, il fallait savoir le code numérique des lettres.
              Dans qquelle base le voulez-vous?
              'A' = 65 = 0X41 = 0101 (octal)
              Je ne me rappelle jamais la valeur de toutes les lettres, c'est quoi pour le  m ?
              Alors que 'm' est plus facile.
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                22 septembre 2021 à 17:08:17

                PierrotLeFou a écrit:

                Autrefois, il fallait savoir le code numérique des lettres.

                Avec certains assembleurs, oui, mais, ça n'a jamais été le cas en C.


                D'autres solutions, sur un autre principe : au lieu de faire une boucle de 2 en 2, n'en faire qu'une seule et changer la casse une fois sur deux.

                La version la plus simple :

                void v1()
                {
                    bool en_majuscule = true;
                    for (int c = 'A'; c <= 'Z'; c++)
                    {
                        putchar(en_majuscule
                                    ? c
                                    : c - 'A' + 'a');
                        en_majuscule = !en_majuscule;
                    }
                    putchar('\n');
                }

                si vous n'aimez pas les booléens, on peut aussi faire alterner un facteur correcteur entre les valeurs 0 et ''a'-'A'

                void v2()
                {
                    int modification = 0;
                    for (int c = 'A'; c <= 'Z'; c++)
                    {
                        putchar(c + modification);
                        modification = 'a' - 'A' - modification;
                    }
                    putchar('\n');
                }
                


                si vous n'aimez pas les valeurs qui alternent, on peut directement regarder la parité de la différence avec 'A' et mettre une formule compliquée

                void v3() {
                    for (int c = 'A'; c <= 'Z'; c++)
                    {
                        putchar(c + (((c - 'A')&1) * ('a'-'A')));
                    }
                    putchar('\n');
                }

                Si vous n'aimez pas les formules compliquées etc.

                https://www.youtube.com/watch?v=bfukcKYjNGs


                PS: la boucle for repose sur le fait que les caractères sont adjacents, ce qui n'est pas le cas en général. Dans le code EBCDIC, qui a eu son heure de gloire, il y a un trou après le I et après le R.

                https://retrocomputing.stackexchange.com/questions/11482/why-wasnt-ebcdic-designed-with-contiguous-alphanumeric-characters

                donc là, on n'est pas dans du C conforme aux standards :-)



                -
                Edité par michelbillaud 22 septembre 2021 à 17:20:40

                • Partager sur Facebook
                • Partager sur Twitter
                  22 septembre 2021 à 22:06:49

                  michelbillaud a écrit:

                  PierrotLeFou a écrit:

                  Autrefois, il fallait savoir le code numérique des lettres.

                  Avec certains assembleurs, oui, mais, ça n'a jamais été le cas en C.


                  D'autres solutions, sur un autre principe : au lieu de faire une boucle de 2 en 2, n'en faire qu'une seule et changer la casse une fois sur deux.

                  La version la plus simple :

                  void v1()
                  {
                      bool en_majuscule = true;
                      for (int c = 'A'; c <= 'Z'; c++)
                      {
                          putchar(en_majuscule
                                      ? c
                                      : c - 'A' + 'a');
                          en_majuscule = !en_majuscule;
                      }
                      putchar('\n');
                  }

                  si vous n'aimez pas les booléens, on peut aussi faire alterner un facteur correcteur entre les valeurs 0 et ''a'-'A'

                  void v2()
                  {
                      int modification = 0;
                      for (int c = 'A'; c <= 'Z'; c++)
                      {
                          putchar(c + modification);
                          modification = 'a' - 'A' - modification;
                      }
                      putchar('\n');
                  }
                  


                  si vous n'aimez pas les valeurs qui alternent, on peut directement regarder la parité de la différence avec 'A' et mettre une formule compliquée

                  void v3() {
                      for (int c = 'A'; c <= 'Z'; c++)
                      {
                          putchar(c + (((c - 'A')&1) * ('a'-'A')));
                      }
                      putchar('\n');
                  }

                  Si vous n'aimez pas les formules compliquées etc.

                  https://www.youtube.com/watch?v=bfukcKYjNGs


                  PS: la boucle for repose sur le fait que les caractères sont adjacents, ce qui n'est pas le cas en général. Dans le code EBCDIC, qui a eu son heure de gloire, il y a un trou après le I et après le R.

                  https://retrocomputing.stackexchange.com/questions/11482/why-wasnt-ebcdic-designed-with-contiguous-alphanumeric-characters

                  donc là, on n'est pas dans du C conforme aux standards :-)



                  -
                  Edité par michelbillaud il y a environ 4 heures


                  C'est vrai dans l'absolu que ce n'est pas parfaitement conforme aux standard (si on utilise EBCDIC), si on veut chipoter :) 

                  Mais dans les faits, toutes les machines et tous les systèmes du monde utilisent de l'ASCII depuis des décennies :) 

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    22 septembre 2021 à 22:15:03

                    Sinon il y a une solution assez simple :

                    #include <stdio.h>
                    
                    int main(void) {
                        const char *result="AbCdEfGhIjKlMnOpQrStUvWxYz";
                        while (*result)
                            putchar(*result++);
                        return 0;
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 septembre 2021 à 22:21:07

                      > toutes les machines du monde utilisent de l'ascii

                      Ça serait trop beau (encore que, un  code 7 bits...)

                      Je crois que ebcdic, ça existe encore sur z/os, par exemple.  Rien d'etonnant, continuité avec os/390 etc.

                      Plus d'un demi siecle, et le canard est toujours vivant.

                      -
                      Edité par michelbillaud 22 septembre 2021 à 22:29:16

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 septembre 2021 à 23:37:50

                        michelbillaud a écrit:

                        > toutes les machines du monde utilisent de l'ascii

                        Ça serait trop beau (encore que, un  code 7 bits...)

                        Je crois que ebcdic, ça existe encore sur z/os, par exemple.  Rien d'etonnant, continuité avec os/390 etc.

                        Plus d'un demi siecle, et le canard est toujours vivant.

                        -
                        Edité par michelbillaud il y a environ 1 heure


                        Oui, mais sérieusement, qui utilise cet OS ? :)

                        Pour toutes les machines usuelles avec les OS usuels c'est de l'ASCII. 

                        Surtout un débutant qui nous pose une question, on peut lui dire que ça existe, mais inutile de l'embrouiller avec un cas qu'il ne verra probablement jamais :)

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                          23 septembre 2021 à 8:05:05

                          Surtout que s'il était sur cet OS, il bosserait chez IBM ou un de ces clients donc normalement loin d’être débutant !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 septembre 2021 à 8:07:51

                            > qui utilise ebcdic

                            Les gros ordis de ta banque, peut être. Si IBM en vend, c'est qu'il y'a des gens qui en achètent, et qui s'en servent (au prix que ça coûte...)

                            Faudrait pas croire que toutes les machines du monde etc.

                            > Pas un debutant

                            On peut bosser sur mainframe ibm, et être débutant complet en C. Il faut bien commencer un jour.

                            > Pas conforme aux standards

                            Ce qui n'est pas conforme au standard c, c'est de supposer que les lettres ont des valeurs numériques adjacentes.

                            On est dans le cadre d'un exercice, on suppose qu'en est sur un pc ou autre, qu'en utilise un codage 7 ou 8 bits latin dérivé de l'ascii, et on se le permet, c'est tout.

                            -
                            Edité par michelbillaud 23 septembre 2021 à 8:20:09

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 septembre 2021 à 10:40:05

                              michelbillaud a écrit:

                              > Pas un debutant

                              On peut bosser sur mainframe ibm, et être débutant complet en C. Il faut bien commencer un jour.

                              Je serais curieux de connaitre une boite qui utilise une machine IBM et qui recrute un débutant complet :)
                              C'est vrai que des personnes ayant des Bac+2 /Bac +5 en info et qui ont eu du C dans leur parcours scolaire , on en manque beaucoup...

                              -
                              Edité par HelbaSama 23 septembre 2021 à 10:44:28

                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 septembre 2021 à 10:50:40

                                fzfzzfzf a écrit:

                                AbCdEfG... avec l'ASCII

                                avec l'ASCII, c'est dans le titre.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 septembre 2021 à 12:02:57

                                  Salut à tous,

                                  C'est quand même intéressant que ce type d'exercice, qui est souvent donné à des débutants, repose sur un comportement non spécifié dans le standard du C.

                                  En fait, le standard ne garantit que les caractères ont une représentation numérique adjacente que pour les caractères "0 1 2 3 4 5 6 7 8 9" :

                                  In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.

                                  et ne se prononce pas sur la contiguïté (ni l'ordre d'ailleurs) pour le reste des caractères dans les "source and execution basic character sets".

                                  Dans le C11, cela se trouve dans 5.2.1



                                  -
                                  Edité par Dlks 23 septembre 2021 à 12:04:31

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 septembre 2021 à 12:32:25

                                    michelbillaud a écrit:

                                    > qui utilise ebcdic

                                    Les gros ordis de ta banque, peut être. Si IBM en vend, c'est qu'il y'a des gens qui en achètent, et qui s'en servent (au prix que ça coûte...)

                                    Oui, la majorité des banques utilisent des mainframes IBM, donc z/OS et l'EBCDIC.

                                    La majorité des transactions financières du Monde (je crois que c'est de l'ordre de 80 %, quelque chose comme ça) utilisent des machines IBM sous z/OS.

                                    Je dirais que dans l'économie, il y a deux choses :

                                    • les transactions (de l'argent qui se déplace d'un compte à l'autre) : c'est le sang de l'économie, ça circule dans des réseaux et des machines hautement sécurisées (sûrement pas sur Internet ou sous Windows !) : des mainframes IBM sous z/OS (parfois sous Linux) ;
                                    • l'observation de l'économie (faire un bilan comptable, etc.) qui se fait sur des PC, majoritairement sous Windows.

                                    Mais ce n'est pas le langage C qui est le plus utilisé sous z/OS. Je n'ose même pas dire c'est lequel...

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 septembre 2021 à 13:58:04

                                      Probablement cobol ou java.

                                      Cobol, qui n'est pas un gros mot, c'est parce que dans ces boites il y a d'énormes stocks de programmes qui font (bien) leur boulot depuis des decennies, et qui n'ont besoin que d'un peu de maintenance évolutive de temps en temps.

                                      Ça coûterait une fortune d'essayer de convertir l'existant. Y a des boîtes qui ont proposé de le faire pour des banques, et qui se sont mangées des pénalités énormes pour retards dans l'exécution du projet, avant de laisser tomber.

                                      Le langage cobol est un des premiers langages de grande diffusion (avec fortran) et a été  remarquablement bien conçu pour ce qu'il est censé faire,  alors qu'on n'avait à l'époque (fin annees 50)  aucun recul sur la programmation et le génie logiciel. Le langage a évolué, aussi.

                                      Et comme il faut bien s'occuper de ces programmes, on embauche toujours des débutants.

                                      Pendant des années, une société de services voisine embauchait des étudiants non informaticiens (chimistes, géologues, biologistes,...) sur le carreau pour les former rapidement à la programmation Cobol. Mission : les innombrables corvées de petite maintenance. Un "senior" analysait les tickets des clients, jetait un oeil au code source et leur donnait les grandes lignes de ce qu'il fallait probablement modifier.

                                      Pour ce que j'en sais c'est un peu passé de mode : on prend plutôt des gens qui ont au moins une petite formation d'info au départ, et on les forme vite fait à Cobol (qui est facile à apprendre)  Plus autonomes, donc plus productifs, meme si on doit les payer un peu plus (et qu'ils risquent davantage de se barrer)

                                      -
                                      Edité par michelbillaud 23 septembre 2021 à 14:30:05

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      AbCdEfG... avec l'ASCII

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      • Editeur
                                      • Markdown