Valeur miroir d'un nombre [Résolu/Fermé]

Signaler
Messages postés
1
Date d'inscription
samedi 20 septembre 2014
Statut
Membre
Dernière intervention
20 septembre 2014
-
 Gyl-mael -
Bonjour,
j'aimerai ecrire un programme en C qui permet de lire un nombre et d'afficher sa valeur miroir par exemple la valeur miroir du nombre 456 est 654



4 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
En y réfléchissant, il y a encore plus simple. Et à mon avis, c'est la façon attendue s'il s'agit d'un devoir.

nombre : entier (choisi par l'utilisateur)
reste : entier (entre 0 et 9, unité)
resultat : le nombre miroir

Demander(nombre)

resultat <- 0
TantQue nombre > 0 Faire
reste <- nombre modulo 10
nombre <- nombre / 10
resultat <- resultat * 10 + reste
FinTantQue

Afficher(resultat)
Je te laisse écrire le code ;-).

PS : l'algo fonctionne pour les nombres positifs, à toi de voir si tu as besoin de l'adapter pour les nombres négatifs.
Cdlt,

Google is your friend
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56954 internautes nous ont dit merci ce mois-ci

Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
630
tiens, c'est vrai ça !

comme quoi il y a plein de moyens de le faire...
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
630
Houla.

ça vas pas être de la tarte.
En fait, en C, les nombres sont stoqués en binaires. Les nombres tels que nous les connaissons n'ont en fait pas réellement d'existence.

Le meilleure moyen de faire ça est en fait de stocker la chaine de caractères, qui est elle facilement inversable.

Un sujet très instructif ici:
https://stackoverflow.com/questions/784417/reversing-a-string-in-c

la méthode que je trouve la plus rigolote est celle-ci, traduite par mes soins:
#include <string.h> // pour strlen()

// revoie l'inverse d'une chaine terminée par null
void inplace_reverse(char * str)
{
  if (str)
  {
    char * end = str + strlen(str) - 1;

    // inverse la valeur de deux variables données
    // XXX: échoue quand a et b font référence au même emplacement mémoire
#   define XOR_SWAP(a,b) do\
    {\
      a ^= b;\
      b ^= a;\
      a ^= b;\
    } while (0)

    // avance vers l'intérieur de la chaine de caractère depuis les deux extrémités
    // inverse jusqu'à ce qu'on soit au milieu.
    while (str < end)
    {
      XOR_SWAP(*str, *end);
      str++;
      end--;
    }
#   undef XOR_SWAP
  }
}


------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Effectivement, ça fonctionne, mais ce n'est pas le plus lisible ;-))).
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
630
rhalalala :p

allez, c'est original d'utiliser xor ^^
et puis c'est opti !
merci a toi monb grand
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Bonjour,

Ce n'est pas compliqué. Je te donne une méthode simple (ce n'est pas la seule).

Deux étapes :

Je stocke le nombre dans un tableau de caractère (scanf).
Pour dernier caractère jusqu'au 1er Faire
Afficher caractère
FinPour
Cdlt,

Google is your friend
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
630
hawi, toi tu les affiche juste :p
tu triche ;-)

(enfin, c'est plutôt moi qui me complique la vie, à penser un nombre en tant qu'entité binaire au lieu de penser ça comme une chaine de caractères)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Non, je ne triche pas. Je réponds à la consigne qui permet de lire un nombre et d'afficher sa valeur miroir ;-)))
Sinon, à la place d'afficher, il suffit juste de mettre dans une chaîne. Pas plus compliqué :-p.
Messages postés
835
Date d'inscription
dimanche 20 juillet 2014
Statut
Membre
Dernière intervention
9 avril 2016
111
il faut juste compter le nombre de chiffre (via scanf) puis les mettre chacun dans une variable et retourner l'ordre de ces variables si var1=2 , var2=5, var3=9 alors on mettra printf var 3 var 2 var1 etc
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Compter le nombre de chiffres via scanf ? Tu fais comment ? Ce n'est pas possible...

Ensuite stocker ça dans des variables, cela ne fonctionnera pas pour les grands nombres...
Messages postés
835
Date d'inscription
dimanche 20 juillet 2014
Statut
Membre
Dernière intervention
9 avril 2016
111
facon de parler je veux simplement les recuperer puis les stocker chacune dans mes variable mais bon comme il a mieux je prefer me taire (le C remonte a trop loin pour moi)
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
630
Faire simple ?
Je dirais plutôt que tu te complique la vie:
Stocker chaque nombre, c'est plutôt stocker chaque chiffre.
un octet suffit largement (char), et en faisant ça tu en utilise 4 fois plus !
c'est d'une part du gâchis, et d'autre part c'est beaucoup plus facile pour l'utilisateur d'entrer directement le nombre en entier et pour la console de l'interpréter comme une chaine de caractère.