Programmation c

Résolu
Teo -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

8 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Contributeur Dernière intervention   1 846
 
Salut,
Bah écris le ^^.
Si t'as des questions, n'hésite pas à les poser.
0
listing
 
Ca prend 2 minutes à écrire.
Faudrait arrêter de prendre les gens pour des pigeons.
0
Teo
 
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   Statut Contributeur Dernière intervention   1 846 > Teo
 
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 1282 Date d'inscription   Statut Contributeur Dernière intervention   255
 
en fait je crois qu'il nous demande de lui écrire car lui ne sait pas....


c'est ça ???
0
papefall2005
 
Si je demande, c'est parce que je ne sais pas. Merci de pouvoir m'aider.
0
HACKER 712 Messages postés 1282 Date d'inscription   Statut Contributeur Dernière intervention   255 > papefall2005
 
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   Statut Contributeur Dernière intervention   1 846 > HACKER 712 Messages postés 1282 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut,

min[0]=INT_MIN;

min[i]=INT_MAX;
?!!
0
HACKER 712 Messages postés 1282 Date d'inscription   Statut Contributeur Dernière intervention   255 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Tu ne sais pas ?
Qu'est-ce que tu ne sais pas ?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

C'est la raison pour laquelle ta 1ère solution convient ;-)
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Ben, c'est la faute de fiddy ;-DDDD
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Non de HACKER712 :DDD.
0