Allocation dynamique en c

amin009 Messages postés 121 Statut Membre -  
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.
Configuration: Windows XP
Firefox 3.0.7

2 réponses

  1. tatou_38 Messages postés 1220 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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
      1. tatou_38 Messages postés 1220 Date d'inscription   Statut Membre Dernière intervention   121 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
      2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > tatou_38 Messages postés 1220 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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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