Help à la finition d'un prog. (tri croissant)

Résolu/Fermé
Novice :-( - 5 févr. 2008 à 16:24
 merccccccciiiii - 24 mars 2010 à 11:56
Bonjour,
voila j ai voulu créer un programme qui classe une série de nombre par ordre croissant, je ne suis pas trés doué en programmation, je suis arriver à faire ce programme :


#include <stdio.h>
#include <stdlib.h>

int main()
{
int Liste[15];
int i, j, k, min;

Liste[0]=1;
Liste[1]=26;
Liste[2]=4;
Liste[3]=15;
Liste[4]=2;
Liste[5]=7577878;
Liste[6]=4578;
Liste[7]=100;
Liste[8]=101;
Liste[9]=42;

for (i=0; i<10; i++){
for (j=0; j<10; j++){
if (Liste[j]<Liste[i]){
min = Liste[j];
Liste[j] = Liste[i];
Liste[i] = min;
}
}
}
for (k=9; k>-1; k=k-1){
printf("%d \n", Liste[k]);
}

system("PAUSE");
return 0;
}




est ce que c est la meilleure méthode et est elle bien?...
Avec ça j aimerais que ca soit l utilisateur qui rentre lui meme des nombres et que ça les classe, comment faire?
- je vois pas comment faire pour les taper dans la console (espace, a la ligne,..??)
- quelles variables utiliser et comment faire si jamais mon tableau fait 5 cases ou 150 ...

Merci pour vos réponses :D
a trés bientôt

6 réponses

salut Mahmah,
merci beaucoup pour ta réponse trés compléte!il y a tout ce que je voulais et bien expliqué :D
je vais essayer tout ce que tu m as dis (pour ce qui est de l allocation dynamique, faut que je regarde sur le net comment ca fonctionne, j ai jamais faits avec ca)

si jamais tu connais un bon site qui explique bien ca et donc le langage C je veux bien (surtout pointeurs et all. dynamique) à par le site du zero. merci bien

SUJET RESOLU : Méthodes de tris + définir taille tableau

Bonne soirée!
et encore merci ;)
1
MrOrange Messages postés 5 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 5 février 2008 1
5 févr. 2008 à 16:35
Pour récupérer l'entrée clavier de l'utilisateur, il faut utiliser la fonction scanf
0
Tu peux faire une boucle tant qu'il ne saisi pas 0 ou -1 par exemple (et qu'il n'est pas or limite du tableau bien sur)

Ensuite en ce qui concernen ltri croissant tu as plusierus méthode:
Tri par recherce de maxi ou mini ensuite il y en a d'autre mais c'est plus complexe tu as le tri a bulle un autre dont je sais plus le nom...
Si sa t'interesse je peux te l'expliquer mais seulement ce soir.

Pour la taille prend le maxi ou fait saisir a l'utilisateur le nb de chiffre qu'il veut entrer (la tu change la boucle de saisi)

J espere que sa t'aidera
0
merci pour vos réponse.

pour la fonction scanf, ok je suis en train de tester, mais bon dans la console je sais pas coment je dois taper les nombres?

oui mais si on saisit une série de nombre et que l on veut s arréter à un 5 par exemple, comment dire au programme qu on a fini de taper les nombres?


Dam : j ai pas tout compri, tu veux dire que je dois y mettre une limite au tableau en fait? par exemple qu on ne peut pas taper plus de 10 nombres ?...

sinon pour mon programme déjà fait, est il bien? vous en penser quoi? j ai commencé il y a 2 jours la programmation et je me suis creuser le cerveau :D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
5 févr. 2008 à 21:38
Bonjour,

Il y a toujours plusieurs solution, soit tu limites effectivement à une certaine taille:
#define MAX 27

void main( int argc, char **argv )
{
   int monTableau[MAX];

   printf( "Entrez %d nombres\n", MAX );

   for ( unsigned int i = 0 ; i != MAX ; i++ )
   {
      while ( scanf( "%d", &monTableau[i] ) != 1 );
   }
...

Soit idem en demandant au début combien il veut en rentrer et vérifier si le tableau est assez grand pour.
Soit idem avec un nombre particulier du style -1 pour arrêter.
Soit ... plutôt que d'avoir un tableau dont on connait la taille à la compilation (statique) on alloue dynamiquement un talbeau:

void main( int argc, char **argv )
{
   int *monPointeur = NULL;
   int maTaille = 0;

   printf( "Entrez la taille du talbeau );
   flush( stdin );
   scanf( "%u", &maTaille );

   if ( maTaille == 0 )
   {
      printf( "Haha, gors malin !\n" );
      return;
   }

   // Préparer le tableau -> demander de la mémoire (exprimé en octect)
   monTableau = (int*) malloc( maTaille * sizeof(int) );

   if ( monTalbeau == NULL )
   {
      printf( "Hé le plouc, ton ordi est pas foutu de me donner de la mémoire y doit être dans un pâté pas terrible et va certainement planter sous peu, bonne chance à tous les deux\n" );
      return;
   }

   for ( unsigned int i = 0 ; i != maTaille ; i++ )
   {
      while ( scanf( "%d", &monTableau[i] ) != 1 );
   }

   // La on fait quand même mumuse avec le talbeau
   ...

   // Et là on rend la mémoire qu'on nous a gentillement prêté ^^
   free( monTableau );
   monTalbeau = NULL; // Pas obligatoire mais marque le pointeur comme étant inutilisable.


ou alors... (je ne le taperai pas ^^")
Le coup du -1 avec un tableau dynamique (et gaspillage de mémoire dérisoire)
- on alloue un espace mémoire pour contenir N int.
- on compte combien d'entiers il saisit.
- si il en saisit N, on réalloue un tableau plus grand (avec realloc) Communément on double chaque fois la taille (Si on en est à 4000 entier on ne va pas s'amuser à refaire une allocation pour en prendre 4100, on suppose qu'il ne va pas s'arrêter si vite)

Pour les tris il y a surement sur le net tout ce qu'il faut.
tri bulle (comme une bulle qui remonte dans un verre, on prends la première valeur et on la remonte dans le tableau pour trouver sa place)
tri par insertion (très bien pour notre cas) même genre que tri bulle mais sur un tableau en construction.
tri fusion (on démonte le tableau puis on reconstruit chaque miette par insertion dans les autres miettes)
tri pivot ( on prend un nombre au pif, généralement le premier du talbeau et on construit deux tableaux : les nombres plus petits et les nombres plus grand, puis on recole avec le pivot entre les deux apr_s avoir recommencé sur les deux sous-tableaux)

voili voilou,

M.
0
merccccccciiiii
24 mars 2010 à 11:56
oui elle es super mais va sur forum.com tu tape ouvrir un forum
0