Min et max d'une liste de nombres aleatoires

maria_silva Messages postés 17 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Je souhaite créer un fonction qui génère un tableau de nombres aléatoires(entre 1 et 100) et delà, qu'elle puisse déterminer le min et le max. Je ne comprends pas pourquoi la partie de la fonction pour trouver le "min" ne marche pas.

Je vous remercie pour votre aide.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
int MAX=100;
int MIN=1;

int calcul(int *tab,int n)
{

tab=malloc(n*sizeof(int));

srand(time(NULL));
int i;
int max;
int min;
min=max=tab[0];

/*int j;*/

for(i=0;i<n;i++)
{
tab[i]=rand()%MAX;

printf("tab[%d]:%d\n",i,tab[i]);

if(tab[i]<min)

min=tab[i];

else if(tab[i]>max)
{
max=tab[i];
}

}
printf("\n");
printf("max est:%d\n",max);
printf("min est:%d\n",min);

return tab[i];
}

int main (int argc, char *argv[])
{
int n;
int tab;

printf("ingrese limite:");
scanf("%d",&n);

calcul(&tab,n);

return 0;

}
A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Quand tu fais min=max=tab[0], tab[0] n'est pas initialisées et sa valeur par défaut a peu de chance d'être en MIN et MAX (par exemple chez moi elle vaut -858993460)
Du coup puisque tu n'as jamais de valeurs aléatoires plus petite que ce nombre, c'est ce résultat faux que tu gardes jusqu'à la fin...

Il vaudrait mieux faire une initialisation, int min=MAX, max=MIN;
1
maria_silva Messages postés 17 Statut Membre
 
salut!! merci pour ta réponse, mais si j'initialise mes variables min et max comme MIN et MAX, il prend les valeurs entre 1 et 100 (que j'utilise pour mes bornes de la partie aleatoire) et non les nombres qui appartient a mon tableau.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Attention : c'est min que tu initialises à MAX, et max que tu initialises à MIN...
Ça marchera parce que tu sais que les nombres qui seront dans ton tableau seront compris entre MIN et MAX, donc dès le premier calcul tab[0]<=MAX donc tab[0]<=min donc on fait min=tab[0] dans le premier if, et tab[0]>=MIN, donc tab[0]>=max, donc on fait max=tab[0] dans le deuxième if et tout marchera correctement à condition d'enlever ce else qui n'a pas de sens...
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Autres remarques :
Ton return tab[i] n'a aucun sens, car en sortie de boucle on a i==n alors que tab[n] n'est pas défini. De plus tu défini dans le main tab comme int, alors que ça doit évidemment être un tableau sinon tu ne pourras pas récupérer les résultats de celui-ci...
En fait ça présente un problème plus "grave" dans ta manière de concevoir le code, il faudrait séparer les opérations d'affectations et de calculs, c'est à dire d'abord tu initialises ton tableau avec des valeurs aléatoires et après seulement tu lui appliques des calculs comme faire le min et le max. C'est vraiment bizarre de modifier ce qu'on calcul au moment où on le calcule...
0