Allocation dynamique en c
amin009
Messages postés
121
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
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.
A voir également:
- Allocation dynamique en c
- Tableau croisé dynamique - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Liste déroulante dynamique excel - Guide
- Liste déroulante dynamique en cascade excel - Guide
- Sommaire dynamique word - Guide
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)
*(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)
Ton algorithme est faux.
Tu voulais sûrement mettre :
Et n'oublie pas de commencer ta boucle for à 1 et non à 0.
Cdlt
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 !)
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.