Transformer un entier en deux nombres composé des memes chiffres ordonnés par ordre croissant et décroissant

Soyez le premier à donner votre avis sur cette source.

Vue 4 029 fois - Téléchargée 99 fois

Description

Programme permettant de transformer un nombre en deux nombres composés des mêmes chiffres ordonnés de manière croissante et décroissante sans utiliser de tableaux.

Source / Exemple :


/* =============================================================================
  
   OBJET            : Programme permettant de transformer un nombre en deux nombres composés
                      des mêmes chiffres ordonnés de manière croissante et décroissante. 
                      N'utilise pas les tableaux
   --------------------------------------------------------------------------------
   DATE DE CREATION : 10/03/2010
   AUTEUR           : Thebroyeur
   --------------------------------------------------------------------------------
   MODIFICATIONS (   n) date - auteur - description )
   ============================================================================= */

#include <stdio.h>

/*=================================
     FONCTION nombreCroissant
=================================*/
// retourne un entier contenant les memes chiffres que nombre dans l'ordre croissant
// Pour chaque chiffre de nombre, la fonction insère le chiffre dans nb_croissant de telle sorte que
// nb_croissant est ses chiffres triès par ordre croissant
/*===============================*/

void nombreCroissant(long nombre)

{
 
  long nb_croissant=0;
  long puis=1;   /* utiliser pour gerer les puissance de 10*/
  long reste=0; 
  long chiffre;

  while (nombre!=0)
    {chiffre=nombre%10;
      puis=1;reste=0;
      while ((nb_croissant!=0)&&(nb_croissant%10>chiffre))
	/* nb_croissant contient les chiffres de nombre classé par ordre croissant. Ces chiffres sont ceux obtenus 
           par les %10*/
	{ reste+=puis*(nb_croissant%10);
	  puis*=10;
	  nb_croissant/=10;
	}
      /* reste contient les chiffres classé par ordre croissant de nb_croissant se situant entre la virgule et la place 
	 final de chiffre dans nb_croissant*/
      nb_croissant=(nb_croissant*10+chiffre)*puis+reste;
      nombre/=10;
    }

      
  
  printf("Croissant :  %ld \n",nb_croissant);  
  
}

/*=================================
     FONCTION nombreDecroissant
=================================*/
// retourne un entier contenant les memes chiffres que nombre dans l'ordre decroissant
// Pour chaque chiffre de nombre, la fonction insère le chiffre dans nb_decroissant de telle sorte que
// nb_decroissant est ses chiffres triès par ordre decroissant
/*===============================*/

 
void nombreDecroissant(long nombre)
/* retourne un entier contenant les memes chiffres que nombre dans l'ordre decroissant*/
{
 
  long nb_decroissant=0;
  long puisd=1;
  long rested=0;
  long chiffred;

  while (nombre!=0)
    {chiffred=nombre%10;
      puisd=1;rested=0;
      while ((nb_decroissant!=0)&&(nb_decroissant%10<chiffred))
	/* nb_decroissant contient les chiffres de nombre classé par ordre decroissant. Ces chiffres sont ceux obtenus 
           par les %10*/
	{ rested+=puisd*(nb_decroissant%10);
	  puisd*=10;
	  nb_decroissant/=10;
	}
      /* reste contient les chiffres classé par ordre decroissant de nb_decroissant se situant entre la virgule et la place 
	 final de chiffre dans nb_decroissant*/
      nb_decroissant=(nb_decroissant*10+chiffred)*puisd+rested;
      nombre/=10;
    }

      
  
  printf("Decroissant :  %ld \n",nb_decroissant);  
  
}

/*=================================
     FONCTION main
=================================*/
/*===============================*/

int main()
{
  long nombre;
  printf("Entrez un nombre \n");
  scanf("%ld",&nombre);
  nombreCroissant(nombre);
  nombreDecroissant(nombre);

  return 1;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
7
Date d'inscription
dimanche 10 décembre 2006
Statut
Membre
Dernière intervention
8 mai 2010
4
salut,

Regarde si tu a bien copié le code parce-que cela marche très bien chez moi

voilà :)

thebroyeur
Messages postés
71
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
20 avril 2008

salut,

marche pas pour tous les nombres dommage!
exemple : 10, 1023456789 (oulala le décroissant comme 96308520741)

voilà :)
Mick

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.