Programmation c

Résolu/Fermé
Teo - 13 févr. 2009 à 21:41
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 févr. 2009 à 11:29
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.
A voir également:

8 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2009 à 11:28
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
13 févr. 2009 à 23:48
Salut,
Bah écris le ^^.
Si t'as des questions, n'hésite pas à les poser.
0
Ca prend 2 minutes à écrire.
Faudrait arrêter de prendre les gens pour des pigeons.
0
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Teo
14 févr. 2009 à 11:22
Salut,
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
HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 255
14 févr. 2009 à 11:05
en fait je crois qu'il nous demande de lui écrire car lui ne sait pas....


c'est ça ???
0
Si je demande, c'est parce que je ne sais pas. Merci de pouvoir m'aider.
0
HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 255 > papefall2005
16 févr. 2009 à 09:25
pour 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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009
16 févr. 2009 à 12:53
Ca, 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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
16 févr. 2009 à 13:10
Salut,

min[0]=INT_MIN;

min[i]=INT_MAX;
?!!
0
HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 255 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
16 févr. 2009 à 13:25
tu as vu ?


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


!!!
0

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

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 févr. 2009 à 11:00
Tu ne sais pas ?
Qu'est-ce que tu ne sais pas ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2009 à 18:45
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 févr. 2009 à 19:07
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2009 à 19:23
Salut,

C'est la raison pour laquelle ta 1ère solution convient ;-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2009 à 19:41
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
17 févr. 2009 à 08:34
Au final, vous lui avez fait son programme au feignant. Il a bien fait de demander ;)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 févr. 2009 à 08:44
Salut,

Ben, c'est la faute de fiddy ;-DDDD
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
17 févr. 2009 à 11:29
Non de HACKER712 :DDD.
0