Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur dans code (PHP) d'un cours ? aide Ocaml ?

Cours : Algorithmique pour l'apprenti programmeur

Sujet résolu
    1 juillet 2018 à 16:47:20

    Bonjour,

     Pouvez vous m'aidez ?

    je lis le cours Cours  : Algorithmique pour l'apprenti programmeur

    ici : https://openclassrooms.com/courses/1467201-algorithmique-pour-lapprenti-programmeur

    On nous donnes du code PHP pour trouver la valeur max dans une série mais le code ne semble pas fonctionner...

     j'ai tester dans un compiler PHP et j'ai des messages d'erreur.

    une idée ?

    PHP :

    <?php
    function maximum($liste) {
       $max_actuel = 0;
       foreach ($liste as $elem)
           if ($elem > $max_actuel)
               $max_actuel = $elem;
       return $max_actuel;
    }
    ?>
    

    Erreur du compiler : 

    Error(s), warning(s):
    PHP Parse error:  syntax error, unexpected ' ' (T_STRING) in source_file.php on line 2


    Concernant le code Ocaml; quelqu'un saurait me dire comment il s'utilise ?

    Ocaml :

    let maximum liste =
      let rec parcours max_actuel = function
      | [] -> max_actuel
      | elem::reste -> parcours (max max_actuel elem) reste
      in parcours 0 liste
    

    j'ai bien compris que c'est une fonction mais je n'arrive pas a voir son nom ni comment on entre les arguments.

    genre en python j'aurai fait nomFonction(a, b) mais la je ne vois pas :( 

    je ne comprend pas non plus ce qu'est le mot "parcours" :euh:

    Merci

    EDIT :

    j'étais en train d'essayer de convertir le code en python et en fait je ne comprend pas pourquoi pour trouver la valeur max, il se met initialement a 0 ?

    Si la liste de nombre a comparer est négatives, rien ne fonctionnera ?

    Pourquoi ne se met on pas a l'index[0] de la liste afin de comparer tout les i a index[0] puis de garder la plus grande valeur en tant que max ?

    genre :

    lst = [3, 12, 5]
    
    vMax = lst[0]
    for i in lst :
      if i > vMax:
      vmax = i



    -
    Edité par DemKy 1 juillet 2018 à 17:32:00

    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2018 à 9:19:28

      Bonjour, pas sur que ce soit la bonne section du forum.

      1) Pour le PHP il me semble que tu as oublié des {} après le foreach

      2) Pour le caml tu as une fonction maximum qui prend un argument liste, pour l'utiliser il te suffit de faire

      maximum <ton_argument>



      • Partager sur Facebook
      • Partager sur Twitter
        2 juillet 2018 à 9:29:54

        Salut,

        Et non pour les listes avec que des nombres strictement négatifs, tu auras zéro comme maximum. L'auteur a sûrement fait ça pour éviter le cas de la liste vide, mais autant utiliser min_int. En fait, on pourrait écrire ça.

        let rec maximum = function
            | [] -&gt; min_int
            | h::t -&gt; max h (maximum t)
        

        Ou on pourrait lever une exception si on demande le maximum d'une liste vide.

        EDIT : comme d'habitude l'éditeur Markdown du forum est chiant, les -&gt; sont bien sûr à remplacer par ->.

        -
        Edité par yo@n97one 2 juillet 2018 à 9:35:31

        • Partager sur Facebook
        • Partager sur Twitter
        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
          2 juillet 2018 à 13:51:50

          Salut,

          Chez moi le code PHP fonctionne normalement. Peut-être as-tu fait une erreur en le recopiant ? Il y a bien sûr l'erreur de conception que tu soulèves, mais pas d'erreur de parsing.

          En ce qui concerne ton edit, c'est effectivement une bien meilleure manière de procéder.

          Enfin, pour OCaml, les fonctions sont utilisées différemment, via la currifycation. C'est quelque chose de courant en lambda-calcul, sur lequel repose OCaml. let maximum liste = définit une fonction, maximum, qui aura comme seul argument liste. Juste en-dessous, let rec parcours max_actuel = function est une fonction (récursive) qui prend en arguments deux paramètres, max_actuel et une liste, et l'on essaye de voir si la liste est vide [], ou si elle contient au moins un élément elem::reste. Ensuite , ligne 4 parcours s'appelle lui-même avec le code parcours (max max_actuel elem) reste. Le premier argument est le maximum actuel, le second le reste de la liste à explorer.

          Cette manière un peu bizarre de faire s'appelle de la récursivité terminale, c'est pratique parce que ça consomme beaucoup moins de ressources que la récursivité classique. Mais si tu ne sais pas ce que c'est, regarde plutôt la solution donnée par yo@n.

          • Partager sur Facebook
          • Partager sur Twitter
            2 juillet 2018 à 13:59:00

            Je ne vois pas trop ce qui pourrait cause l'erreur PHP dont tu parles puisqu'il n'y a pas de chaîne de caractères dans l'extrait de code. Tu es sûr que le problème n'est pas de ton côté ?

            En OCaml, différents sucres syntaxiques (dont la curryfication) font qu'une fonction peut se déclarer avec quelque chose comme let fonction_name [args...] = .... Ici, on voit qu'est déclarée une fonction maximum recevant un paramètre liste. parcours correspond à une fonction définie à l'intérieur de la première qui permet de parcourir la liste récursivement tout en en détectant la valeur maximum.

            Pour ce qui est de l'initialisation à 0, ta remarque est juste.

            • Partager sur Facebook
            • Partager sur Twitter
              15 juillet 2018 à 14:34:17

              merci pour vos réponses!
              • Partager sur Facebook
              • Partager sur Twitter

              erreur dans code (PHP) d'un cours ? aide Ocaml ?

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown