🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15591

Re: conjugaison et autres exos sur les chaines [Was : Un système de conj...]

#15591
From: Pierre Maurette
Date: Fri, 16 Sep 2005 18:05
102 lines
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-mail
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>

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