Salut les amis!En fait je voudrais écrire un programme qui transmet toute chaîne de caractères en majuscules mais j'ai un problème car je ne sais comment y procéder.Merci
Salut les amis!En fait je voudrais écrire un programme qui transmet toute chaîne de caractères en majuscules mais j'ai un problème car je ne sais comment y procéder.Merci
Bonjour
Pas de souci: tu boucles sur chaque caractère de la chaine. Et si ce caractère est compris entre 'a' et 'z' alors, puisqu'un caractère est en réalité la valeur numérique correspondant à sa valeur ascii, et que les calculs mathématiques sont possibles dessus, te suffit de lui enlever 'a' et lui rajouter 'A' pour avoir son équivalent majuscule.
Ex: char carac='f' - 'a' + 'A'; printf("%c", carac); // En final carac contient "F".
Plus de détails ici.
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]
Hello,
Je ne me serais même pas fatigué à faire des tests : toupper() fait le job sans que le programmeur ait à se poser des questions.
On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent
Ouais mais je suis parti de l'idée qu'il s'agissait d'un exercice d'apprentissage. Et dans ce cas, le prof préfère justement les tests et les opérations...
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]
Pas forcément, au contraire, utiliser le bon outil est la meilleure des leçons qu'on devrait recevoir.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
A vrai dire, la seule chose qui me semble importante, c'est qu'un futur collègue sache quand utiliser l'un ou l'autre, ou à défaut ne réinvente pas la roue.
Personne n'aime avoir à débugger une roue réinventée par un collègue.
Un bon cours présenterait les deux, d'abord l'appel de toupper, qui est la méthode générale, puis ouvrirai le capot.
La bonne réponse dépend de l'exercice précis, et du moment dans le cours.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Je suis d'accord avec cette dernière partie de phrase. C'est effectivement elle qui décide quand détailler la transformation ou quand passer par une fonction toute faite. Tout ce que je peux dire, c'est que mon sentiment, forgé par 7 années d'enseignement du C, m'incite à penser que le PO en est au tout début de l'apprentissage et qu'on lui apprend ce qu'il y a sous le capot en lui demandant de s'entrainer à manipuler le bouzin. Parce que si ça avait été moi son prof, et que j'en sois à ce moment que je décris, c'est typiquement un exo que j'aurais donné à faire en interdisant bien entendu tout appel aux fonctions déjà toutes faites. Mais bien sûr une fois l'exo fini, j'aurais alors basculé du côté inverse en donnant la fonction et en donnant aussi la directive de l'utiliser.
Toujours la même histoire de l'apprentissage humain: on ne peut apprendre un niveau "n+1" qu'en apprenant d'abord le niveau "n" (même si les lois et valeurs de ce niveau "n" sont incomplète ou fausses parce que trop grossières) puis en le désapprenant ensuite une fois que le cerveau a compris le concept. C'est tout aussi bien vrai pour l'enfant à qui on montre le Soleil tourner autour de la Terre et qui apprendra bien plus tard que c'est en fait la Terre qui tourne sur elle même, que pour le cosmologue supérieur qui commence par travailler sur les équations de Newton pour ensuite découvrir qu'elles sont fausses au voisinage des grosses masses et qu'il doit alors les oublier pour passer à celles d'Einstein.
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]
Salut,A vrai dire, mon sentiment (bien que je ne sois pas prof, et encore moins prof de C) est que le gros problème vient qu'on tend trop souvent à cumuler deux cours en un, car, quel que soit le (premier) langage envisagé, on essaye de faire tenir dans le cours:
- un cours d'algorithmie qui forme l'esprit à concevoir la logique qu'il s'agira d'expliquer au processeur d'une part et
- un cours sur le langage lui-même, dont le but est d'apprendre à l'élève comment exprimer cette logique dans un langage donné.
Je connais toutes les objections qui peuvent être faites à une proposition qui consisterait à séparer clairement ces deux cours. Elles vont de "pas assez de temps/ de profs pour le faire" à "c'est pas motivant pour l'élève de ne pas pouvoir voir le résultat au travers d'un programme qui fonctionne", en passant par d'autres objections plus ou moins farfelues.
Mais, pour avoir moi-même eu l'occasion d'expérimenter cette séparation lors de mon apprentissage, je peux dire que la deuxième objection (celle qui a trait à la motivation de l'élève) peut s'avérer totalement fausse et que la méthode permet vraiment de clarifier les choses pour l'élève.
De plus, on ne se poserait dés lors plus l'éternelle question de savoir s'il faut aller "voir sous le capot" ou non: le cours d'algorithmie nous demanderait decoderdévelopper la logique d'une fonction proche de toupper, et le cours de langage que la fonction en question existe déjà dans la bibliothèque standard du langage
Avouez que l'on aurait sans doute tout à y gagner, non
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Totalement d'accord , surtout que les cours actuel tend plus a apprendre un langage que l'algorithmie , ce qui est stupide parce que la programmation c'est facile 80% d'algo pour ma part , même en assembleur quand on a compris les rouages du CPU et de la machine cible , ben le reste du boulot c'est de l'algo :p
Je rajouterai que la plupart des débutants les soucis qu'ils ont sont plus d'ordre de l'algo que du langage lui même , un exemple assez concret si on regarde les question sur la lib SDL , la plupart des question se porte plus sur l'algo (comment obtenir un résultat) que la lib en elle même (comment faire ceci).
Et pour mon expérience personnelle , je considère que ma capacité a réussir a faire des algo correct est grâce a mes connaissances personnel qui est le syllogisme et le formalisme , si on arrive clairement dans sa langue maternelle de formaliser ces propos , c'est la moitié de l'algo deja fait
Pour cela que je trouve cela 'stupide' de vouloir enseigner des maths haut niveau en disant "ça permet de donner une logique a l’élève" , sachant que même si les maths sont logique , elle n’entraîne pas forcément son pratiquant a être formelle sur les langues , de plus a un certain niveau (enfin je que j'ai pu remarquer a la FAC) la plupart (enfin quasiment tout le monde) apprend les formules et les résolutions par cœur et donc être bon en math revient a avoir une bonne mémoires...
A vrai dire, je vais même beaucoup plus loin que cela
Pour moi, tout langage informatique n'est qu'un ensemble de conventions qui nous permettent d'expliquer ce que l'on veut à quelque chose d'aussi bête qu'un ordinateur.
Si bien que, dés que nous disposons d'une représentation correcte de la logique à appliquer, il suffit que "quelqu'un ou quelque chose" (pourquoi pas un singe ou carrément un ordinateur) soit en mesure d'appliquer les conventions en question pour rédiger le code.
Pour moi, l'écriture du code se résume le plus souvent à un "long et fastidieux travail de dactylographie" (même si j'adore cette étape)
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Le gros problème de ce réinventage de roue, c'est qu'il pond une roue carrée, qui marche en ASCII pur et peut-être dans certains ASCIIs étendus mais est totalement inappropriée pour le cas général.
La fonction toupper(), elle, marche pour tous les encodages mono-octet, et towupper() couvre le reste (encore que, je me demande comment elle réagit hors du BMP sur des plate-formes WTF-16... Edit: apparemment, elle réagit mal).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
C'est bel et bien pour cela qu'il me semble important de séparer la partie algorithmie de la partie langage.
Car, quel que soit l'encodage, une logique qui serait proche dedevrait, a priori du moins, fonctionner. A moins (sait-on jamais) qu'il n'existe des encodages dans lesquels les différentes lettre de l'alphabet ne se suivent purement et simplement pas (et, oui, je la pose réellement).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pour chaque caractère dans la chaine de caractères temp = caractère - 'a' (minuscule) temp = caractère + 'A' (majuscule) remplacer le caractère original par temp fin pour
Cela me paraitrait pour le moins illogique, et je pense donc que c'est très improbable
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Ce serait plutôt :
A part ça, si on regarde la table des caractères Unicode, l'offset pour passer d'une lettre minuscule à la lettre majuscule correspondante dépend des plages :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Pour chaque caractère dans la chaine de caractères Si le caractère est une lettre minuscule temp <- caractère - 'a' (minuscule) temp <- temp + 'A' (majuscule) Remplacer le caractère original par temp. FinSi FinPour
- Pour le latin de base et le latin-1, l'offset est -32.
- Pour le latin étendu A, l'offset est -1.
- Pour le latin étendu B, c'est plus compliqué. Par exemple, parfois, on a des trios (capitale, majuscule, minuscule) comme (NJ, Nj, nj).
Oui mais la finalité de ce réinventage de roue (toujours si on se place dans le cadre de l'apprentissage du langage et/ou de l'algorithmique comme l'a bien fait remarquer koala01) n'est pas d'inventer une roue destinée à être utilisée (enfin pas au delà de 15 minutes); mais d'inventer une roue pour apprendre à manipuler les outils de base de conception de roues (ici pointeurs, manipulation de caractères, boucle, condition, fonction, etc.). Il faut bien que les profs trouvent des idées de TP aussi. Déjà que ce n'est pas facile de trouver des trucs un tant soi peu intéressant (et adapté au débutant), si en plus ils doivent trouver des idées de trucs faisables mais n'ayant pas encore été faits... Oserais-tu dire que toi, quand tu débutais, tu n'as jamais écrit un clone de "toupper" ou "tolower" ou "strcpy" ou "strlen" ou strchr" ou toute autre fonction analogue de la librairie standard ? Je sais, dans ce TP (toujours bien entendu si on est dans un TP pour débutant) que cette fonction une fois créee ne sera jamais utilisée parce que son homologue officiel existe déjà et est bien plus performante. Mais sa création (d'elle ou d'une autre analogue parmis celles déjà citées) reste nécessaire. C'est pareil en maths quand on fait redémontrer Pythagore aux élèves du secondaire. Ce n'est certainement pas pour enrichir le monde mathématique qu'on leur fait faire ce travail...
En fait, ton algo fonctionne toujours dans ce cas là. Parce qu'il ne s'appuie pas sur l'ordonnancement des lettres de l'alphabet mais sur l'écart (sensé être toujours le même) entre une minuscule et sa majuscule.
Il faut quand-même essayer de faire confiance à la façon dont sont construits certains fondements de l'informatique... Construire un encodage où l'écart entre 'a' et 'A' diffère de celui qu'il y aurait entre 'b' et 'B' n'apporterait aucun avantage (enfin à priori je n'en vois pas des masses ) et ferait ch... pas mal de monde
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]
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager