Allocation dynamique en c
amin009
Messages postés
121
Statut
Membre
-
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,
j'ai entrain de faire un exercice en programmation c , l'énoncé est de saisir 6 entiers et les ranger a partir d'une adresse de début et rechercher le maximum ,
j'ai utilise l'allocation dynamique pour réserver les cases mémoires pour les 6 entiers :
int *p;
p=(int *) malloc(6* size of (int);
mais par suite je n'est plus l'idée comment utiliser le pointeur p pour chercher le maximum
merci de m'aider.
j'ai entrain de faire un exercice en programmation c , l'énoncé est de saisir 6 entiers et les ranger a partir d'une adresse de début et rechercher le maximum ,
j'ai utilise l'allocation dynamique pour réserver les cases mémoires pour les 6 entiers :
int *p;
p=(int *) malloc(6* size of (int);
mais par suite je n'est plus l'idée comment utiliser le pointeur p pour chercher le maximum
merci de m'aider.
Configuration: Windows XP Firefox 3.0.7
2 réponses
-
*p = 1;
*(p+1) = 10;
...
*(p+5) = -3;
et ensuite tu utilises une boucle for pour trouver le max :
j = 0;
for ( i = 1 ; i < 6 ; i++ ) {
if (*(p+i) > *p) j = i;
}
le max est alors *(p+j)-
Salut,
Ton algorithme est faux.
Tu voulais sûrement mettre :if (*(p+i) > *(p+j)) j = i;
Et n'oublie pas de commencer ta boucle for à 1 et non à 0.
Cdlt- Erreur Fiddy !
Je ne l'ai pas testé, mais je pense être dans le vrai :
- Initialement je considère que le premier entier est le plus grand, le résultat est donc j=0.
- après je compare les éléments, donc seulement à partir du deuxième, et change la valeur de j si l'élément testé est plus grand que le premier.
Effectivement, mon code est plus complexe à comprendre, mais plus efficace (tu fais une itération de moins !) - Je ne l'ai pas testé, mais je pense être dans le vrai :
Ben t'aurais dû tester car ton algorithme est faux ;-).
- Initialement je considère que le premier entier est le plus grand, le résultat est donc j=0.
D'accord dans ce cas, je comprends l'algorithme que tu voulais faire et je confirme ce que j'ai dit lors de mon premier message : il faut comparer avec : if ( *(p+i) > *(p+j)) et non comparer *p.
Et effectivement dans ce cas, tu peux commencer à 1. C'est d'ailleurs l'algorithme que j'ai utilisé dans mon seconde post.
-
-
Salut,
Pourquoi utiliser un tableau dynamique alors que tu connais la taille à la compilation ?
Un simple : int p[6]; ferait parfaitement l'affaire.
Pour rechercher le maximum :int max=p[0]; for(int i=1;i<6;i++) if(p[i] > max) max=p[i]; printf("Le max est %d\n",max);
Cdlt