IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Recherche du max d'un tableau récursivement


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut Recherche du max d'un tableau récursivement
    Aujourd'hui j'ai passé un devoir d'algorithme.
    SVP je veux une solution de cet exercice :
    Rechercher le maximum d'un tableau contenant n entiers mais avec un algorithme récursif.
    Voici ce que j'ai essayé pour la fonction Max :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function Max(t : tab , var n : integer ) : integer;
    begin
    if n = 1 then
      Max := t[n] 
    else if t[n] =< t[n-1] then
      Max := Max(t , n-1);
    end;
    Ca tourne pas.
    SVP montrez-moi ma faute...

  2. #2
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Par défaut
    Bonjour,

    logiquement, ce code fonctionne :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    max := MOINS_INFINI;
     
    function recherche_max(t : tableau; n : integer; var max : integer) : integer;
    begin
      if n > 1 then
      begin
        if t[n] > max then
          max := t[n];
        recherche_max(t, n - 1, max);
      end;
    result := max;
    end;
    Bon courage !

    Cordialement,
    Sidahmed.

  3. #3
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour
    voila j'ai une solution à te proposer j'avais un code comme ça en java et il fallait juste transformer en code Pascal
    la fonction high renvoie la taille du tableau passé en paramettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function recherche_max(t : tableau; pos : integer) : integer;
    var mxi:integer;
    begin
      if (pos =High(t)-1) then
         recherche_max:=t[pos]
      else if(pos<=High(t)) then
      begin
        mxi:=recherche_max(t,pos+1);
           if (t[pos] < mxi) then
              recherche_max:=mxi
           else
              recherche_max:=t[pos];
      end
      else
           recherche_max:=0;
    end;
    C'est le meme principe que avec uen boucle sauf bien sur que la c'est recursif
    donc pour commencer tu initialise pos a zero dans ton programme principal
    voila a plus
    Ps:sidahmed je vais jeter un coup d'oeil sur le code que tu propose mais a vue d'oeil il compilera pas
    Citation Envoyé par sidahmed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    max := MOINS_INFINI;
     
    function recherche_max(t : tableau; n : integer; var max : integer) : integer;
    begin
      if n > 1 then
      begin
        if t[n] > max then
          max := t[n];
        recherche_max(t, n - 1, max);
      end;
    result := max;
    end;
    @+

  4. #4
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Par défaut
    Bonjour,
    Citation Envoyé par krachik Voir le message
    Ps:sidahmed je vais jeter un coup d'oeil sur le code que tu propose mais a vue d'oeil il compilera pas
    @+
    Ah bon ! Ça fonctionne parfaitement sous Delphi.

    Cordialement,
    Sidahmed.

  5. #5
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Autan pour moi je viens de tester sous Turbo Pascal 7.0 et comme j'avais dit il y a une erreur et il faut que cette fonction soit affecté a cette ligne la,
    c'est la différence en TP et Delphi et sous TP7 le result aussi n'existe pas,
    Désolé encore autant pour moi vu qu'on a pas les meme compilateur
    @+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Par défaut
    dans le programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function Max(t : tab , var n : integer ) : integer;
    begin
    if n = 1 then
      Max := t[n] 
    else if t[n] =< t[n-1] then
      Max := Max(t , n-1);
    end;
    il manque le traitement du cas n>1 et t[n] > t[n-1] :
    qui est le max dans ce cas ? :

    L'idée c'est que le max de t[1] à t[n] est le max entre
    1) t[n]
    2) le max de t[1] à t[n-1]

    d'où le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function Max(t : tab , var n : integer ) : integer;
    var M:integer;
    begin
    if n = 1 then
      Max := t[n] 
    else 
      begin M:=max(t,n-1);
              if M< t[n] then max:=t[n] else max:= M;
       end;
    end;

  7. #7
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour
    dans cas il faut enlever le var dans l'entete de la fonction et changer le "," en ";"
    Citation Envoyé par PierreVeuillez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Max(t : tab , var n : integer ) : integer;
    var M:integer;
    begin
    if n = 1 then
      Max := t[n] 
    else 
      begin M:=max(t,n-1);
              if M< t[n] then max:=t[n] else max:= M;
       end;
    end;
    et ensuite ne pas oublier d'initialiser n dans le code principale à la taille du tableau utilisé
    @+

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut merci
    je suis vraiment d'inscrire dans ce forum et je vous remercie
    vous êtes vraimebt tres gentil

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TPW] Rechercher la plus grande valeur dans un tableau récursivement
    Par abdou monta dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 10/05/2013, 15h36
  2. Recherche des indices min et max dans un tableau 2D
    Par Bysbobo dans le forum LabVIEW
    Réponses: 3
    Dernier message: 03/05/2013, 08h36
  3. recherche valeur max dans un tableau
    Par www.rubis dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2011, 17h43
  4. [Turbo Pascal] Recherche du max d'un tableau d'entiers
    Par amin89 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 20/12/2009, 15h37
  5. Recherche Min/Max dans un tableau
    Par kuroro20 dans le forum C
    Réponses: 4
    Dernier message: 26/10/2007, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo