Allocation dynamique en c

Fermé
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010 - 7 mars 2009 à 04:24
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 mars 2009 à 10:52
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 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
7 mars 2009 à 07:06
*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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
7 mars 2009 à 10:27
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 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
7 mars 2009 à 10:43
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840 > tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015
7 mars 2009 à 10:52
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
7 mars 2009 à 10:23
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