Min et max d'une liste de nombres aleatoires

Fermé
maria_silva Messages postés 13 Date d'inscription samedi 18 juin 2011 Statut Membre Dernière intervention 27 février 2012 - 26 juin 2011 à 19:37
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 27 juin 2011 à 08:47
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
26 juin 2011 à 20:13
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 13 Date d'inscription samedi 18 juin 2011 Statut Membre Dernière intervention 27 février 2012
27 juin 2011 à 01:45
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
27 juin 2011 à 08:06
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
27 juin 2011 à 08:47
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