Programmation c
Résolu
Teo
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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.
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
-
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. -
Salut,
Bah écris le ^^.
Si t'as des questions, n'hésite pas à les poser. -
-
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.
- 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.
-
-
en fait je crois qu'il nous demande de lui écrire car lui ne sait pas....
c'est ça ???-
-
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;
}
-
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; } -
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Tu ne sais pas ?
Qu'est-ce que tu ne sais pas ? -
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; } -
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.-
-
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; }
-
-
Au final, vous lui avez fait son programme au feignant. Il a bien fait de demander ;)