Allocation dynamique en c

amin009 Messages postés 121 Statut Membre -  
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.

2 réponses

tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
*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)
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
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
0
tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121 > fiddy Messages postés 11653 Statut Contributeur
 
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 !)
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention  
 
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.


0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
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
0