TP 02
INTRODUCTION AUX STRUCTURES CONDITIONNELLES


Objectifs:

o Savoir effectuer des tests dans les programmes
o Utiliser les constantes
o Initiation aux tests de programme


Rappels :

- Créer un sous répertoire pour le TP (Exemple : TP02)
- Copier le fichier read.php dans votre répertoire de travail (TP02). Vous avez dû le sauver dans votre répertoire au cours du premier TP
<?php
function read( )
{
$fp = fopen("php://stdin", "r");
$in = fgets ($fp,255);
fclose($fp);
$ligne = (PHP_OS == "WINNT") ? str_replace ("\r\n", "", $in) : str_replace("\n", "",$in);
return $ligne ;
}
?>

Exercice 1 : Créer un programme pyramide.php qui affiche une pyramide d'étoiles une hauteur de 10 étoiles

*
***
*****
*******
*********
***********
*************
***************
*****************
*******************

Exercice 2 : En créant une constante de valeur ? , créer un programme constante.php qui affiche le périmètre d'un cercle en fonction du rayon fourni par l'utilisateur

Pour définir une constante en PHP, on utilise la fonction DEFINE.
Exemple : On veut nommer une constante LYCEE qui a pour valeur "Lycee Leonard de Vinci"
Il faut écrire define ("lycee" , "Lycee Leonard de Vinci") ;

-------------------------------------------------
A partir de cet exercice, vous devez utiliser des structures conditionnelles.

Exercice 3 : Ecrire un programme plusPetit.php qui affiche le plus petit de deux nombres réels entrés au clavier par l'utilisateur.

Exercice 4 : Reprendre votre programme pyramide.php et afficher une pyramide dont la hauteur est saisie par l'utilisateur. La hauteur saisie sera inférieure à 11

Exercice 5 : Ecrire un programme testNombre.php qui affiche si un nombre saisi par l'utilisateur est pair et s'il est multiple de 3
N'oublez pas de tester votre programme et de remplir le tableau ci-dessous.

Résultat des tests :
Valeurs saisies Résultat affiché



Mettre aussi une colonne " Résultat attendu " pour préparer les tests
Exercice 6 : Ecrire le programme age.php en reprenant votre programme du TP01 permettant de calculer l' âge d'un utilisateur.
Améliorez-le ! Faites en sorte :
1. Que l'utilisateur n'ait pas à saisir l'année en cours. Servez-vous de la fonction date.
Exemple : $annee = date("Y") ; //$annee = 2004
2. Qu'il affiche un message d'erreur si la date de naissance saisie par l'utilisateur ne semble pas valide. Exemple : une personne ne doit pas avoir moins d'1 an et ne doit pas excéder les 130 ans.


Exercice 7 : Ecrire un programme triMots.php qui affiche dans l'ordre alphabétique 3 mots saisis par un utilisateur.

Exercice 8: Créez un programme tarificationDegressive.php qui respecte le cahier des charges suivant :

Une entreprise souhaite pouvoir appliquer un tarif dégressif pour ses articles en fonction de la quantité achetée.
1. Ecrire l'algorithme permettant d'afficher le montant total d'une facture lors de l'achat d'une quantité d'article: - si la quantité n'excède pas 10, l'article coûte 150 €
- si la quantité est comprise entre 10 et 49, l'article coûte 135 €
- si la quantité dépasse 49, l'article coûte 110 €

On fera saisir la quantité désirée à l'utilisateur du programme. On considère que la quantité saisie est valide.

2. Assurez-vous que votre programme fonctionne correctement, vous devez faire au moins 3 tests !
Exemple :

quantité 9 12 50
montant 1350 1620 5500


Exercice 9 : Ecrivez le programme mutuelle.php qui complète le programme que vous avez écrit dans l'exercice 5 du premier TP.

Vous effectuez une dépense de santé d'un montant MT à saisir.
La Sécurité sociale vous rembourse 70% de (MT moins 1 euro) avec un plafond de 105 euros
Votre mutuelle vous rembourse le complément en laissant au minimum 1 euro à votre charge et ne vous rembourse jamais plus de 350 % le montant de la Sécurité Sociale
Vous payez le montant restant.

Affichez ce que paie la Sécurité sociale, ce que paye la mutuelle, ce que vous payez.

NB : N'oubliez pas de tester ce programme dans tous les cas de figure.


Exercice 10: Ecrivez le programme secondePlus.php qui permette d'afficher une durée exprimée en heures, minutes, et secondes saisie par l'utilisateur sous cette forme (3 saisies). Préalablement à son affichage, le programme ajoutera une seconde à la durée saisie. Les données saisies sont considérées valides.

Avez vous pensé aux différents cas ?
Exemples : 01h 10 min 30 sec => 01h 10 min 31 sec, 01h 10 min 59 sec => ? , 01h 59 min 59 sec => ? ,
23h 59 min 59 sec=> ?

CORRECTION DU TP 02

pyramide.php
<?PHP
// Affiche une pyramide d'étoiles
echo " *\n" ;
echo " ***\n" ;
echo " *****\n" ;
echo " *******\n" ;
echo " *********\n" ;
echo "***********\n" ;
?>

constante.php
<?PHP
// Affiche le perimètre d'un cerche en fonction du rayon
include ("read.php") ;
print ("Saisir le rayon du cercle : ") ;
$rayon = read() ;
define ("pi" , 3.14);
$perimetre = 2 * pi * $rayon;
print ("\nLe perimetre d'un cercle de rayon ".$rayon) ;
print (" est ".$perimetre) ;
?>

plusPetit.php
<?PHP
include ("read.php");

print ("Entrez le premier nombre : ");
$valeur1 = read ();

print ("Entrez le second nombre : ");
$valeur2 = read ();

if ($valeur1 < $valeur2)
print ($valeur1. "est le plus petit nombre \n");
else
print ($valeur2." est le plus petit nombre \n");
?>

pyramide.php
<?PHP
// Affiche une pyramide d'étoiles
include ("read.php");
print ("Entrez la hauteur de la pyramide : ");
$hauteur = read ();
if ($hauteur > 0) echo " *\n" ;
if ($hauteur > 1) echo " ***\n" ;
if ($hauteur > 2) echo " *****\n" ;
if ($hauteur > 3) echo " *******\n" ;
if ($hauteur > 4) echo " *********\n" ;
if ($hauteur > 5) echo " ***********\n" ;
if ($hauteur > 6) echo " *************\n" ;
if ($hauteur > 7) echo "***************\n" ;
?>

testNombre.php
<?php //Il existe une solution plus simple
include ("read.php");
print ( " Nombre ? ") ;
$nombre = read () ;
if ($nombre % 2 == 0 )
$pair = TRUE ;
else
$pair = FALSE;
if ($nombre % 3 == 0 )
$multiple3 = TRUE ;
else
$multiple3 = FALSE;
if ($pair && $multiple3)
print ("Le nombre ".$nombre." est pair et multiple de 3");
else
{if ($pair)
print ("Le nombre ".$nombre." est pair");
else
{if ($multiple3)
print ("Le nombre ".$nombre." est multiple de 3");
else
print ("Le nombre ".$nombre." est impair et n'est pas multiple de 3");
}
}
?>

age.php

<?PHP
include ("read.php");

print("Entrez votre prenom: \n");
$prenom = read ();

$anneeEnCours = date ("Y");

print("Entrez l'année de votre naissance: \n");
$anneeNaissance = read ();

$age = $anneeEnCours - $anneeNaissance ;

if ( ( $age > 130 ) || ( $age < 1 ))
{ print (" Erreur !" ); }
else
{ print ($prenom ." vous avez ".$age."ans"); }
?>


triMots.php
<?PHP
include ("read.php");
print("premier mot: ");
$mot1 = read ();
print("deuxieme mot: ");
$mot2 = read ();
print("troisieme mot: ");
$mot3 = read ();

if ($mot1<=$mot2 and $mot1<=$mot3)
{print ($mot1." \n");
if ($mot2<=$mot3)
print ($mot2." \n".$mot3);
else
print ($mot3." \n".$mot2);
}
else
{
if ($mot2<=$mot3)
{print ($mot2." \n");
if ($mot1<=$mot3)
print ($mot1." \n".$mot3);
else
print ($mot3." \n".$mot1);
}
else
{print ($mot3." \n");
if ($mot1<=$mot2)
print ($mot1." \n".$mot2);
else
print ($mot2." \n".$mot1);
}

}
?>


tarificationDegressive.php
Remarque : on préférera la solution avec imbrication !!!

Version sans imbrication
<?php
include ("read.php");
print ( " Quelle quantite ? \n") ;
$quantite = read () ;
if ($quantite < 10 )
{ $prix = 150 ; }
if (($quantite >=10) && ($quantite < 50 ))
{ $prix = 135 ; }
if ($quantite >= 50 )
{ $prix = 110 ; }
$total = $prix * $quantite ;
print ( " Le montant du est : ". $total . " euro(s)." ) ;?>

Version avec imbrication
<?php
include ("read.php");
print ( " Quelle quantité? \n") ;
$quantite = read () ;

if ($quantite < 10 )
{ $prix = 150 ; }
else
{
if ( $quantite < 50 )
{ $prix = 135 ; }
else
{ $prix = 110 ; }
}
$total = $prix * $quantite ;
print ( " Le montant dû est : ". $total . " € ." ) ;
?>

mutuelle.php
<?PHP
// Calcul du remboursement de soins pour un montant payé > 0
include ("read.php") ;
print ("Votre depense de sante : ") ;
$mt = read() ;
$mtSS = ($mt - 1) * 0.7;
if ($mtSS > 105) $mtSS = 105;
$mtMut = $mt - $mtSS - 1;
if ($mtMut > $mtSS * (350 / 100)) $mtMut = $mtSS * (350 / 100);
$mtPaye = $mt - $mtSS - $mtMut;
print ("\nLa Securite sociale paie : ".$mtSS."\n") ;
print ("La mutuelle paie : ".$mtMut."\n") ;
print ("Vous payez : ".$mtPaye."\n") ;
?>

secondePlus.php
<?PHP
include ("read.php");

print (" Entrez le nombre pour les heures : ") ;
$heure = read ();
print (" Entrez le nombre pour les minutes : ") ;
$min = read ();
print (" Entrez le nombre pour les secondes : ") ;
$sec = read ();

$sec = $sec + 1 ;
if ($sec == 60 )
{$sec = 0 ;
$min = $min +1 ;
if ($min == 60 )
{ $min = 0 ;
$heure = $heure + 1;
if ($heure == 24 )
{ $heure = 0 ; }
}
}
print ("\n\tUne seconde plus tard il sera : ".$heure. " h " .$min . " min ". $sec ." s \n")
?>

Remarque post TP :

3 étudiants ont réussi à terminer le TP en 3 heures.

Attention particulière :
- Ne pas utiliser les tabulations mais les espaces (pyramide)
- Ne pas mettre de " ; " après le if
- positionnement des " {} "
- Indentation
- Mettre des commentaires da ns les programmes
- Mettre les constantes en majuscules