Conversion sous contrainte #
Conversion d’un entier #
On souhaite écrire un programme qui traite une chaîne de caractères contenant un nombre entier
en ASCII (par exemple : "206"
) et construit un entier contenant cette valeur.
Pour faire cela toutefois, on se limitera à des calculs bas niveau, et on s’interdira d’utiliser : scanf
ou les fonctions
définies dans string.h
.
L’idée générale est de parcourir la chaîne (pointeur), et de construire le nombre en se limitant à des additions et des multiplications. Notez qu’il y a une relation entre le code ASCII d’un chiffre et la valeur du chiffre en question.
Vous pourrez partir de ce modèle :
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * str = "206";
int val = 0;
/* Votre code ici */
printf("Res : %d\n", val);
}
Conversion d’un nombre à virgule #
On suppose maintenant que la chaîne contient un nombre à virgule correctement formé (il peut ou non
y avoir un symbole .
, mais il ne peut pas y en avoir deux par exemple). On veut récupérer
un nombre entier, en centièmes. Par exemple, si la chaîne contient "20.35"
, on veut récupérer l’entier
2035
. Si la chaîne contient "21.23456"
, on veut récupérer 2123
et si la chaîne contient
"13.2"
, on veut récupérer 1320
.
Vous pourrez partir de ce modèle :
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * str = "21.34";
int val = 0;
/* Votre code ici */
printf("Res : %d\n", val);
}
Vous réaliserez des tests exhaustifs regroupant la majorité des cas :
- un nombre entier en entrée
- un nombre avec une seule décimale
- un nombre avec deux décimales
- un nombre avec strictement plus de deux décimales.
Réécriture sous forme de fonction #
Afin de pouvoir réutiliser votre code, réécrivez le sous forme d’une fonction, en le rendant compatible avec ce programme de test :
#include <stdio.h>
#include <stdlib.h>
int conversion(char *);
int main(void) {
char * str = "21.34";
int val = 0;
printf("Res : %d\n", conversion(str));
}