suivant: Prise en main de
monter: Corrigés des programmes
précédent: Vigenere
Table des matières
bases.c
#include<stdio.h>
#define BASE 27
/************************************************/
/*
Retourne le rang de la lettre a dans l'alphabet.
'a' est de rang 1, 'b' de rang 2, etc.
*/
char rankOfLetter(char a)
{
return a - 'a' + 1;
}
/************************************************/
/*
Retourne la lettre de rang r dans l'alphabet.
*/
char letterOfRank(char r)
{
return r + 'a' - 1;
}
/************************************************/
/*
Convertit le nombre nb en base 27, place
les lettres calculees dans la chaine c.
(ne pas oublier le 0 a la fin de c...)
*/
void base27Of10(char* c, unsigned long nb)
{
if (nb == 0)
{
*c = 0;
}
else
{
*c = letterOfRank(nb%BASE);
base27Of10(c + 1, nb / BASE);
}
}
/************************************************/
/*
Convertit en base 10 le message contenu dans c.
*/
unsigned long base10Of27(char* c)
{
if (*c == 0)
return 0;
return rankOfLetter(*c) + BASE*base10Of27(c + 1);
}
/************************************************/
/*
Convertit en base 10 le mot "abcdfg", puis le
reconvertit de nouveau en base 27.
*/
int main(int argc, char** argv)
{
char /*c[7] = "abcdfg",*/ d[700];
unsigned long b10 = base10Of27(argv[1]);
printf("%lu\n", b10);
base27Of10(d, b10);
printf("%s\n", d);
return 0;
}
suivant: Prise en main de
monter: Corrigés des programmes
précédent: Vigenere
Table des matières
klaus
2010-08-05