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 */ // parametres de présentation $styleBouton = "font-size:9px;background-color:#DDD300;color:#000000;height:22px;border-width:1px;border-color:#000000;"; // get if (isset ($_GET['validation'])){ $validation=$_GET['validation']; }else{ $validation=0; } // Meta balise HTML ========================================================== echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "OpenMairie, repartition de sieges municipales"; // css ========================================================================= ?> "; echo "
"; // ============================================================================= // Saisie des resultats finaux // ============================================================================= if($validation==0){ echo "
"; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
openMairie elu - Elections Municipales
Calcul des sieges à pourvoir dans un conseil municipal - Ville > 3500 Habitants
"; echo "

Nombre de sieges à pourvoir suivant la population de la ville :
"; echo "

Age moyen (*)
La liste numero 1 a obtenu : "; echo ""; echo " voix ans
La liste numero 2 a obtenu : "; echo ""; echo " voix ans
La liste numero 3 a obtenu : "; echo ""; echo " voix ans
La liste numero 4 a obtenu : "; echo ""; echo " voix ans
La liste numero 5 a obtenu : "; echo ""; echo " voix ans
La liste numero 6 a obtenu : "; echo ""; echo " voix ans
La liste numero 7 a obtenu : "; echo ""; echo " voix ans
La liste numero 8 a obtenu : "; echo ""; echo " voix ans
La liste numero 9 a obtenu : "; echo ""; echo " voix ans
La liste numero 10 a obtenu : "; echo ""; echo " voix ans
"; echo "
"; echo "

"; echo "
"; echo "(*) l age moyen de la liste est à saisir en cas dégalité, la liste avec l age moyen le plus élevé emporte le siége ou le bonus
"; echo "
"; echo "Telechargement sur openMairie.org (Licence GPL):
"; echo " Telechargement de ce script"; echo " - openResultat Démo et téléchargement"; echo " - Gestion des listes electorales : openElec

"; echo "Documentation : "; echo "Mode de calcul [documentation francaise] - "; echo "Organisation du scrutin [edile.fr] - "; echo "Exemples de calcul [documentation francaise]"; // javascript de validation numerique ?> "; // *** sieges, calcul du bonus, siege_proportionnel *** echo "
Sieges à pourvoir
"; echo "Sieges à pourvoir au conseil municipal : ".$siegeCM." sieges"; $bonus = intval($siegeCM/2); if($siegeCM%2>0) $bonus=$bonus+1; echo "Bonus a attribuer a la premiere liste : ".$bonus." sieges"; $siege_proportionnel = $siegeCM-$bonus; echo "Reste à répartir entre les listes à la proportionnelle : ".$siege_proportionnel." sieges"; // *** constitution du tableau des voix *** echo "
Suffrages exprimées et age moyen
"; for($i=1;$i<=sizeof($voix);$i++){ if($voix[$i]!='') echo "Liste ".$i." : ".$voix[$i]."".$age[$i]." ans"; } // *** attribution à la proportionnelle $siege_proportionnel *** // total $total =array_sum($voix); echo "Total exprimé ".$total.""; // elimination des listes inferieure à 5% echo "
Liste inferieures à 5%
"; $elimination = intval($total/20); $total_recalcul = 0; $total_depart=$total; // controle 1 er tour for($i=1;$i<=sizeof($voix);$i++){ if($voix[$i]<$elimination and $voix[$i]!=''){ echo "Liste ".$i." est eliminee car elle n'obtient pas 5% des suffrages exprimés "; $total=$total-$voix[$i]; $voix[$i]=0; $total_recalcul=1; } } if($total_recalcul==1) echo "Total exprimé apres elimination de liste(s) ".$total.""; else echo " aucune liste "; // calcul du quotient electoral echo "
Premiere Repartition
"; $quotientelectoral = $total/$siege_proportionnel; $temp3= intval($quotientelectoral*100)/100; $temp3=number_format($temp3,2); echo "Quotient Electoral = ".$total." voix /".$siege_proportionnel." sieges a repartir ".$temp3.""; for($i=1;$i<=sizeof($voix);$i++){ if($voix[$i]!=''){ $siege[$i] = intval($voix[$i]/$quotientelectoral); echo "Liste ".$i." obtient dans la premiere repartition ".$siege[$i]." siege(s) "; } } // reste a attribuer a la proportionnelle $reste_a_attribuer = $siege_proportionnel-array_sum($siege); echo "Il reste à attribuer ".$reste_a_attribuer." siege(s)"; // *** attribution a la plus forte moyenne *** $k=0; while (array_sum($siege)<$siege_proportionnel){ // plus forte moyenne $k++; if($k==1) $suffixe="er"; else $suffixe="eme"; echo "
".$k.$suffixe." siege a attribuer
"; // 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 "Liste ".$i." a comme moyenne si elle obtient ".$temp1." siege(s) ".$temp2.""; } } $maxmoyenne=max($temp); $siege2fois=0; $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 "Liste ".$liste[1]." obtient le siege en plus, elle dispose donc de ".$siege[$liste[1]]." siege(s)"; }else{ $siege2fois=0; for($i=1;$i<=sizeof($liste);$i++){ $ageliste[$i]=$age[$liste[$i]]; } //print_r($ageliste); $agemax = max($age); for($i=1;$i<=sizeof($liste);$i++){ if($age[$i]==$agemax){ $siege2fois++; if($siege2fois==1){ $siege[$liste[$i]] = $siege[$liste[$i]]+1; echo "Liste ".$liste[$i]. " obtient le siege en plus,
au benefice de l age, et elle dispose donc de ". $siege[$liste[$i]]." siege(s)"; }else{ echo " Il y a egalite de moyenne et d age, pour la liste ".$liste[$i]."
"; echo " l attribution a ete faite a la 1 ere liste.
"; if($test2==0) echo "SAISIR AGE MOYEN DE CHAQUE LISTE"; echo "
!
"; } } } } } // *** attribution du bonus *** // max $max = max($voix); echo "
Attribution du bonus à la premiere liste
"; $bonus2fois=0; $liste=array(); for($i=1;$i<=sizeof($voix);$i++){ if($voix[$i]== $max){ $bonus2fois++; $liste[$bonus2fois]=$i; } } if($bonus2fois==1){ $siege[$liste[1]] = $siege[$liste[1]]+$bonus; echo "Liste ".$liste[1]." a le bonus de ".$bonus." sieges et elle dispose donc de ".$siege[$liste[1]]." siege(s)"; if($voix[$liste[1]]<$total_depart/2){ $temp4=round($total_depart/2,0); echo "Liste ".$liste[1]. " n a pas la majorite absolue qui est de ".$temp4. " voix
Il faut vérifier si la liste a plus de 25% des inscrits pour le 1er tour
!
"; } }else{ $siege2fois=0; for($i=1;$i<=sizeof($liste);$i++){ $ageliste[$i]=$age[$liste[$i]]; } $agemax = max($age); for($i=1;$i<=sizeof($liste);$i++){ if($age[$i]==$agemax){ $siege2fois++; if($siege2fois==1){ $siege[$liste[$i]] = $siege[$liste[$i]]+$bonus; echo "Liste ".$liste[$i]. " a le bonus de ".$bonus." sieges
au benefice de l age et elle dispose donc de ". $siege[$liste[$i]]." siege(s)"; if($voix[$i]<$total_depart/2){ $temp4=round($total_depart/2,0); echo "Liste ".$i. " n a pas la majorite absolue qui est de ".$temp4. " voix
Il faut vérifier si la liste a plus de 25% des inscrits pour le 1er tour
!
"; } }else{ echo " Il y a egalite de moyenne et d age, pour la liste ".$liste[$i]."
"; echo "le bonus a été attribue a la 1 ere liste.
"; if($test2==0) echo "SAISIR AGE MOYEN DE CHAQUE LISTE"; echo "
!
"; } } } } echo "
Resultat final
"; for($i=1;$i<=sizeof($voix);$i++){ if($voix[$i]!='') echo "La liste ".$i." obtient au final ".$siege[$i]." sieges"; } echo ""; } // fin test == 0 echo "

retour à une nouvelle saisie des resultats"; } // fin test validation //============================================================================== echo "
"; ?>