Tri croissant et décroissant d'entiers

Contenu du snippet

Ce programme saisit des valeurs dans un tableau x de 100 entiers,
puis les trie dans un ordre croissant ou décoissant selon votre choix:p)

<<Made by Thierry N.>>

Source / Exemple :


#include <stdio.h> 
	#include <conio.h>
	#define LG 128
	main()
	{
		int x[100];         /*  tableau d'entiers  */
		int i = 0;          /*  variable de controle  */
		int last;           /*  Index de la derniere valeur saisie  */
		int d;              /*  nombre de passages de tri  */
		int k,j,z,ok;         /*k,z et ok sont des variables de controles,et j un cpteur*/
		int temp;            /*  variable auxiliaire pour permutation  */
		char reply;          /*  variable de contr0le  */
		char ligne[LG+1];    /*tabeau recevant la saisie de l'utilisateur au clavier*/

		printf("Le programme saisit jusqu'à 100 entiers positifs compris entre \n"
		"0 et 30000 et les trie en ordre croissant ou décroissant (au choix).\n"
		"Fin par -1.\n\n");
		printf("Entrez les nombres positifs :\n\n");

		do
		{
		  /*ici on controle si la valeur saisie est entiere et appatient à l'inteval
		    voulu,sinon on genère un message d'erreur*/
		do{ ok=0;
		gets(ligne);
		for(j=0;j<strlen(ligne);j++)

		/*ceci protège contre la saisie des valeurs réelles*/
		if(ligne[j]=='.'){ok=1;printf("Saisie incorrecte!Recommencer SVP:\n");}

		 k=sscanf(ligne,"%d", &x[ i ]);

		 /*ceci protège contre une touche inattendue ou une valeur
		 non compris dans l'interval voulu*/

	 if(k!=1) {printf("Saisie incorrecte!Recommencer SVP:\n");ok=1;}
	else if(!(x[ i ]>=-1&&x[ i ]<=30000)){printf("Saisie incorrecte!Recommencer SVP:\n"); ok=1;}

		/*c'est le dernier test contre les données superflues du genre 25ff ou 2f*/
		if(ok==0)for (j=0;j<strlen(ligne);j++){z=ligne[j]-'1';
	 if(!(z>=0&&z<10)&&x[i]!=-1&&ligne[j]!=32&&ligne[j]!='0')
		 {ok=1;
				  /*on vide*/
                        for (j=0;j<strlen(ligne);j++)ligne[j]=' ';
			 printf("Des données superflues saisies!\n");
				 printf("Recommencer la précédente saisie\n");}
		 }

		}while(ok);

		i++;
		} while (x[i-1] != -1  &&  i < 100);

		/*Rien n'est changé à ce niveau sauf le message sur le nombre des valeurs saisies*/
		if(i==100) printf("\nvous avez saisie %d valeurs",i);
		else printf("\nvous avez saisie %d valeurs",i-1);
			  if (i == 100)
			  last = i-1;
			  else
			  last = i-2;

			  if (i == 2)
		printf("\n\nLe tableau ne contient que la valeur : %d\n\n", x[i-2]);
			  else if (i > 2)
		{

		printf("\n\nLe tableau contient les valeurs :\n\n");
		for (i = 0; i <= last; i++)
		{
		printf("%d\t", x[ i ]);
			  if (i && (!(i % 8)))
		printf("\n");
		}

      /*test de selection de choix*/
		do{ ok=0;
		printf("\n\nTri du tableau ?\n"
		"Ascendant = a   Descendant = d  Non = n :  ");
		reply = getche();
		k=reply;
		if(k!='a'&&k!='d'&&k!='n'){ok=1;printf("\n\nchoix incorrect\n");}
		if(k=='n')printf("\n\nFIN DU PROGRAMME,Merçi :p).");
		}while(ok);

	   switch (reply)
	   {
	   case 'a':   for (d = last; d != 0; d--)
	   for (i = 0; i < d; i++)
           if (x[ i ] > x[i+1])                              
	   { /*  on permute  */
	   temp = x[ i ];
	   x[ i ] = x[i+1];
	   x[i+1] = temp;
	   }
		printf("\n\nLe tableau a été trié en ordre ascendant :\n\n");
	   for (i = 0; i <= last; i++)
	   {
	   printf("%d\t", x[ i ]);
           if (i && (!(i % 8)))                             
	   printf("\n");
	   }
	   break;
	   case 'd':   for (d = last; d != 0; d--)
	   for (i = 0; i < d; i++)
           if (x[ i ] < x[i+1])   
           {   
	   temp = x[ i ];
	   x[ i ] = x[i+1];
	   x[i+1] = temp;
	   }
	   printf("\n\nLe tableau a été trié en ordre descendant :\n\n");
	   for (i = 0; i <= last; i++)
	   {
	   printf("%d\t", x[ i ]);
           if (i && (!(i % 8)))                            
	   printf("\n");
	   }
           }                                                         
           }                                                            
        }

Conclusion :


J'ai pris de soin de protéger le programme contre les saisies éroonées de l'utilisateurs.
Veuillez me signifier si vous arriver a planter ce programme,vos remarques sont les bien venues Merçi :p).

A voir également

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.