PHP : compléments

Licence Informatique 2ème année

Youssef Chahir - Alexandre Niveau - Jean-Marc Lecarpentier

 

PHP : compléments

Notes de cours

Travail personnel

Objectifs

On continue à manipuler PHP et on aborde ses différentes fonctionnalités.

Exercice 1 — Composition de pizzas #

Dans cet exercice, nous travaillerons avec un tableau associatif comportant des clés sous forme de chaînes de caractères représentant des noms d'ingrédients, et des valeurs correspondant aux prix de ces ingrédients, exprimés en nombres réels.

Considérons le tableau suivant :
$dicoprix=array("jambon"=>3,"saucetomate"=>1.5,'poivrons'=>2,'oignons'=>1,"champignons"=>2,"mozarella"=>1.5,                           "cremefraiche"=>1.5,"chevre"=>2,"tomates"=>2,"lardons"=>2.5,'saumon'=>4,'merguez'=>3);
  1. Écrire la fonction combien(array $dico): int qui renvoie le nombre d'ingrédients présents dans le tableau $dico.
  2. Écrire la fonction prix_moyen(array $dico): float qui renvoie la moyenne des prix des ingrédients du tableau $dico.
  3. Remarque : on pourra arrondir le prix avec 2 chiffres après la virgule.
  4. Écrire la fonction moinscher(array $dico): array qui renvoie le tableau avec les noms des ingrédients le moins cher du tableau $dico.
  5. Écrire la fonction dollars(array &$dico): void qui modifie $dico pour que les prix soient en dollars. On prendra comme taux de conversion 1 euro correspond à 1.12 dollars.
  6. Écrire la fonction prixpizza(array $liste_ingredients, array $dicoprix): float qui étant donnés une liste d'ingrédients $l qui correspond aux ingrédients d'une pizza et un tableau de prix renvoie le prix de la pizza correspondante : pour cela on fera le total des prix des ingrédients qu'on multipliera par 1.5 pour tenir compte de la pâte, du four etc. On suppose que tous les ingrédients des listes sont présents dans le tableau $dicoprix.
  7. Le patron gère plusieurs succursales et il se rend compte qu'il n'y a pas les mêmes prix partout. Écrire la fonction gestion(array $dicoprix1, array $dicoprix2): array qui étant donnés deux tableaux va fabriquer un nouveau tableau de prix : dans le nouveau tableau il doit y avoir tous les ingrédients présents dans l'un des deux tableaux et quand un ingrédient est dans les deux tableaux, on doit garder le prix le moins élevé des deux.
  8. On considère un deuxième tableau : les clés sont des strings qui sont des noms de pizzas et les valeurs associées sont des listes d'ingrédients. On aura comme exemple :
    $monDicoPizzas=array(
                              "reine"=>["jambon","mozarella","sauce_tomate","champignons"],
                              "vesuvio"=>['merguez','jambon','mozarella','poivrons','oignons'],
                              "cabri"=>["chevre","lardons","creme_fraiche","mozarella"],
                              "napoli"=>["jambon","tomates","mozarella","sauce_tomate","champignons","poivrons","oignons"],
                              "neptune"=>['saumon','creme_fraiche','champignons']);
  9. Écrire la fonction possible(array $dicopizzas, float $val, array $dicoprix): array qui renvoie un tableau vaec tous les noms des pizzas qu'on peut acheter si on a la somme val.
  10. Finalement on décide d'avoir une fonction qui peut construire un troisième tableau.
    1. Écrire la fonction fusion($dicoprix, $dicopizzas) qui renvoie le tableau où chaque pizza est associée à son prix et ses ingrédients (la valeur associée à un nom de pizza sera un tableau composé de 1) la liste des ingrédients et 2) du prix)
    2. Écrire une fonction affichage qui étant donné un tel tableau (issu de la fusion) fait un affichage style menu de pizzeria :
      Menu des pizzas :
      * Pizza reine : 12 euros -- jambon/mozarella/sauce_tomate/champignons
      * Pizza vesuvio : 15.75 euros -- merguez/jambon/mozarella/poivrons/oignons
      .....
    3. Le responsable de la pizzeria veut aider les gens allergiques.
      • Ecrire la fonction inter($l1,$l2) qui teste si deux tableaux $l1 et $l2 ont au moins un élément commun.
      • En déduire la fonction sansAllergie($monDicoPizzas, $listeallergenes) qui renvoie les noms des pizzas qui ne contiennent aucun élément de listeallergenes dans leur composition.