PHP fonction MAX

maxime89 -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je doit réaliser un petit programme PHP qui demande a l'utilisateur de rentrer 10 nombres et le programme doit afficher le plus grand. Pour la fonction MAX j'ai lu qu'il fallais saisir les valeurs sauf que dans mon cas c'est l'utilisateur du programme qui doit rentrer les valeurs.

Pour le moment j'ai réussi a faire une boucle mais impossible d'afficher la valeur maximale:

<?php
include ("lireClavier.php");
$nombre_de_lignes = 1;
$nb=1;

while ($nombre_de_lignes <= 10){
    $nombre=readline("entrez un nombre $nb: ");
    $nombre_de_lignes++; // $nombre_de_lignes = $nombre_de_lignes + 1
    $nb++;
}

echo max ($nombre);


 


?>

EDIT : Ajout des balises de code

A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

La fonction php MAX s'applique sur un ARRAY
https://www.php.net/manual/fr/function.max.php

Il faut donc que tu stockes les valeurs saisies par ton utilisateur dans un array.
Tu peux aussi, par précaution, forcer leur type en nombre (via FLOAT ou intval )

Un truc du genre :
//Affichage des erreurs PHP
error_reporting(E_ALL);

require_once "lireClavier.php";


// Tableau de sorti 
$arrNombres = array();

// Lit les commandes de l'utilisateur
for ($i=0; $i < 10; $i++) {
        $line = readline("entrez un nombre : ");
        $arrNombres[] = intval($line);
}

echo "<br><br>la valeur max est :";
echo MAX($arrNombres);

1
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Pour compléter ce que dit Jordane (toujours pertinente), je voudrais quand même pointer du doigt une erreur de conception de ton code, indépendamment de l'utilisation de max() : à chaque itération de la boucle, tu écrases $nombre en y mettant la nouvelle valeur. Tu perds donc toute information passée.

Une autre solution serait d'effectuer la comparaison à chaque itération, et de garder la plus grande valeur en mémoire, en faisant, dans la boucle :
$valeurMax = max($valeurMax, $nombre);

En termes de temps de calcul ce sera relativement équivalent (en O(n)), par contre la consommation mémoire sera moindre pour un grand nombre d'itérations. Inconvénient, si tu veux faire d'autres calculs sur l'ensemble des nombres, tu ne les as plus.

Xavier
0