1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int isPiStopped (int c)
{
#if 0
char delimiter[] =
{' ', ',', '\'', '!', ';', '?', '.', ':'};
int i;
for (i = 0; i < sizeof (delimiter); i++)
{
if (c == delimiter[i])
{
return 1;
}
}
return 0;
#else
char s[2] =
{0};
s[0] = c;
return strpbrk (" ,'!;?.:", s) != NULL;
#endif
}
double calcPI (void)
{
static char const *str =
"Que j'aime à faire apprendre ce nombre utile aux sages !"
"Immortel Archimède, artiste ingénieur,"
"Qui de ton jugement peut priser la valeur ?"
"Pour moi, ton problème eut de pareils avantages."
"Jadis, mystérieux, un problème bloquait "
"Tout l'admirable procédé, l'oeuvre grandiose "
"Que Pythagore découvrit aux anciens Grecs."
"Ô quadrature ! Vieux tourment du philosophe "
"Insoluble rondeur, trop longtemps vous avez "
"Défié Pythagore et ses imitateurs."
"Comment intégrer l'espace plan circulaire ?"
"Former un triangle auquel il équivaudra ?"
"Nouvelle invention : Archimède inscrira "
"Dedans un hexagone ; appréciera son aire "
"Fonction du rayon. Pas trop ne s'y tiendra :"
"Dédoublera chaque élément antérieur ;"
"Toujours de l'orbe calculée approchera ;"
"Définira limite ; enfin, l'arc, le limiteur "
"De cet inquiétant cercle, ennemi trop rebelle "
"Professeur, enseignez son problème avec zèle ";
char PI[255];
char const *p;
int count = 0;
int piLen = 0;
for (p = str; *p != '\0'; p++)
{
if (isPiStopped (*p))
{
if (count > 0)
{
piLen += sprintf (PI + piLen, "%01d", count % 10);
if (piLen == 1)
{
piLen += sprintf (PI + piLen, ".");
}
count = 0;
}
}
else
{
count++;
}
}
printf ("PI : (%s)\n", PI);
return strtod (PI, NULL);
}
int main (void)
{
printf ("%f\n", calcPI ());
return 0;
} |