Comme j'h=E9site entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'o=F9 ma question :
Quels sont les avantages du C et du C++ ?
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C+ +. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y > struct GCDHelper ;
template< unsigned int X, unsigned int Y > struct GCD { static unsigned int const value = GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::val ue ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< -1, X, Y > { static unsigned int const value = GCD< X, Y-X >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 0, X, Y > { static unsigned int const value = X ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 1, X, Y > { static unsigned int const value = GCD< X-Y, Y >::value ; } ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si elle ne semble pas l'agorithme le mieux adapté.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C+ +.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y >
struct GCDHelper ;
template< unsigned int X, unsigned int Y >
struct GCD
{
static unsigned int const value
= GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::val ue
;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< -1, X, Y >
{
static unsigned int const value = GCD< X, Y-X >::value ;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< 0, X, Y >
{
static unsigned int const value = X ;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< 1, X, Y >
{
static unsigned int const value = GCD< X-Y, Y >::value ;
} ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si
elle ne semble pas l'agorithme le mieux adapté.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C+ +. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y > struct GCDHelper ;
template< unsigned int X, unsigned int Y > struct GCD { static unsigned int const value = GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::val ue ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< -1, X, Y > { static unsigned int const value = GCD< X, Y-X >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 0, X, Y > { static unsigned int const value = X ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 1, X, Y > { static unsigned int const value = GCD< X-Y, Y >::value ; } ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si elle ne semble pas l'agorithme le mieux adapté.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C++. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y > struct GCDHelper ;
template< unsigned int X, unsigned int Y > struct GCD { static unsigned int const value = GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< -1, X, Y > { static unsigned int const value = GCD< X, Y-X >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 0, X, Y > { static unsigned int const value = X ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 1, X, Y > { static unsigned int const value = GCD< X-Y, Y >::value ; } ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si elle ne semble pas l'agorithme le mieux adapté.
Exact. Mais la confusion avec le C est alors impossible :-)
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C++.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y >
struct GCDHelper ;
template< unsigned int X, unsigned int Y >
struct GCD
{
static unsigned int const value
= GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::value
;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< -1, X, Y >
{
static unsigned int const value = GCD< X, Y-X >::value ;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< 0, X, Y >
{
static unsigned int const value = X ;
} ;
template< unsigned int X, unsigned int Y >
struct GCDHelper< 1, X, Y >
{
static unsigned int const value = GCD< X-Y, Y >::value ;
} ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si
elle ne semble pas l'agorithme le mieux adapté.
Exact. Mais la confusion avec le C est alors impossible :-)
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C++. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Au moins qu'on n'écrive quelque chose du genre :
template< int cond, unsigned int X, unsigned int Y > struct GCDHelper ;
template< unsigned int X, unsigned int Y > struct GCD { static unsigned int const value = GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< -1, X, Y > { static unsigned int const value = GCD< X, Y-X >::value ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 0, X, Y > { static unsigned int const value = X ; } ;
template< unsigned int X, unsigned int Y > struct GCDHelper< 1, X, Y > { static unsigned int const value = GCD< X-Y, Y >::value ; } ;
de façon à pouvoir écrire plus tard :
double array[ GCD< 15, 20 >::value ] ;
Il y a des cas en C++ où on se sert de la recursivité, même si elle ne semble pas l'agorithme le mieux adapté.
Exact. Mais la confusion avec le C est alors impossible :-)
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On Mon, 22 Jan 2007 09:20:41 +0100, "Antoine Leca" :
Euh ? Basic ressemble tellement for à C et autres langages du même acabit (Pascal, Fortran, Cobol, etc.) qu'on les a classés dans le même « groupe »
Je parlais uniquement de la syntaxe (cf ci-dessous l'exemple que j'avais donné). C et C++ ont la même syntaxe de base, mais les méthodes de programmation sont totalement différentes.
total= 0; for (i=0; i<42; ++i) { if (i % 3 == 2) { total+= i*i; } }
On Mon, 22 Jan 2007 09:20:41 +0100, "Antoine Leca" :
Euh ? Basic ressemble tellement for à C et autres langages du même acabit
(Pascal, Fortran, Cobol, etc.) qu'on les a classés dans le même « groupe »
Je parlais uniquement de la syntaxe (cf ci-dessous l'exemple que
j'avais donné). C et C++ ont la même syntaxe de base, mais les
méthodes de programmation sont totalement différentes.
total= 0;
for (i=0; i<42; ++i)
{
if (i % 3 == 2)
{
total+= i*i;
}
}
On Mon, 22 Jan 2007 09:20:41 +0100, "Antoine Leca" :
Euh ? Basic ressemble tellement for à C et autres langages du même acabit (Pascal, Fortran, Cobol, etc.) qu'on les a classés dans le même « groupe »
Je parlais uniquement de la syntaxe (cf ci-dessous l'exemple que j'avais donné). C et C++ ont la même syntaxe de base, mais les méthodes de programmation sont totalement différentes.
total= 0; for (i=0; i<42; ++i) { if (i % 3 == 2) { total+= i*i; } }
Fabien LE LEZ
On 22 Jan 2007 04:19:31 -0800, "James Kanze" :
C'est vrai qu'en C++, j'écrirais la fonction plutôt comme : [...]
Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se réfère pas à la première condition :
{ return x == y ? x : x < y ? gcd( x, y - x ) : gcd( x - y, y );
On 22 Jan 2007 04:19:31 -0800, "James Kanze" <james.kanze@gmail.com>:
C'est vrai qu'en C++, j'écrirais la fonction plutôt comme :
[...]
Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se
réfère pas à la première condition :
{
return x == y
? x
: x < y
? gcd( x, y - x )
: gcd( x - y, y );
C'est vrai qu'en C++, j'écrirais la fonction plutôt comme : [...]
Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se réfère pas à la première condition :
{ return x == y ? x : x < y ? gcd( x, y - x ) : gcd( x - y, y );
Fabien LE LEZ
On 22 Jan 2007 04:44:01 -0800, "James Kanze" :
Il y a des cas en C++ où on se sert de la recursivité,
Oui, mais ce n'est pas la même récursivité. En fait, ce n'est même pas le même langage : le système de templates est, il me semble, un langage complet (au sens de Turing) à l'intérieur du langage C++. Langage qui est exécuté au moment de la compilation. (Cela n'en fait-il pas un langage interprété, d'ailleurs ?)
On 22 Jan 2007 04:44:01 -0800, "James Kanze" <james.kanze@gmail.com>:
Il y a des cas en C++ où on se sert de la recursivité,
Oui, mais ce n'est pas la même récursivité.
En fait, ce n'est même pas le même langage : le système de templates
est, il me semble, un langage complet (au sens de Turing) à
l'intérieur du langage C++. Langage qui est exécuté au moment de la
compilation.
(Cela n'en fait-il pas un langage interprété, d'ailleurs ?)
Il y a des cas en C++ où on se sert de la recursivité,
Oui, mais ce n'est pas la même récursivité. En fait, ce n'est même pas le même langage : le système de templates est, il me semble, un langage complet (au sens de Turing) à l'intérieur du langage C++. Langage qui est exécuté au moment de la compilation. (Cela n'en fait-il pas un langage interprété, d'ailleurs ?)
Fabien LE LEZ
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education, qui sont le contact français d'Addison Wesley, mais après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ? Quand je veux traiter quelque chose d'un peu sérieux avec une entreprise en France, je prend mon téléphone.
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education,
qui sont le contact français d'Addison Wesley, mais
après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ?
Quand je veux traiter quelque chose d'un peu sérieux avec une
entreprise en France, je prend mon téléphone.
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education, qui sont le contact français d'Addison Wesley, mais après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ? Quand je veux traiter quelque chose d'un peu sérieux avec une entreprise en France, je prend mon téléphone.
Marc Boyer
Le 22-01-2007, Fabien LE LEZ a écrit :
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education, qui sont le contact français d'Addison Wesley, mais après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ? Quand je veux traiter quelque chose d'un peu sérieux avec une entreprise en France, je prend mon téléphone.
J'avoue que je ne suis pas tellement téléphone au boulot, seulement quand il y a besoin fort d'interraction. Enfin juste pour dire que traduire ce bouquin etait pas dans leurs priorités en 2005.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
Le 22-01-2007, Fabien LE LEZ <gramster@gramster.com> a écrit :
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education,
qui sont le contact français d'Addison Wesley, mais
après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ?
Quand je veux traiter quelque chose d'un peu sérieux avec une
entreprise en France, je prend mon téléphone.
J'avoue que je ne suis pas tellement téléphone au boulot,
seulement quand il y a besoin fort d'interraction.
Enfin juste pour dire que traduire ce bouquin etait pas
dans leurs priorités en 2005.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :
OUi, j'avais contacté les gens de chez pearson education, qui sont le contact français d'Addison Wesley, mais après échange d'un seul mail, c'était resté sans réponse.
Depuis quand les Français ont-ils un usage sérieux du mail ? Quand je veux traiter quelque chose d'un peu sérieux avec une entreprise en France, je prend mon téléphone.
J'avoue que je ne suis pas tellement téléphone au boulot, seulement quand il y a besoin fort d'interraction. Enfin juste pour dire que traduire ce bouquin etait pas dans leurs priorités en 2005.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. André Maurois)
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C++. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Pas d'accord.
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique theorique, savent reconnaitre la recursion terminale, et savent que leur compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre la recursion terminale. Et donc ils se concentrent sur des *vraies* ameliorations du code en question, qui n'est franchement pas terrible et rarement utilise pour faire des calculs de pgcd decents. ;-)
In article <pxbps97mldl.fsf@news.bourguet.org>,
Jean-Marc Bourguet <jm@bourguet.org> wrote:
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C++.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Pas d'accord.
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique
theorique, savent reconnaitre la recursion terminale, et savent que leur
compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre
la recursion terminale. Et donc ils se concentrent sur des *vraies*
ameliorations du code en question, qui n'est franchement pas terrible et
rarement utilise pour faire des calculs de pgcd decents. ;-)
C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et dont la syntaxe presente une similarite douteuse avec celle du C et du C++. Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.
Pas d'accord.
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique theorique, savent reconnaitre la recursion terminale, et savent que leur compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre la recursion terminale. Et donc ils se concentrent sur des *vraies* ameliorations du code en question, qui n'est franchement pas terrible et rarement utilise pour faire des calculs de pgcd decents. ;-)
Jean-Marc Bourguet
(Marc Espie) writes:
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique theorique, savent reconnaitre la recursion terminale, et savent que leur compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre la recursion terminale.
Je n'ai pas choisi *les* compilateurs que j'utilise au boulot. Il y a une equipe pour cela (qui fixe aussi les patchs et les versions de l'OS et les options a utiliser pour le compilateur). Et je suis loin d'etre sur que tous reconnaisse la recursivite terminale. En fait, je ne connais la reponse que pour un... et encore, j'ai pas verifie pour la version exacte que nous employons (pour diverses raisons, nous avons toujours quelques version de retard sur le "bleeding edge").
Et donc ils se concentrent sur des *vraies* ameliorations du code en question, qui n'est franchement pas terrible et rarement utilise pour faire des calculs de pgcd decents. ;-)
Nous sommes d'accord sur cela :-) Mais ce n'etait pas le fond de la question.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
espie@lain.home (Marc Espie) writes:
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique
theorique, savent reconnaitre la recursion terminale, et savent que leur
compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre
la recursion terminale.
Je n'ai pas choisi *les* compilateurs que j'utilise au boulot. Il y a une
equipe pour cela (qui fixe aussi les patchs et les versions de l'OS et les
options a utiliser pour le compilateur). Et je suis loin d'etre sur que
tous reconnaisse la recursivite terminale. En fait, je ne connais la
reponse que pour un... et encore, j'ai pas verifie pour la version exacte
que nous employons (pour diverses raisons, nous avons toujours quelques
version de retard sur le "bleeding edge").
Et donc ils se concentrent sur des *vraies* ameliorations du code en
question, qui n'est franchement pas terrible et rarement utilise pour
faire des calculs de pgcd decents. ;-)
Nous sommes d'accord sur cela :-) Mais ce n'etait pas le fond de la question.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Les vrais bons programmeurs C/C++ ont quelques notions d'informatique theorique, savent reconnaitre la recursion terminale, et savent que leur compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre la recursion terminale.
Je n'ai pas choisi *les* compilateurs que j'utilise au boulot. Il y a une equipe pour cela (qui fixe aussi les patchs et les versions de l'OS et les options a utiliser pour le compilateur). Et je suis loin d'etre sur que tous reconnaisse la recursivite terminale. En fait, je ne connais la reponse que pour un... et encore, j'ai pas verifie pour la version exacte que nous employons (pour diverses raisons, nous avons toujours quelques version de retard sur le "bleeding edge").
Et donc ils se concentrent sur des *vraies* ameliorations du code en question, qui n'est franchement pas terrible et rarement utilise pour faire des calculs de pgcd decents. ;-)
Nous sommes d'accord sur cela :-) Mais ce n'etait pas le fond de la question.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
James Kanze
Fabien LE LEZ wrote:
On 22 Jan 2007 04:19:31 -0800, "James Kanze" :
C'est vrai qu'en C++, j'écrirais la fonction plutôt comme : [...]
Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se réfère pas à la première condition :
{ return x == y ? x : x < y ? gcd( x, y - x ) : gcd( x - y, y );
Est-ce que tu indentes aussi les if/else :
if ( x == y ) result = x ; else if ( x < y ) result = gcd( x, y - x ) ; else result = gcd( x - y, y ) ;
? En fin de compte, c'est la même chose. (Mais j'avoue que je ne m'en suis rendu compte que quand John Potter l'a signalé.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Fabien LE LEZ wrote:
On 22 Jan 2007 04:19:31 -0800, "James Kanze" <james.kanze@gmail.com>:
C'est vrai qu'en C++, j'écrirais la fonction plutôt comme :
[...]
Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se
réfère pas à la première condition :
{
return x == y
? x
: x < y
? gcd( x, y - x )
: gcd( x - y, y );
Est-ce que tu indentes aussi les if/else :
if ( x == y )
result = x ;
else
if ( x < y )
result = gcd( x, y - x ) ;
else
result = gcd( x - y, y ) ;
? En fin de compte, c'est la même chose. (Mais j'avoue que je ne
m'en suis rendu compte que quand John Potter l'a signalé.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34