un message signale l anomalie http://www.politique.com/dossiers/france/articles/modes-scrutin/elections-municipales.htm L attribution a ce moment la suit des regles suivant la date de naissance des co listiers (les dates de naissance ne sont pas saisies) Voir les explications du site de la documentation francaise et edile.fr dont le lien apparait en page 1. La repartition se fait au 1er tour si une liste obtient plus de 50% de voix et un quart au moins des electeurs inscrits -> message si la 1ere liste n a pas la majorite absolue $elimination : Siège si liste < 5% des exprimés ($total) $bonus pour le 1ere liste = moitié arrondi à l entier superieur ($bonus) si il y a plus de 4 sieges à repartir (si il y a plus de 3500 habitants, je ne vois pas comment il y aurait moins de 4 sieges ?) $siege_proportionnel (total siege $siegeCM - $bonus) repartis entre toutes les listes à la représentation proportionnelle suivant la règle de la plus forte moyenne. " (art. L. 262 du code électoral) EXEMPLES TESTES (attention erreur sur le quotient dans l exemple sur le site de la documentation francaise) http://www.ladocumentationfrancaise.fr/dossiers/municipales/exemple.shtml Nombre de sieges : 49 sieges *** Exemple Avec 2 listes *** Liste A : 15167 voix (50,1 % des suffrages) => 12 + 0 + 25 =37 Liste B : 15108 voix (49,9 % des suffrages) => 11 + 1 =12 *** Exemple Avec 5 listes : liste A (+ 50% / B et C - 5%) *** Liste A : 15167 voix (50,1 % des suffrages) => 13+ 0 + 0 + 25 = 38 Liste B : 1453 voix (4,8 % des suffrages) Liste C : 1348 voix (4,4 % des suffrages) Liste D : 7825 voix (25,9 % des suffrages) => 6 + 0 + 1 = 7 Liste E : 4482 voix (14,8 % des suffrages) => 3 + 1 + 0 = 4 *** Exemple avec 3 listes Liste A : 11214 voix (37 % des suffrages) => 8 + 1 + 25 = 34 Liste B : 10902 voix (36 % des suffrages) => 8 + 1 = 9 Liste C : 8159 voix (27 % des suffrages) => 6 + 0 = 6 ================================================================================ Pour plus d explication sur les fonctions tableaux dans ce script, il faut se rapporter à : http://www.manuelphp.com/php/ref.array.php */ // fonctions /** * */ function titre($texte) { // echo ""; echo ""; echo "
"; echo ""; echo $texte; echo ""; echo "
"; echo ""; echo "\n"; } /** * */ function col1($texte) { // echo ""; echo ""; echo $texte; echo ""; } /** * */ function col1_2($texte) { // echo ""; echo ""; echo $texte; echo ""; } /** * */ function col1_2g($texte) { // echo ""; echo ""; echo $texte; echo ""; } /** * */ function col1_1g($texte) { // echo ""; echo ""; echo $texte; echo ""; } /** * */ function col2($texte) { // echo ""; echo $texte; echo ""; echo "\n"; } /** * */ function col2_tr($texte) { echo ""; echo $texte; echo ""; } /** * */ function col2_td($texte) { // echo ""; echo $texte; echo ""; echo ""; echo ""; echo "\n"; } /** * */ function col3($texte) { // echo ""; echo $texte; echo ""; echo "\n"; } /** * */ function erreur($conseil, $siege_total) { echo "\t

"; echo "NOMBRE DE SIEGES CONSEIL = ".$siege_total."

"; echo "SAISIE DES SIÈGES A POURVOIR dans Paramétrage -> Collectivité ".$conseil; } /** * */ function entete($elec, $siege_total, $conseil) { // *** sieges, calcul du bonus, siege_proportionnel *** //echo ""; titre("ELECTION ".$elec." - Sieges à pourvoir au conseil ".$conseil); col1_2("Sieges à pourvoir : "); col2($siege_total." sieges"); } /** * Retourne les valeurs d'une colonne d'un tableau d'entrée. * * Retourne les valeurs de la colonne voix du tableau d'informations sur les * candidats/listes passé en paramètre. * * @param mixed $candidats Liste des candidats/listes. * @return mixed Tableau listant le nombre de voix de chaque candidat/liste. */ function voix($candidats) { // $voix = array(); // foreach ($candidats as $key => $candidat) { // $voix[$key]= $candidat['voix']; } return $voix; } /** * Retourne les valeurs d'une colonne d'un tableau d'entrée. * * Retourne les valeurs de la colonne nom et prénom du tableau d'informations * sur les candidats/listes passé en paramètre. * * @param mixed $candidats Liste des candidats/listes. * @return mixed Tableau listant le libellé de chaque candidat/liste. */ function libelle($candidats) { // $libelle = array(); // foreach ($candidats as $key => $candidat) { // $libelle[$key] = $candidat['nom']." ".$candidat['prenom']; } return $libelle; } /** * Retourne les valeurs d'une colonne d'un tableau d'entrée. * * Retourne les valeurs de la colonne code du tableau d'informations * sur les candidats/listes passé en paramètre. * * @param mixed $candidats Liste des candidats/listes. * @return mixed Tableau listant le code de chaque candidat/liste. */ function code($candidats) { // $code = array(); // foreach ($candidats as $key => $candidat) { // $code[$key] = $candidat['code']; } return $code; } /** * Récupère l'age moyen de chacune des listes. * * Le principe de cette méthode est de boucler sur la liste des candidats * passée en paramètre et de récupérer l'information sur l'age moyen * de la liste correspondante dans la table liste de la base de données. * Si l'enregistrement n'existe pas, c'est la valeur 0 qui est renvoyée comme * valeur d'âge moyen pour la liste. * * @param mixed &$db Resource de la base de données. * @param mixed $candidats Liste des candidats/listes. * @param string $elec Identifiant de l'élection (Exemple : MUN08-1). * @param string $conseil Type de conseil ("municipal" ou "communautaire"). * @return mixed Tableau d'âge, une valeur par candidat/liste. */ function agemoyen(&$db, $candidats, $elec, $conseil) { // Initialisation du tableau à retourner $age = array(); // On boucle sur chacun des candidats/listes foreach ($candidats as $key => $candidat) { // En fonction du type de conseil on récupère un champ ou un autre if ($conseil == "municipal") { $sql_age = " select age_moyen as age_moyen from liste "; } else { $sql_age = " select age_moyen_com as age_moyen from liste "; } // $sql_age .= " where election='".$elec."' "; $sql_age .= " and candidat='".$candidat['code']."' "; // $res1 = $db->query($sql_age); // if (DB::isError($res1)) { // die($res1->getMessage()."erreur ".$sql_age); } else { // while ($row =& $res1->fetchRow(DB_FETCHMODE_ASSOC)) { // $age[$key] = $row['age_moyen']; } } $res1->free(); // Si l'enregistrement n'existe pas, on initialise la valeur à 0. if (!isset($age[$key])) { $age[$key] = 0; } } // return $age; } /** * Retourne le nombre de sièges constituant le bonus. * * @param integer $siege Nombre total de sièges à attribuer. * @return integer NOmbre de sièges constituant le bonus. */ function bonus($siege) { // Le bonus correspond à la moitié des sièges disponibles // arrondi à l'entier supérieur lorsqu il y a plus de 4 sieges a pourvoir // sinon arrondi a l entier inferieur $bonus = intval($siege / 2); if ($siege % 2 > 0 and $siege>4) { $bonus = $bonus + 1; } // Affichage du bonus col1_2("Bonus a attribuer a la premiere liste : "); col2($bonus." sieges"); // Retourne la valeur du nombre de sièges bonus return $bonus; } /** * Retourne le nombre de sièges à répartir à la proportionnelle. * * @param integer $siege Nombre total de sièges à attribuer. * @param integer $bonus Nombre de sièges constituant le bonus. * @return Nombre de sièges restant à répartir à la proportionnelle. */ function siege_proportionnel($siege, $bonus) { // Le nombre de siège à répartir à la proportionnelle correspond au nombre // total de sièges moins le bonus $siege_proportionnel = $siege - $bonus; // Affichage du nombre de sièges à répartire à la proportionnelle col1_2g("Reste à répartir entre les listes à la proportionnelle : "); col2($siege_proportionnel." sieges"); // Retourne la valeur du nombre de sièges à répartir à la proportionnelle return $siege_proportionnel; } /** * Affiche les résultats et l'âge moyen par candidat/liste. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param mixed $age Tableau d'âge, une valeur par candidat/liste. */ function voix_age($voix, $age) { // titre("Suffrages exprimés et age moyen "); // foreach ($voix as $key => $value) { // if ($voix[$key] != '') { // if (isset($age[$key])) { // col1("Liste ".$key." : "); col2_tr($value); col3($age[$key]." ans"); }else{ // $age[$key]=0; col1("Liste ".$key." : "); col2_tr($value); col3($age[$key]." ans"); } } } } /** * Retourne le nombre total de voix exprimé. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @return integer Total des suffrages exprimés dans le tableau des voix passé * en paramètre. */ function total($voix) { // Additione le nombre de voix récolté par chaque candidat/liste $total = array_sum($voix); // Affiche le nombre de total de voix exprimé. col1_1g("Total exprime : "); col2_td($total); // Retourne le nombre de total de voix exprimé. return $total; } /** * Élimine les listes avec moins de 5% des voix. * * @param integer $total Nombre total de voix exprimé. * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @return mixed Tableau listant le nombre de voix de chaque candidat/liste mis * à jour avec le nombre de liste. */ function total_recalculer($total, $voix) { // elimination des listes inferieure à 5% // et recalcul du total exprime // Affichage du titre echo ""; echo ""; echo "\n"; // On calcule la limite de l'élimination qui correpond // à l'entier inférieur du 5% des voix $elimination = intval($total/20); // On définit un marqueur pour vérifier si au moins une des listes à été // éliminée ou non $total_recalcul = 0; // for ($i =1; $i <= sizeof($voix); $i++) { // if ($voix[$i] < $elimination and $voix[$i] != '') { // echo ""; echo ""; echo "\n"; // On calcule le nombre de votes exprimés en soustrayant le nombre // de vote pour la liste éliminée $total = $total - $voix[$i]; // On modifie le tableau des voix par candidat/liste pour // positionner 0 à la liste éliminée $voix[$i] = 0; // On passe le marqueur à 1 pour indiquer qu'une des listes au // moins a été éliminée $total_recalcul = 1; } } if ($total_recalcul == 1) { // echo ""; echo ""; echo ""; echo ""; echo "\n"; } else { // echo ""; echo ""; echo "\n"; } // return $voix; } /** * Retourne le quotient électoral. * * Le calcul du quotient électoral s'opère en divisant le total des suffrages * exprimés en faveur des listes admises à la répartition des sièges par le * nombre de sièges restant à pourvoir après attribution des sièges au titre * de la prime majoritaire (bonus). * * @param integer $total Total des suffrages exprimés en faveur des listes * admises à la répartition des sièges. * @param integer $siege_proportionnel Nombre de sièges restant à pourvoir * après attribution des sièges au titre * de la prime majoritaire (bonus). * @return integer Quotient électoral. */ function quotientelectoral($total, $siege_proportionnel) { // Calcul du quotient électoral $quotientelectoral = $total / $siege_proportionnel; // Affichage du quotient électoral echo ""; echo ""; echo "\n"; echo ""; echo ""; echo ""; echo ""; echo "\n"; // Retourne le quotient électoral return $quotientelectoral; } /** * Retourne le calcul des sièges selon la première répartition. * * Le calcul est le suivant : autant de fois les listes ont obtenu le quotient * électoral, autant de fois 1 siège leur est attribué. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param float $quotientelectoral Quotient électoral. * @return mixed Tableau provisoire du nombre de sièges attribués par liste. */ function siege($voix, $quotientelectoral) { // $siege = array(); // for ($i = 1; $i <= sizeof($voix); $i++) { // if ($voix[$i] != '') { // if ($quotientelectoral == 0) { $siege[$i] = 0; } else { $siege[$i] = intval($voix[$i] / $quotientelectoral); } // echo ""; echo ""; echo ""; echo "\n"; } } // return $siege; } /** * Retourne le nombre de sièges restant à attribuer après la première répartition. * * @param mixed $siege Tableau provisoire du nombre de sièges attribués par liste. * @param integer $siege_proportionnel Nombre de sièges restant à pourvoir * après attribution des sièges au titre * de la prime majoritaire (bonus). * @return integer Nombre de sièges restant à attribuer. */ function reste_a_attribuer($siege, $siege_proportionnel) { // Le calcul se fait en soustrayant la somme des sièges déjà provisoirement // attribués à chaque liste au nombre de sièges à partager à la proportionnelle $reste_a_attribuer = $siege_proportionnel - array_sum($siege); // Affiche le nombre de sièges restants à attribuer echo ""; echo ""; echo ""; echo "\n"; // Retourne le nombre de sièges restant à attribuer return $reste_a_attribuer; } /** * La fonction calcule l attribution des sieges non repartis à la premiere repartition (fonction siege) * Les sieges restants sont attribues a la plus forte moyenne * on prend chaque liste et on calcule la moyenne si on rajoute un siege supplementaire * siege2fois verifie qu il n' y a pas egalite de liste ayant la meme moyenne pour le siege supplementaire attribue * cas normal (siege2fois==1) * cas specifique : deux ou plusieurs listes ont la meme plus grosse moyenne (siege2fois > 1) * dans ce cas, on prend la liste qui a le plus de voix * cas non traite : les 2 listes ont le meme nombre de voix : on prend le conseiller le plus age * * @param mixed $siege Tableau provisoire du nombre de sièges attribués par liste. * @param integer $siege_proportionnel Nombre de sièges restant à pourvoir * après attribution des sièges au titre * de la prime majoritaire (bonus). * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @return mixed Tableau provisoire du nombre de sièges attribués par liste. */ function calulproportionnel($siege, $siege_proportionnel, $voix) { // $k = 0; // On boucle tant que tous les sièges n'ont pas été affecté à la plus forte moyenne while (array_sum($siege) < $siege_proportionnel) { $k++; // echo ""; echo ""; echo "\n"; // for ($i = 1; $i <= sizeof($voix); $i++) { // moyenne par liste avec un siege de plus // attribué a chaque liste if ($voix[$i] != '') { // $temp[$i] = $voix[$i] / ($siege[$i] + 1); // $temp1= $siege[$i]+1; $temp2= intval($temp[$i]*100)/100; $temp2= number_format($temp2, 2); // echo ""; echo ""; echo ""; echo ""; echo "\n"; } } // $maxmoyenne = max($temp); $siege2fois = 0; // liste renvoie la ou les listes qui ont la plus forte moyenne a egalite $liste = array(); // for ($i = 1; $i <= sizeof($voix); $i++) { // if ($voix[$i] != '') { // if ($temp[$i] == $maxmoyenne ) { // $siege2fois++; // $liste[$siege2fois] = $i; } } } // if ($siege2fois == 1) { // $siege[$liste[1]] = $siege[$liste[1]] + 1; // echo ""; echo ""; echo ""; echo "\n"; }else{ // egalite de moyenne // le siege est attribue à la liste qui a le plus grand nombre de suffrage $siege2fois=0; // for ($i = 1; $i <= sizeof($liste); $i++) { // $voixliste[$i] = $voix[$liste[$i]]; } // $voixmax = max($voixliste); // for ($i = 1; $i <= sizeof($liste); $i++) { // if ($voix[$liste[$i]] == $voixmax) { // $i = $liste[$i] // $siege2fois++; // if ($siege2fois == 1) { // $siege[$liste[$i]] = $siege[$liste[$i]] + 1; // echo ""; echo ""; echo ""; echo "\n"; } else { // echo ""; echo ""; echo ""; echo "\n"; } } } } } // return $siege; } /** * le bonus est attribué à la liste arrivant en tete * si il y a egalité de liste arrivee en tete : bonus2fois > 1 * le bonus est attribue a la liste ayant l age moyen le plus eleve * le tableau liste comprend les listes concernés * @return mixed Tableau provisoire du nombre de sièges attribués par liste. */ function attributionbonus($bonus2fois, $siege, $liste, $bonus, $voix, $total_depart, $age) { // Egalite de suffrage // le bonus est attribue a la liste qui a la moyenne d age la plus eleve if ($bonus2fois == 1) { // $siege[$liste[1]] = $siege[$liste[1]] + $bonus; // echo ""; echo ""; echo ""; echo "\n"; // if ($voix[$liste[1]] < $total_depart / 2) { // $temp4 = round($total_depart / 2, 0); // echo ""; echo ""; echo ""; echo "\n"; } } else { // $siege2fois = 0; // for ($i = 1; $i <= sizeof($liste); $i++) { // $ageliste[$i] = $age[$liste[$i]]; } // $agemax = max($ageliste); //* age -> ageliste // for ($i = 1; $i <=sizeof($liste); $i++) { // if ($age[$liste[$i]] == $agemax) { // $siege2fois++; // if ($siege2fois == 1) { // $siege[$liste[$i]] = $siege[$liste[$i]] + $bonus; // echo ""; echo ""; echo ""; echo "\n"; // if ($voix[$i] < $total_depart / 2) { // $temp4 = round($total_depart / 2, 0); // echo ""; echo ""; echo ""; echo "\n"; } } else { // echo ""; echo ""; echo ""; echo "\n"; } } } } // return $siege; } /** * Affiche le résultat final de la répartition. * * C'est-à-dire le nombre de sièges attribué à chacune des listes non éliminées. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param mixed $siege Tableau final du nombre de sièges attribués par liste. * @return mixed Tableau final du nombre de sièges attribués par liste. */ function resultatfinal($voix, $siege) { // Affichage echo ""; echo ""; echo ""; echo "\n"; // foreach ($voix as $key => $value) { // if ($value != "0") { // echo ""; echo ""; echo ""; echo "\n"; } } // return $siege; } /** * Sauvegarde les résultat de la répartition dans la table liste. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param mixed $code Tableau listant le code de chaque candidat/liste. * @param mixed &$db Resource de la base de données. * @param string $conseil Type de conseil ("municipal" ou "communautaire"). * @param string $elec Identifiant de l'élection (Exemple : MUN08-1). * @param mixed $siege Tableau final du nombre de sièges attribués par liste * pour le conseil en question. * @return void */ function sauve_liste($voix, $code, &$db, $conseil, $elec, $siege, $DEBUG) { // foreach ($voix as $key => $value) { // $cletmp = $elec."-".$code[$key]; // if ($conseil == 'municipal') { // if (array_key_exists($key, $siege)) { $sql_maj_liste = "UPDATE liste SET siege = '".$siege[$key]."'"; } else { $sql_maj_liste = "UPDATE liste SET siege = '0'"; } } else { if (array_key_exists($key, $siege)) { $sql_maj_liste = "UPDATE liste SET siege_com = '".$siege[$key]."'"; } else { $sql_maj_liste = "UPDATE liste SET siege_com = '0'"; } } $sql_maj_liste .= " WHERE liste = '".$cletmp."'"; // $res = $db->query($sql_maj_liste); if (DB::isError($res)) { die ($res -> getMessage ()."erreur ".$sql_maj_liste); } else { if ($DEBUG == 1) { echo "La requête de mise à jour ".$sql_maj_liste." est effectuée.
"; } } } } /** * Ecrit le fichier contenant le résultat de la répartition pour affichage dans * l'animation. * * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param mixed $code Tableau listant le code de chaque candidat/liste. * @param mixed &$db Resource de la base de données. * @param string $conseil Type de conseil ("municipal" ou "communautaire"). * @param string $elec Identifiant de l'élection (Exemple : MUN08-1). * @param mixed $siege Tableau final du nombre de sièges attribués par liste * pour le conseil communautaire. * @param mixed $siege_lm Tableau final du nombre de sièges attribués par liste * pour le conseil municipal. * @return void */ function siege_lm($voix, $code, &$db, $conseil, $elec, $siege, $siege_lm) { // Si le dossier "aff/res/".$election."/" n'existe pas on le cré if (!file_exists ("../aff/res/".$elec)) { mkdir ("../aff/res/".$elec); } // On écrit le fichier sieges_lm.inc $fp = fopen ("../aff/res/".$elec."/sieges_lm.inc", "w"); // $contenu = " $value) { // if (array_key_exists($key, $siege_lm)) { $contenu .= $siege_lm[$key].","; } else { $contenu .= '0'.","; } } // $contenu .= ");\n"; // Tableau n°2 : siege_lc $contenu .= "\$siege_lc = array("; // foreach ($voix as $key => $value) { // if (array_key_exists($key, $siege)) { $contenu .= $siege[$key].","; } else { $contenu .= '0'.","; } } $contenu .= ");\n"; // Tableau n°3 : code_lm - Constitution du tableau code candidat $contenu .= "\$code_lm = array("; // foreach ($voix as $key => $value) { // $contenu .= $code[$key].","; } $contenu .= ");\n"; // Tableau n°4 : noliste_lm $contenu .= "\$noliste_lm = array("; // foreach ($voix as $key => $value) { // $contenu .= $key.","; } $contenu .= ");\n"; // Fin du fichier $contenu .= "?>"; // On écrit le fichier sur le disque fwrite($fp, $contenu); fclose($fp); } /** * Cette fonction se charge du calcul complet de la répartition des sièges pour * un conseil. * * @param mixed $candidats Liste des candidats. * @param string $elec Identifiant de l'élection (Exemple : MUN08-1). * @param integer $siegetotal Nombre total de sièges à attribuer. * @param string $conseil Type de conseil ("municipal" ou "communautaire"). * @param mixed &$db Resource de la base de données. * @param mixed $voix Tableau listant le nombre de voix de chaque candidat/liste. * @param mixed $libelle Tableau listant le libellé de chaque candidat/liste. * @param mixed $code Tableau listant le code de chaque candidat/liste. * @param integer $DEBUG Variable de (0 : pas de message, 1 : message). * * @return mixed Tableau listant le nombre de sièges par candidat/liste. */ function repartition($candidats, $elec, $siegetotal, $conseil, &$db, $voix, $libelle, $code, $DEBUG) { // XXX Vérifier que le paramétrage des listes existe avant de lancer le calcul // On affiche l'entête du tableau récapitulatif de la répartition if ($DEBUG == 1) { echo "\n"; } entete($elec, $siegetotal, $conseil); // On calcule et on affiche le nombre de sièges bonus if ($DEBUG == 1) { echo "\n"; } $bonus = bonus($siegetotal); // On calcule et on affiche le nombre de sièges à répartir à la proportionnelle if ($DEBUG == 1) { echo "\n"; } $siege_proportionnel = siege_proportionnel($siegetotal, $bonus); // On récupère l'âge moyen pour chaque candidat/liste if ($DEBUG == 1) { echo "\n"; } $age = agemoyen($db, $candidats, $elec, $conseil); // On affiche le résultat et l'âge moyen de chaque candidat/liste if ($DEBUG == 1) { echo "\n"; } voix_age($voix, $age); // attribution à la proportionnelle if ($DEBUG == 1) { echo "\n"; } // On affiche le nombre total de voix exprimé if ($DEBUG == 1) { echo "\n"; } $total = total($voix); // Si le nombre total de voix exprimé est vide alors on retourne le tableau des voix // qui a la même structure que le tableau résultat avec uniquement des 0 if ($total == 0) { return $voix; } // On conserve le total des suffrages exprimés initial dans la variable $total_depart $total_depart=$total; // On élimine les listes inférieures à 5% if ($DEBUG == 1) { echo "\n"; } $voix = total_recalculer($total, $voix); // On recalcule et on affiche le nombre total de voix exprimé sans les listes éliminées if ($DEBUG == 1) { echo "\n"; } $total = total($voix); // On calcule et on affiche le quotient électoral if ($DEBUG == 1) { echo "\n"; } $quotientelectoral = quotientelectoral($total, $siege_proportionnel); // On calcule et on affiche la première répartition proportionnelle if ($DEBUG == 1) { echo "\n"; } $siege = siege($voix, $quotientelectoral); // On calcule et on affiche le nombre de sièges restants à attribuer if ($DEBUG == 1) { echo "\n"; } $reste_a_attribuer = reste_a_attribuer($siege, $siege_proportionnel); // repartition des siegs restant (suite a la premiere repartition) a la plus forte moyenne $siege=calulproportionnel($siege, $siege_proportionnel, $voix ); // recherche de la liste ayant le plus de voix et traitement de l egalite des voix $max = max($voix); titre("Attribution du bonus à la liste arrivee en tete"); // recherche de la liste ayant le plus de voix $bonus2fois=0; // bonus2fois controle que le nombre de fois que le bonus est affecte // exemple : 2 listes qui arrievent en tete avec la meme score // liste contient le ou les listes ayant le plus de voix $liste=array(); for($i=1;$i<=sizeof($voix);$i++) { if($voix[$i]== $max) { $bonus2fois++; $liste[$bonus2fois]=$i; } } $siege = attributionbonus($bonus2fois, $siege, $liste, $bonus, $voix, $total_depart, $age); // On affiche le résultat final de la répartition if ($DEBUG == 1) { echo "\n"; } $siege = resultatfinal($voix, $siege); // On sauvegarde le résultat de la répartition en base de données if ($DEBUG == 1) { echo "\n"; } sauve_liste($voix, $code, $db, $conseil, $elec, $siege, $DEBUG); // On retourne le tableau du résultat final de la répartition return $siege; } // Instanciation de la classe utils require_once "../obj/utils.class.php"; if (!isset($f)) { $f = new utils( null, "Calcul de la répartition des sièges", "siegeselu", "siegeselu" ); } // On initialise la variable $DEBUG avec la valeur 0 // pour ne pas afficher les messages trop verbeux du traitement. // Pour afficher les messages il faut initialiser la variable à 1. $DEBUG = 0; // $elec = ""; if (isset ($_GET['idx'])) { $elec = $_GET ['idx']; } // $flag_election = 1; if (trim($elec) == "") { $flag_election = 0; } // Ouverture du conteneur spécifique de la page echo "\n\t
\n"; // if (file_exists("../aff/res/".$elec."/resultats.inc") && $flag_election == 1 ) { // Affichage de l'identifiant et de la date de l'élection echo "

"; echo ""; echo "Election ".$elec." du ".$_SESSION['election']['date']; echo ""; echo "

\n"; // On récupère les résultats par candidat/liste depuis le // fichier aff/res/ELECTION/resultats.inc include ("../aff/res/".$elec."/resultats.inc"); // alimentation des tableaux communs depuis resultats.inc $voix = voix($candidats); // voix obtenus $libelle = libelle($candidats); // nom et prenom de candidat $code = code($candidats); // cle primaire candidat // echo "
"; echo "
"; echo ""; echo "Liste (s) inferieure(s) à 5%"; echo ""; echo "
"; echo "
"; echo "Liste ".$i." est eliminee car elle n'obtient pas 5% des suffrages exprimes"; echo "
"; echo "Total exprime apres elimination de liste(s)"; echo ""; echo $total; echo ""; echo "
"; echo "aucune liste"; echo "
"; echo "
"; echo ""; echo "Premiere Repartition"; echo ""; echo "
"; echo "
"; echo "Quotient Electoral = ".$total." voix / ".$siege_proportionnel." sieges a repartir"; echo ""; // Formatage du quotient électoral tronqué à deux décimales pour affichage $temp3 = intval($quotientelectoral * 100) / 100; $temp3 = number_format($temp3, 2); echo $temp3; echo ""; echo "
"; echo "Liste ".$i." obtient dans la premiere repartition"; echo ""; echo $siege[$i]." siege(s)"; echo "
"; echo "Il reste à attribuer"; echo ""; echo $reste_a_attribuer." siege(s)"; echo "
"; echo "
"; echo ""; echo $k.($k == 1 ? "er" : "eme")." siege a attribuer"; echo ""; echo "
"; echo "
"; echo "Liste ".$i." a comme moyenne si elle obtient ".$temp1." siege(s)"; echo ""; echo $temp2; echo ""; echo "
"; echo "Liste ".$liste[1]." obtient le siege en plus, elle dispose donc de"; echo ""; echo $siege[$liste[1]]." siege(s)"; echo "
"; echo "Liste ".$liste[$i]." obtient le siege en plus, car elle a "; echo "
"; echo "le plus grand nombre de suffrage, et elle dispose donc de"; echo "
"; echo $siege[$liste[$i]]." siege(s)"; echo "
"; echo "Il y a egalite de moyenne et de suffrage, pour la liste ".$liste[$i].""; echo "
"; echo "l attribution a ete faite a la 1 ere liste trouvee."; echo "
"; echo "LE SIEGE DOIT ETRE ATTRIBUE AU PLUS AGEE"; echo "
"; echo "DES CANDIDATS SUCEPTIBLE D ETRE ELU"; echo "
"; echo " [openElu n a pas cette donnee]"; echo "
"; echo "
"; echo " ! "; echo "
"; echo "
"; echo "Liste ".$liste[1]." a le bonus de ".$bonus." sieges et elle dispose donc de"; echo ""; echo $siege[$liste[1]]." siege(s)"; echo "
"; echo "Liste ".$liste[1]." n a pas la majorite absolue qui est de ".$temp4." voix"; echo "
"; echo "Il faut aussi vérifier si la liste a plus de 25% des inscrits"; echo "
"; echo "pour le 1er tour"; echo "
"; echo "
"; echo " ! "; echo "
"; echo "
"; echo "Liste ".$liste[$i]." a le bonus de ".$bonus." sieges au benefice"; echo "
"; echo "de l age moyen le plus eleve et elle dispose donc de"; echo "
"; echo $siege[$liste[$i]]." siege(s)"; echo "
"; echo "Liste ".$i." n a pas la majorite absolue qui est de ".$temp4." voix"; echo "
"; echo "Il faut aussi vérifier que la liste a plus de 25% des inscrits"; echo "
"; echo "pour le 1er tour"; echo "
"; echo "
"; echo " ! "; echo "
"; echo "
"; echo "Il y a egalite de suffrage et d age moyen, pour la liste ".$liste[$i].""; echo "
"; echo "le bonus a été attribue a la 1 ere liste trouvee."; echo "
"; echo "Il semble que votre cas soit juridiquement impossible [openElu]."; echo "
"; echo "
"; echo "
"; echo " ! "; echo "
"; echo "
"; echo "
"; echo ""; echo "Resultat final"; echo ""; echo "
"; echo "
"; echo "
"; echo "La liste ".$key." obtient au final"; echo ""; echo $siege[$key]." sieges"; echo "
\n"; // ======================== // cas du conseil municipal // ======================== // $conseil = "municipal"; // Nombre de sièges total à répartir depuis le paramétrage collectivité $siegetotal = $f->collectivite['sieges']; // if ($siegetotal > 0) { // $sieges_municipal = repartition( $candidats, $elec, $siegetotal, $conseil, $f->db, $voix, $libelle, $code, $DEBUG ); } else { erreur($conseil, $siegetotal); } // Séprateur echo "\n"; // ============================ // Cas du conseil communautaire // ============================ // $conseil = "communautaire"; // Nombre de sièges total à répartir depuis le paramétrage collectivité $siegetotal = $f->collectivite['sieges_com']; // if ($siegetotal > 0) { // $sieges_communautaire = repartition( $candidats, $elec, $siegetotal, $conseil, $f->db, $voix, $libelle, $code, $DEBUG ); } else { erreur($conseil, $siegetotal); } // echo "
 
\n"; // sauvegarde le fichier pour affichage dans l'animation siege_lm( $voix, $code, $f->db, $conseil, $elec, $sieges_communautaire, $sieges_municipal ); } else { //fin flagelection == 1 echo "\t

"; echo "Election en cours absente ou resultats.inc absent"; echo "

\n"; } // Fermeture du conteneur spécifique de la page echo "\t\n"; ?>