Programmation c

Résolu
Bonjour chers informaticiens,
Je voudrais écrire un programme qui lit 20 numéros et affiche les trois plus petites.
Dans l'attente d'une suite favorable, je vous prie d'agréer l'expression de ma très haute considération. Teo.
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. Modérateur
    Salut,

    Je vais te donner un point de départ.
    Tu tries les 20 numéros par ordre croissante ou décroissante et tu n'affiches que les 3 premiers ou derniers.
    1
    1. Contributeur
      Salut,
      Bah écris le ^^.
      Si t'as des questions, n'hésite pas à les poser.
      0
      1. Ca prend 2 minutes à écrire.
        Faudrait arrêter de prendre les gens pour des pigeons.
        0
        1. Si je pose la question, c'est que je ne sais pas. J'ai seulement deux semaines de programmation c. Merci de pouvoir m'aider.
          0
        2. Contributeur
          @TeoSalut,
          Si on te demande un exercice, c'est que tu dois être capable de le faire ;).
          Si tu n'y arrives vraiment pas, propose au moins l'algorithme avec des mots français.
          Si t'y arrives toujours pas, tu peux déjà t'occuper de juste donner le nombre le plus petit d'un tableau.
          Et ça, la réponse est sur wikipedia et a même été répondu sur le forum de nombreuses fois.
          0
      2. Contributeur
        en fait je crois qu'il nous demande de lui écrire car lui ne sait pas....

        c'est ça ???
        0
        1. Si je demande, c'est parce que je ne sais pas. Merci de pouvoir m'aider.
          0
        2. Contributeur
          @papefall2005pour l'instant le prog ne demande pas a l'utilisateur de rentrer des numéros.

          aussi il ne marche pas mais ca peut etre un point de depart he l'affiche quand meme, mais il est mal ecrit

          int main ()
          {
          long tableau[20] = {5,8,65,78,4,123,45,7,9,65,84,566,12,57,48,56,18,687,589,2};
          long casier [20], armoire[20], valise[20], bagage[20], sac[20], fruit[20]; cadeau[20];
          long i, t = 1000, nombre = 0;

          for ( i= 0 ; i< 20 ; i++ )
          {
          long compteur = i+1;

          if (tableau[i] < tableau [compteur] )
          {
          casier[i] = tableau[i];
          nombre++;
          }}

          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", casier[1], casier[2], casier[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (casier[i] < casier[compteur] )
          {
          casier[i] = armoire[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", armoire[1], armoire[2], armoire[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (armoire[i] < armoire[compteur] )
          {
          armoire[i] = valise[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", valise[1], valise[2], valise[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (valise[i] < valise[compteur] )
          {
          valise[i] = bagage[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", bagage[1], bagage[2], bagage[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (bagage[i] < bagage[compteur] )
          {
          bagage[i] = sac[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", sac[1], sac[2], sac[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (sac[i] < sac[compteur] )
          {
          sac[i] = fruit[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", fruit[1], fruit[2], fruit[3]);
          return 0;
          }
          nombre = 0;

          for ( i = 0 ; i<nombre ; i++ )
          {
          long compteur = i+1;
          if (fruit[i] < fruit[compteur] )
          {
          fruit[i] = cadeau[i];
          nombre++;
          }}
          if (nombre == 3)
          {
          printf ("les trois plus petits nombres sont %i\n%i\n%i\n", cadeau[1], cadeau[2], cadeau[3]);
          return 0;
          }
          nombre = 0;

          }

          0
        3. Contributeur
          @HACKER 712Ca, c'est du programme lool.
          Je donne quand même une version plus concise :
          #include <stdio.h>
          #include <limits.h>
          
          #define NB_MIN 3
          
          int main(void){
              int tab[] = {5,8,65,78,4,123,45,7,9,65,84,566,12,57,48,56,18,687,589,2};
              int min[NB_MIN+1];
              int i;
          
              min[0]=INT_MIN;
              for(i=1;i<NB_MIN+1;i++){
                  size_t j;
                  min[i]=INT_MAX;
                  for(j=0;j<sizeof tab/sizeof *tab;j++)
                          if( tab[j]>min[i-1] && tab[j]<min[i] ) min[i]=tab[j];
              }
          
              for(i=1;i<NB_MIN+1;i++)
                  printf("min %d : %d\n",i,min[i]);
          
              return 0;
          }
          
          
          0
        4. Modérateur
          @fiddySalut,

          min[0]=INT_MIN;

          min[i]=INT_MAX;
          ?!!
          0
        5. Contributeur
          @fiddytu as vu ?

          et dire que tu doutais de mes capacités....

          !!!
          0
      3. Contributeur
        Tu ne sais pas ?
        Qu'est-ce que tu ne sais pas ?
        0
        1. Modérateur
          Re,

          Un autre exemple
          #include <stdio.h>
          
          #define NB_MIN 3
          
          int main(void)
          {
            int tab[] = {5,8,65,78,4,123,45,7,9,65,84,566,12,57,48,56,18,687,589,2};
            int min[NB_MIN];
            int i=0,j,k,imin,temp;
          
           for(k=(sizeof tab / sizeof *tab)-1;i<NB_MIN && k>=1;--k){
                imin=0;
                for(j=1;j<=k;++j)
                  if(tab[imin]>tab[j]) imin=j;
                temp=tab[k];
                tab[k]=tab[imin];
                min[i++]=tab[imin];
                tab[imin]=temp;
            }
          
            for(i=0;i<NB_MIN;i++)
              printf("min %d : %d\n",i,min[i]);
            return 0;
          }
          
          0
          1. Contributeur
            Allez, un dernier exemple pour la forme, avec tri du tableau comme le suggérait lami20j.
            #include <stdio.h>
            #include <stdlib.h>
            
            #define NB_MIN 3
            
            static int comp(const void *a, const void *b) {
                return *(const int*)a-*(const int*)b;
            }
            
            int main(void)
            {
                int tab[] = {5,8,65,78,4,123,45,7,9,65,84,566,12,57,48,56,18,687,589,2};
                qsort(tab,sizeof tab/sizeof *tab,sizeof *tab,comp);
            
                for(int i=0;i<NB_MIN;i++)
                    printf("min %d :%d\n",i,tab[i]);
            
                return 0;
            }
            

            Par contre, s'il y a plusieurs minimums (par exemple trois 2), les minimums affichés seront identiques. Ce qui n'était pas le cas de l'autre version.
            0
            1. Modérateur
              Salut,

              C'est la raison pour laquelle ta 1ère solution convient ;-)
              0
            2. Modérateur
              Re,

              J'ai corrigé la mienne pour remplir la même condition (Ce qui n'était pas le cas de l'autre version. )
              #include <stdio.h>
              
              #define NB_MIN 3
              
              int main(void)
              {
                int tab[] = {-20,-20,-20,-17,-17,2,5,8,65,78,4,123,45,7,9,65,84,566,12,57,48,56,18,687,589,2};
                int min[NB_MIN];
                int i=0,j,k,imin,temp;
              
               for(k=(sizeof tab / sizeof *tab)-1;i<NB_MIN && k>=1;--k){
                    imin=0;
                    for(j=1;j<=k;++j)
                      if(tab[imin]>tab[j]) imin=j;
                    temp=tab[k];
                    tab[k]=tab[imin];
                    if(tab[k]!=tab[k+1])
                            min[i++]=tab[imin];
                    tab[imin]=temp;
                }
              
                for(i=0;i<NB_MIN;i++)
                  printf("min %d : %d\n",i,min[i]);
                return 0;
              }

              0
          2. Contributeur
            Au final, vous lui avez fait son programme au feignant. Il a bien fait de demander ;)
            0
            1. Modérateur
              Salut,

              Ben, c'est la faute de fiddy ;-DDDD
              0
            2. Contributeur
              @lami20jNon de HACKER712 :DDD.
              0