Version complète: sur le forum Webmaster Hub : probleme creation fonction
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
choklata
la fonction consiste a calculer le solde comme suit
en 2001 la reste du solde congé agent est 5 jours
en 2002 la reste du solde congé agent est 10 jours
en 2003 la reste du solde congé agent est 26 jours

exemple 1
si l'agent demande un congé de 20 jours
2001--> reste 0 jours
2002 ---> reste 0 jours
2003 -->reste 21 jours
exemple 2
si l'agent demande un congé de 5 jours
2001--> reste 0 jours
2002 ---> reste 10 jours
2003 -->reste 26 jours

on suppose $a=2001 ,$b=2002 , $c= 2003
jer veut connaitre pour $n jours demander que reste congé dans ($a,$b,$c)
Thanat
Un début de réponse, à toi de traduire en php ...

fonction Calcul_Solde(année,n){
Si (solde_année - n < 0) alors
n = n - solde_année;
solde_année = 0;
Calcul_Solde(année+1,n)
Sinon
solde_année = solde_année - n;
n = 0;
FinSi
}

n est ton nombre de jour
année est l'année et solde_année correspond au solde de l'année année

Des contrôles sont sûrement à ajouter :
n > 0
somme des soldes < n
Dan
C'est rigolo comme fonction... et pas vraiment compliqué quand on utilise des array...

CODE
<?php
$solde_conge = array ( 2001=>5, 2002=>10, 2003=>26 );
$jours=20;

foreach($solde_conge as $key=>$value) {
  if($jours >= $value) {
     $jours-=$value;
     $value=0;
  }
  else {
     $value=$value-$jours;
     $jours=0;
  }
  $solde_conge[$key] = $value;    
}
print_r($solde_conge);
?>


Ou en fonction:
CODE
<?php
function conges ($a,$b,$c,$d) {
$solde_conge = array ( 2001=>$a, 2002=>$b, 2003=>$c );
$jours=$d;

  foreach($solde_conge as $key=>$value) {
     if($jours >= $value) {
        $jours-=$value;
        $value=0;
     }
     else {
        $value=$value-$jours;
        $jours=0;
     }
     $solde_conge[$key] = $value;
  }    
  return($solde_conge);
}

$jours=conges(5,10,26,20);
print_r($jours);

?>
NorSeb
Bonjour,

Soit $T_conges[annee] le tableau des congés par année.

$demande le nombre de jours demandés.
CODE
$reste_demande = $demande;
$annee_de_depart = 2001; // ARBITRAIRE

$annee_en_cours = $annee_de_depart;
while ($reste_demande > 0) {

// Si il y en a plus (ou autant) que la demande
if ($T_conges[$annee_en_cours] >= $reste_demande) {

  $T_conges[$annee_en_cours] -= $reste_demande;
}
// Sinon on "vide" l'année en cours
else {

 $reste_demande -= $T_conges[$annee_en_cours];
 $T_conges[$annee_en_cours] = 0;

}
 // Passer à l'année suivante
 $annee_en_cours ++;
}
choklata
super ! je sais que je suis dans le meilleur forum dans le monde wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.