Article View: fr.comp.lang.c
Article #15591Re: conjugaison et autres exos sur les chaines [Was : Un système de conj...]
From: Pierre Maurette
Date: Fri, 16 Sep 2005 18:05
Date: Fri, 16 Sep 2005 18:05
102 lines
5288 bytes
5288 bytes
candide, le 16/09/2005, a �crit :
> "Charlie Gordon" <news@chqrlie.org> wrote in
[...]
>>> input : nombre donn� en chiffres (base dix)
>>> output : �crire le nombre en lettres
C'est plus un petit projet qu'un simple exercice. Je l'utilise depuis
longtemps pour (me) tester (sur) un langage. Depuis un besoin pr�cis,
sous Superbase Pro et GFA Basic ! �a fait par exemple:
K:\CodeBook\Somme en lettre\SelBuilderX\WINDOWS\Debug_Build>sel
Nom monnaie au singulier : poireau
Nom monnaie au pluriel : poireaux
Cette monnaie est du genre masculin (o/O/y/Y) : o
Saisissez la somme : 123.56
cent vingt-trois poireaux et cinquante-six centimes
Nom monnaie au singulier : roupie
Nom monnaie au pluriel : roupies
Cette monnaie est du genre masculin (o/O/y/Y) : n
Saisissez la somme : 123456781
cent vingt-trois millions quatre cent cinquante-six mille sept cent
octante et une roupies et z�ro centime
Nombreux formats en entr�e.
Param�trages statiques: nom et genre de la monnaie et de la
sous-monnaie, centimes/millimes, centimes si 0, fran�ais/belge, etc.
Pour en revenir au langage C, il se trouve que les derniers avatars,
tout � fait agr�ables d'utilisation, �taient en Delphi, C++/VCL et C++
ANSI/ISO, donc en objet. Le passage au C avec toutes les fonctionalit�s
est un peu lourd. J'avais arr�t� en chemin. Pour les conversions entier
vers cha�ne, l'algo faisait grand usage de classes string et de
multiconcat�nations. J'ai donc �crit une fonction:
char * const PETRUS_concat(const char* Format, ...);
La cha�ne de format permet de d�crire les cha�nes � concat�ner, et s'il
faut ou non les lib�rer dans la fonction. �a permet de r�cup�rer de la
souplesse d'�criture, en concat�nant des fonctions par exemple. Mais
c'est particuli�rement chiant de g�rer proprement les erreurs au fin
fond de la pile d'appel :-(
Vous demandiez bien des id�es d'exercice, non ? ;-)
Exemple d'utilisation:
char * SEL_ZeroTo999(const unsigned int n)
{
int u = n % 100; /* nombre des "unit�s" modulo 100 */
int c = n / 100; /* chiffre (nombre) des centaines */
assert(n < 1000);
if(n == 100) return PETRUS_concat("1", ChDivers[DIV_100]);
if(c == 0) return SEL_ZeroTo99(u);
if(c == 1) return PETRUS_concat("3%001", ChDivers[DIV_100], " ",
SEL_ZeroTo99(u));
if(u == 0)
{
return PETRUS_concat("3%1", SEL_ZeroTo99(c), " ",
ChDivers[DIV_100S]);
}
else
{
return PETRUS_concat("5%10001", SEL_ZeroTo99(c), " ",
ChDivers[DIV_100], " ", SEL_ZeroTo99(u));
}
}
> y'a aussi le rot-13 mais je pense que c'est pas tr�s dur et que c'est
> classique.
Le rot-13 n'est pas compl�tement trivial, puisque sauf erreur de ma
part �a transforme de l'imprimable en de l'imprimable, en fait �a ne
modifie que les lettres, en respectant bien entendu rot13(rot13()) <=>
identit�().
C'est peut-�tre un exercice sympa, sachant que vous pouvez cr�er une
copie de la cha�ne, coder/d�coder en place voire coder/d�coder sur un
flux. C'est � dire �crire une famille de fonctions rot13_fread(),
rot13_fgetc(), rot13_fgets(), rot13_fwrite(), rot13_fputc(),
rot13_fputs() correspondant aux fread(), fgetc(), fgets(), fwrite(),
fputc(), fputs().
> Je pensais aussi �
>
> qwerty <-> azerty
�a risque d'�tre purement gratuit, non ? A moins de se lancer dans
l'�criture d'un hook clavier, ce qui est 100% OS-d�pendant donc non
portable.
> et une simplification � l'espagnole :
>
> Input > phon�tique
> Output > fon�tic
>
> mais m�me avec des inputs restreints, je crois que c'est trop technique
> pour �tre instructif en langage C.
Pourquoi pas un codeur d�codeur de langage SMS ?
;-)
--
Pierre Maurette
Technical Details
Message-ID:
<mn.84b07d59016a857b.31483@laposte.net>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!infeed-3.proxad.net!news18-e.free.fr!not-for-mailReferences:
<1126342327.583568.21420@g43g2000cwa.googlegroups.com> <4329e5d4$0$7846$8fcfb975@news.wanadoo.fr> <dge4b6$fqa$1@reader1.imaginet.fr> <432ab809$0$1734$8fcfb975@news.wanadoo.fr>Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,b21b26167a936e28
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!infeed-3.proxad.net!news18-e.free.fr!not-for-mail
Subject: Re: conjugaison et autres exos sur les chaines [Was : Un système de conj...]
From: "Pierre Maurette" <maurettepierre@wanadoo.fr>
References: <1126342327.583568.21420@g43g2000cwa.googlegroups.com> <4329e5d4$0$7846$8fcfb975@news.wanadoo.fr> <dge4b6$fqa$1@reader1.imaginet.fr> <432ab809$0$1734$8fcfb975@news.wanadoo.fr>
Newsgroups: fr.comp.lang.c
Message-ID: <mn.84b07d59016a857b.31483@laposte.net>
X-Newsreader: MesNews/1.04.00.00
Date: Fri, 16 Sep 2005 20:05:36 +0200
MIME-Version: 1.0
X-Face: cmi$3R1_J{[}5K|8d'LDiJ$SsZ*gn,j*PhJ#KVGt+45,E_N9O}GrhhQ>fb&q<&lz=g%PEv' u"m)N|KrBMux?2:E?N7Uw3L#H>L#GwM}<qH-?#_Y$B9]$q1"~iUGtN#HVy?}7.`m&iKF>gY:.`W.qu z`1'W'h-AXPmB]#7~<+@H.<0M`-jBkCWbmkcT_*LBVD3|p1a?h1H;cHq{$-vbeP@Hdcqp5z~lwU7ZK `~
Reply-To: maurettepierre@wanadoo.fr
Content-Type: text/plain; charset="iso-8859-15"; format=flowed
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 0537-2, 16/09/2005), Outbound message
X-Antivirus-Status: Clean
Lines: 104
Organization: Guest of ProXad - France
NNTP-Posting-Date: 16 Sep 2005 20:04:40 MEST
NNTP-Posting-Host: 84.7.245.10
X-Trace: 1126893880 news18-e.free.fr 14396 84.7.245.10:4618
X-Complaints-To: abuse@proxad.net