Exercice langage C application des structures répétitive 7

Exercice 6.8

Calculez le nombre lu à rebours d'un nombre positif entré au clavier en supposant que le fichier d'entrée standard contient une suite de chiffres non nuls, terminée par zéro (Contrôlez s'il s'agit vraiment de chiffres). Exemple: Entrée: 1 2 3 4 0 Affichage: 4321

   Exercice 6.9

Calculez le nombre lu à rebours d'un nombre positif entré au clavier en supposant que le fichier d'entrée standard contient le nombre à inverser. Exemple: Entrée: 1234 Affichage: 4321

#include
main()
{
int X; /* Le chiffre courant */
int N=0; /* Le compteur des décimales */
long VALD=1; /* Valeur de la position décimale courante */
long NOMB=0; /* Le nombre résultat */
do
{
printf("Entrez le %d%s chiffre : ", (N+1), (N)?"e":"er");
scanf("%d", &X);

if (X9)
printf("\a");
else if (X)
{
NOMB += VALD*X;
N++;
VALD *= 10;
}
else
printf("La valeur du nombre renversé est %ld\n", NOMB);
}
while (X);
return 0;
}

Remarque :

En remplaçant la ligne

NOMB += VALD*X;

par

NOMB += pow(10, N)*X;

on n'a plus besoin de la variable VALD. Il faut cependant inclure les fonctions de la bibliothèque . D'autre part, le calcul de 10N serait alors répété à chaque exécution de la boucle.

Finalement, cette variante est plus lente et plus volumineuse que la première.

Solution Exercice 6.9

#include
main()
{
int NOMB; /* Le nombre à inverser */
int NINV; /* Le nombre inversé */
/* Attention: en utilisant le type int, il est impossible */
/* d'inverser correctement des nombres comme 10033 ... */
do
{
printf("Entrez un nombre positif ( scanf("%d", &NOMB);
}
while (NOMB9999);

NINV=0;
while(NOMB>0)
{
NINV *= 10;
NINV += NOMB%10;
NOMB /= 10;
}

/* Autre possibilité : */
/* for (NINV=0 ; NOMB>0 ; NOMB/=10)
NINV = NINV*10 + NOMB%10;
*/

printf("Le nombre 'inversé' est : %d\n", NINV);
return 0;
} Article publié le 02 Janvier 2011 Mise à jour le Mercredi, 11 Août 2021 16:15 par GC Team